Linux云计算SRE-第十周_sre基本知识
1. 总结关系型数据库相关概念,关系,行,列,主键,唯一键。
关系型数据库(Relational Database)是一种基于关系模型的数据库,它由多个表(table)组成,每个表代表一个实体(entity),如顾客、订单等。下面是关系型数据库中的一些关键概念:
1、关系 (Relation)
在关系型数据库中,\"关系\"通常指的是表(Table)。一个关系是一个由行和列组成的二维表格,每一行代表一个记录(record),每一列代表该实体的一个属性(attribute)。
2、行 (Row)
也称为元组(Tuple),是关系中的一个实例或一条记录。每一行包含了一个实体的完整信息集合。例如,在一个学生表中,每一行可以表示一个学生的全部信息,比如姓名、年龄、年级等。
3、列 (Column)
列定义了表中存储的数据类型,以及每个实体的特定属性。列也有自己的名称,这有助于识别它们所代表的信息。例如,在学生表中,可能有“学号”、“姓名”、“性别”等列。
4、主键 (Primary Key)
主键是用于唯一标识表中每一行记录的一列或多列组合。一个表只能有一个主键,并且主键不允许有NULL值。主键确保了每条记录的唯一性,便于快速查找和排序。
5、唯一键 (Unique Key)
唯一键与主键类似,它也用来保证一列或多列的值的唯一性。但是,一个表可以有多个唯一键,并且唯一键允许存在一个NULL值。这意味着如果某列被设为唯一键,那么该列中的所有非NULL值都必须是唯一的。
除了上述概念,关系型数据库还有其他重要的元素,如外键(Foreign Key),它用于建立和强化两个表之间的链接;索引(Index),它提高了查询速度;视图(View),它是根据SQL语句的结果集创建的虚拟表;触发器(Trigger),它是在满足某些条件时自动执行的一组动作;存储过程(Stored Procedure),它是一组为了完成特定功能的SQL语句集合,以一个名称存储以便之后调用。
关系型数据库设计时应遵循一定的规范化原则,以避免数据冗余和不一致。这些原则包括第一范式(1NF)、第二范式(2NF)、第三范式(3NF)等,随着范式的提升,数据库的设计更加复杂,但同时也更有效率和灵活性。
2. 总结关联类型,1对1,1对多,多对多关系。可以自行设计表进行解释。
1. 1对1 (One-to-One) 关联
1对1关联意味着一个表中的每一行最多与另一个表中的一行相关联,反之亦然。这种关系通常用于将信息拆分到多个表中,以提高性能或安全性。
表结构示例:
用户 (users)
用户详情 (user_details)
用户ID是用户表的主键(Primary Key, PK),同时也是用户详情表的外键(Foreign Key, FK)。每个用户只有一条详细信息记录,且每个详细信息记录只能属于一个用户。
2. 1对多 (One-to-Many) 关联
1对多关联是最常见的一种关系,表示一个表中的某一行可以与另一个表中的多行相关联,但反过来不行。例如,一个部门可以有多个员工,但每个员工只能属于一个部门。
表结构示例:
部门 (departments)
员工 (employees)
部门ID是部门表的主键,并且是员工表的外键。每个部门可以有多个员工,但是每个员工只能属于一个部门。
3. 多对多 (Many-to-Many) 关联
多对多关联表示两个表中的行可以相互之间有多条关联。为了实现这种关系,我们通常需要创建一个中间表(也称为连接表或桥梁表),该表包含两个表的主键作为外键。
表结构示例:
学生 (students)
课程 (courses)
学生课程 (student_courses) (连接表)
3. 总结Mysql多种安装方式,及安全加固,并总结mysql配置文件。
在Linux系统上安装MySQL,可以选择以下几种常见的方式:
通过包管理器安装:
大多数Linux发行版(如Ubuntu、Debian、CentOS等)都提供了MySQL的包,可以直接使用系统的包管理器(如apt、yum等)进行安装。这种方式最为简单,且会自动处理依赖关系。
通过二进制包安装:
可以从MySQL官方网站下载适用于Linux系统的二进制包(如tar.gz格式)。下载后,解压到指定目录,并配置环境变量和启动服务。这种方式需要手动配置,但灵活性较高。
通过源码编译安装:
从MySQL官方网站下载源码包,然后在Linux系统上编译安装。这种方式需要用户具备一定的编译和配置能力,但可以获得最新版本的MySQL,并可以根据需要进行自定义配置。
通过Docker容器安装:
如果系统上已经安装了Docker,可以通过Docker Hub查找并下载MySQL的Docker镜像,然后创建并运行MySQL容器。这种方式可以实现MySQL的隔离部署和快速迁移。
#rocky系统上mysql二进制安装 #1、编写shel脚本,实现rocky系统上的mysql二进制包安装 vim install_mysql.sh #!/bin/bash# 脚本配置SRC_DIR=$(pwd)MYSQL_PACKAGE=\'mysql-8.0.28-linux-glibc2.12-x86_64.tar.xz\'MYSQL_VERSION=$(echo $MYSQL_PACKAGE | sed -nr \'s/^(mysql-[0-9]+\\.[0-9]+)\\..*/\\1/p\')DATA_DIR=\'/data/mysql\'# 颜色输出函数color_output() { local color=$1 shift echo -e \"\\033[01;${color}m$*\\033[0m\"}# 检查是否为root用户check_root() { if [ \"$EUID\" -ne 0 ]; then color_output 31 \"当前用户不是root,安装失败\" exit 1 fi}# 检查必要的文件和环境check_environment() { if [ ! -f \"$SRC_DIR/$MYSQL_PACKAGE\" ]; then color_output 31 \"缺少$MYSQL_PACKAGE文件,请将相关软件放在$SRC_DIR目录下\" exit 1 elif [ -d \"/usr/local/mysql\" ]; then color_output 31 \"数据库已存在,安装失败\" exit 1 fi}# 安装依赖包install_dependencies() { yum -y -q install libaio numactl-libs ncurses-compat-libs}# 创建mysql用户create_mysql_user() { id mysql &> /dev/null || { useradd -r -s /sbin/nologin mysql; color_output 32 \"创建mysql用户\"; }}# 解压并设置MySQLextract_and_setup_mysql() { tar xf \"$SRC_DIR/$MYSQL_PACKAGE\" -C /usr/local/ ln -s \"/usr/local/$MYSQL_VERSION\" /usr/local/mysql chown -R root:root /usr/local/mysql}# 设置环境变量set_environment_variables() { echo \'export PATH=/usr/local/mysql-8.0.28-linux-glibc2.12-x86_64/bin/:$PATH\' > /etc/profile.d/mysql.sh . /etc/profile.d/mysql.sh ln -s /usr/loc