第十周
1. 关系型数据库相关概念
- 关系:关系型数据库中,数据以表格的形式存储,每个表格就是一个关系。关系由行和列组成,用于表示实体及其属性之间的关系。
- 行:也称为记录,是关系中的一个实例,表示一个实体的具体数据。
- 列:也称为字段,是关系中的一个属性,表示实体的某种特征。
- 主键:表中的一个或多个字段,用于唯一标识表中的每一行记录。主键的值必须唯一且非空。
- 唯一键:表中的一个或多个字段,用于保证表中数据的唯一性。唯一键的值可以为空,但每个非空值必须唯一。
2. 关联类型
- 1对1关系:一个实体对应另一个实体的唯一实例。例如,一个人对应一个身份证号码。
CREATE TABLE Person ( id INT PRIMARY KEY, name VARCHAR(50) ); CREATE TABLE IDCard ( id INT PRIMARY KEY, person_id INT UNIQUE, card_number VARCHAR(20), FOREIGN KEY (person_id) REFERENCES Person(id) ); - 1对多关系:一个实体对应多个实体的实例。例如,一个班级对应多个学生。
CREATE TABLE Class ( id INT PRIMARY KEY, name VARCHAR(50) ); CREATE TABLE Student ( id INT PRIMARY KEY, name VARCHAR(50), class_id INT, FOREIGN KEY (class_id) REFERENCES Class(id) ); - 多对多关系:多个实体对应多个实体的实例。例如,学生和课程之间的关系。
CREATE TABLE Student ( id INT PRIMARY KEY, name VARCHAR(50) ); CREATE TABLE Course ( id INT PRIMARY KEY, name VARCHAR(50) ); CREATE TABLE StudentCourse ( student_id INT, course_id INT, PRIMARY KEY (student_id, course_id), FOREIGN KEY (student_id) REFERENCES Student(id), FOREIGN KEY (course_id) REFERENCES Course(id) );
3. MySQL安装方式及安全加固与配置文件
- 安装方式:
- 使用包管理器安装:如在Linux上使用
yum或apt。 - 从源码编译安装:适合需要特定配置的场景。
- 使用二进制包安装:适合快速部署。
- 使用Docker安装:适合容器化环境。
- 使用包管理器安装:如在Linux上使用
- 安全加固:
- 使用
mysql_secure_installation命令进行安全配置。 - 设置强密码,限制用户权限,禁用匿名用户等。
- 使用
- 配置文件:
- 配置文件通常位于
/etc/my.cnf或/etc/mysql/my.cnf。 - 包含多个部分,如
[client]、[mysqld]、[mysqld_safe]等,用于配置客户端、服务器等参数。
- 配置文件通常位于
4. 获取SQL命令帮助及创建数据库和表
- 获取帮助:
HELP 'command'; - 创建数据库和表:
CREATE DATABASE testdb CHARACTER SET utf8 COLLATE utf8_bin; USE testdb; CREATE TABLE host ( id INT PRIMARY KEY, host VARCHAR(50), ip VARCHAR(15), cname VARCHAR(50) );
5. DDL和DML用法
- DDL(Data Definition Language):
- 创建表:
CREATE TABLE host ( id INT PRIMARY KEY, host VARCHAR(50), ip VARCHAR(15), cname VARCHAR(50) ); - 修改表:
ALTER TABLE host ADD COLUMN port INT; - 删除表:
DROP TABLE host;
- 创建表:
- DML(Data Manipulation Language):
- 插入数据:
INSERT INTO host (id, host, ip, cname) VALUES (1, 'example.com', '192.168.1.1', 'example'); - 更新数据:
UPDATE host SET ip = '192.168.1.2' WHERE id = 1; - 删除数据:
DELETE FROM host WHERE id = 1;
- 插入数据:
6. MySQL架构原理及存储引擎区别
- 架构原理:
- MySQL采用分层架构,包括客户端、服务器层和存储引擎层。
- 客户端通过网络与服务器层通信,服务器层处理SQL语句,存储引擎层负责数据存储和检索。
- MyISAM和InnoDB存储引擎区别:
- MyISAM:
- 不支持事务。
- 表级锁,读写性能较差。
- 不支持外键。
- InnoDB:
- 支持事务,遵循ACID原则。
- 行级锁,读写性能较好。
- 支持外键。
- MyISAM:
7. 索引作用及不使用索引的情况
- 索引作用:
- 提高查询效率。
- 加速排序和分组操作。
- 实现唯一性约束。
- 不使用索引的情况:
- 查询条件中使用了函数或表达式。
- 查询条件中使用了
NOT、<>等操作符。 - 查询条件中使用了
OR,且没有覆盖索引。 - 查询条件中使用了
LIKE,且通配符在开头。
8. 事务ACID特性
- 原子性(Atomicity):事务中的所有操作要么全部成功,要么全部失败。
- 一致性(Consistency):事务执行前后,数据库状态保持一致。
- 隔离性(Isolation):并发事务之间相互隔离,互不干扰。
- 持久性(Durability):事务提交后,其结果永久有效,即使系统故障。
9. 事务日志工作原理
- 事务日志记录事务的开始、结束以及事务中的所有操作。
- 在事务提交时,事务日志先写入磁盘,然后才提交事务。
- 事务日志用于恢复数据库,确保事务的持久性和一致性。
10. MySQL日志类型及启动日志
- 日志类型:
- 错误日志:记录MySQL服务器的错误信息。
- 查询日志:记录所有SQL语句。
- 二进制日志:记录所有更改数据库的SQL语句。
- 慢查询日志:记录执行时间超过指定阈值的SQL语句。
- 启动日志:
- 在配置文件中设置日志相关参数,如
log_error、general_log、binlog_format等。
- 在配置文件中设置日志相关参数,如
11. 二进制日志格式使用场景
- STATEMENT:记录SQL语句,适用于简单场景,但可能不支持某些复杂操作。
- ROW:记录行的变更,适用于需要精确记录变更的场景。
- MIXED:结合STATEMENT和ROW的优点,根据情况自动选择记录方式。
12. MySQL备份类型及备份恢复验证
- 备份类型:
- 物理备份:备份数据文件,如使用
xtrabackup。 - 逻辑备份:备份SQL语句,如使用
mysqldump。
- 物理备份:备份数据文件,如使用
- 备份恢复验证:
- 使用
mysqldump备份:
恢复:mysqldump -u root -p --all-databases > backup.sqlmysql -u root -p < backup.sql - 使用
xtrabackup备份:
恢复:xtrabackup --backup --target-dir=/path/to/backupxtrabackup --copy-back --target-dir=/path/to/backup
- 使用
13. 编写crontab进行备份
- 每天备份所有MySQL数据:
0 2 * * * /usr/bin/mysqldump -u root -p'password' --all-databases > /backup/mysql/$(date +\%Y\%m\%d)/backup.sql - 基于xtrabackup的备份策略:
# 每周一和周五进行完全备份 0 2 * * 1,5 /usr/bin/xtrabackup --backup --target-dir=/backup/mysql/full/$(date +\%Y\%m\%d) # 周二到周四进行增量备份 0 2 * * 2-4 /usr/bin/xtrabackup --backup --target-dir=/backup/mysql/inc/$(date +\%Y\%m\%d) --incremental-basedir=/backup/mysql/full/$(date -d "last sunday" +\%Y\%m\%d)

浙公网安备 33010602011771号