第十周

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上使用yumapt
    • 从源码编译安装:适合需要特定配置的场景。
    • 使用二进制包安装:适合快速部署。
    • 使用Docker安装:适合容器化环境。
  • 安全加固
    • 使用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原则。
      • 行级锁,读写性能较好。
      • 支持外键。

7. 索引作用及不使用索引的情况

  • 索引作用
    • 提高查询效率。
    • 加速排序和分组操作。
    • 实现唯一性约束。
  • 不使用索引的情况
    • 查询条件中使用了函数或表达式。
    • 查询条件中使用了NOT<>等操作符。
    • 查询条件中使用了OR,且没有覆盖索引。
    • 查询条件中使用了LIKE,且通配符在开头。

8. 事务ACID特性

  • 原子性(Atomicity):事务中的所有操作要么全部成功,要么全部失败。
  • 一致性(Consistency):事务执行前后,数据库状态保持一致。
  • 隔离性(Isolation):并发事务之间相互隔离,互不干扰。
  • 持久性(Durability):事务提交后,其结果永久有效,即使系统故障。

9. 事务日志工作原理

  • 事务日志记录事务的开始、结束以及事务中的所有操作。
  • 在事务提交时,事务日志先写入磁盘,然后才提交事务。
  • 事务日志用于恢复数据库,确保事务的持久性和一致性。

10. MySQL日志类型及启动日志

  • 日志类型
    • 错误日志:记录MySQL服务器的错误信息。
    • 查询日志:记录所有SQL语句。
    • 二进制日志:记录所有更改数据库的SQL语句。
    • 慢查询日志:记录执行时间超过指定阈值的SQL语句。
  • 启动日志
    • 在配置文件中设置日志相关参数,如log_errorgeneral_logbinlog_format等。

11. 二进制日志格式使用场景

  • STATEMENT:记录SQL语句,适用于简单场景,但可能不支持某些复杂操作。
  • ROW:记录行的变更,适用于需要精确记录变更的场景。
  • MIXED:结合STATEMENT和ROW的优点,根据情况自动选择记录方式。

12. MySQL备份类型及备份恢复验证

  • 备份类型
    • 物理备份:备份数据文件,如使用xtrabackup
    • 逻辑备份:备份SQL语句,如使用mysqldump
  • 备份恢复验证
    • 使用mysqldump备份:
      mysqldump -u root -p --all-databases > backup.sql
      
      恢复:
      mysql -u root -p < backup.sql
      
    • 使用xtrabackup备份:
      xtrabackup --backup --target-dir=/path/to/backup
      
      恢复:
      xtrabackup --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)
    
posted @ 2025-04-27 18:31  你好,运维人  阅读(10)  评论(0)    收藏  举报