MySQL 学习(9)—— 备份恢复 | 8月更文挑战

243 阅读3分钟

这是我参与8月更文挑战的第9天,活动详情查看:8月更文挑战

1. 介绍

1.1 备份策略的设计

  • 备份周期:根据数据量
  • 备份工具:
    • mysqldump
    • mysqlbinlog
    • MEB(MySQL Enterprise BACKUP)
  • 备份方式:
    • 逻辑备份:

      • 全量:mysqldump
      • 增量:binlog(flush logs, cp)
    • 物理备份

      • 全量:percona Xtrabackup
      • 增量:percona Xtrabackup

1.2 检查备份可用性

  • crontab -l:查看备份脚本
  • 找到备份路径
  • 查看备份日志,检查备份文件大小、内容

1.3 定期的恢复演练

1.4 数据恢复

1.5 数据迁移

  • mysql -> mysql
  • 其它 -> mysql
  • mysql -> 其它

2. 备份的介绍

2.1 备份类型

  • 热备:对于业务影响最小,目前只有 InnoDB 支持
  • 温备:长时间锁表备份,MyISAM
  • 冷备:业务关闭情况下备份

3. mysqldump

3.1 连接数据库

-u
-p
-s
-h
P

3.2 基础备份参数

  • 全备:-A

    • mysqldump -uroot -A > /tmp/all.sql
  • 备份多个单库:-B

    • mysqldump -uroot -B account goods > /tmp/db.sql
  • 单个表备份:库 表 表 ... 第一个是库,后面都是表

    • mysqldump -uroot account student > /tmp/student.sql

3.3 特殊备份参数

  • -R:备份存储过程和函数

  • -E:备份时间

  • triggers:备份触发器

  • --master-data=2

    • 在备份时,会自动记录,二进制日志文件名和位置号

      • 0:默认值
      • 1:以 change master to 命令形式,可以用作主从复制
      • 2:以注释的形式记录,备份时刻的文件名 + position 号
    • 自动锁表

    • 如果配合 --single-transaction,对于 InnoDB 表,可以实现不缩表备份(快照备份)

    • 不加 --single-transaction,是温备份

  • single-transaction

    • InnoDB 存储引擎开启热备(快照备份)功能
      • 不加 --single-transaction 参数,启动所有表的温备份,所有表都锁定
      • 加上 --single-transaction 参数,对于 InnoDB 进行快照备份,对于非 InnoDB 表可以实现自动锁表功能。

4. 扩展参数

  • --set-gtid-purged=AUTO/ON

    • 在构建主从时,使用 AUTO/ON
    • 仅是做普通的本机备份恢复时,可以添加 --set-gtid-purged=OFF
  • --max_allowed_packet=128M

    • 控制的是备份时传输的数据包的大小

5. 物理备份 —— xtrabackup

5.1 安装

5.1.1 安装依赖包

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL libev

5.1.2 下载软件并安装

wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.12/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.12-1.el7.x86_64.rpm

wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.4/binary/redhat/6/x86_64/percona-xtrabackup-24-2.4.4-1.el6.x86_64.rpm

yum -y install percona-xtrabackup-24-2.4.4-1.el7.x86_64.rpm

5.2 备份命令介绍

  • innobackupex

5.3 innobackupex 使用

5.3.1 备份核心理念

  1. 针对非 InnoDB,进行锁表备份,copy 所有的非 InnoDB 表文件
  2. 针对 InnoDB 表,立即出发 CKPT,copy 所有 InnoDB 表相关的文件(ibdata1、ibd、frm)。并且将备份过程中产生的、新的数据变化的部分 redo 一起备份走
  3. 在恢复时,xbk 会调用 InnoDB 引擎的 CSR 过程,将数据和 redo 的 LSN 追平,然后进行一致性恢复。

5.3.2 XBK 全备和恢复

  1. innobackupex --user=root --no-timestamp /tmp/full

  2. innobackupex --apply-log /tmp/full

5.4 备份产生的文件介绍

  1. xtrabackup_binlog_info

    1. 文件名
    2. 备份时的 position 号
    3. gtid 号
  2. xtrabackup_checkpoints

    1. from:备份中包含的 LSN 号的起点,全备是 0;增量是上次备份的结束位置
    2. to:ckpt 时的 LSN
    3. last-9:备份结束时的 LSN,下次增量备份的起始位置