MySQL备份恢复
第1章 数据库备份恢复职责
1.1 备份策略
1 | 全备、增量、时间、自动 |
1.2 日常备份检查
1 | 备份存在性 |
1.3 定期恢复演练(测试库)
1 | 一季度 或者 半年 |
1.4 故障恢复
1 | 通过现有备份,能够将数据库恢复到故障之前的时间点 |
1.5 迁移
1 | 1. 停机时间 |
第2章 备份类型
2.1 热备
1 | 在数据库正常业务时,备份数据,并且能够一致性恢复(只能是innodb) |
2.2 温备
1 | 锁表备份,只能查询不能修改(myisam) |
2.3 冷备
1 | 关闭数据库业务,数据库没有任何变更的情况下,进行备份数据. |
第3章 备份方式及工具介绍
3.1 逻辑备份工具
1 | 基于SQL语句进行备份 |
3.2 物理备份工具
1 | 基于磁盘数据文件备份 |
第4章 逻辑备份和物理备份的比较
4.1 mysqldump (MDP)
1 | 优点: |
4.2 xtrabackup(XBK)
1 | 优点: |
第5章 备份策略
1 | 备份方式: |
第6章 备份工具使用-mysqldump
6.1 mysqldump (逻辑备份的客户端工具)
6.1.1 客户端通用参数
1 | -u -p -S -h -P |
6.1.2 备份专用基本参数
-A 全备参数
1 | 例子1: |
-B db1 db2 db3 备份多个单库
1 | 说明:生产中需要备份,生产相关的库和MySQL库 |
备份单个或多个表
1 | 例子3 world数据库下的city,country表 |
6.1.3 高级参数应用
特殊参数1使用(必须要加)
1 | -R 备份存储过程及函数 |
-F 在备份开始时,刷新一个新binlog日志
1 | 例子5: |
–master-data=2
1 | 以注释的形式,保存备份开始时间点的binlog的状态信息 |
–single-transaction
1 | innodb 存储引擎开启热备(快照备份)功能 |
–set-gtid-purged=auto
1 | auto , on |
–max-allowed-packet=#
1 | mysqldump -uroot -p -A -R -E --triggers --master-data=2 --single-transaction --set-gtid-purged=OFF --max-allowed-packet=256M >/data/backup/full.sql |
6.2 练习
6.2.1 实现所有表的单独备份
1 | 提示: |
6.2.2.模拟故障案例并恢复
1 | (1)每天全备 |
6.3 压缩备份并添加时间戳
1 | 例子: |
第7章 企业故障恢复案例
7.1 背景环境
1 | 正在运行的网站系统,mysql-5.7.20 数据库,数据量50G,日业务增量1-5M |
7.2 备份策略
1 | 每天23:00点,计划任务调用mysqldump执行全备脚本 |
7.3 故障时间点
1 | 年底故障演练:模拟周三上午10点误删除数据库,并进行恢复 |
7.4 思路
1 | 1、停业务,避免数据的二次伤害 |
7.5 故障模拟演练
7.5.1 准备数据
1 | create database backup; |
7.5.2 周二 23:00全备
1 | mysqldump -uroot -p123 -A -R -E --master-data=2 --single-transaction --triggers --max_allowed_packet=128M|gzip > /backup/full_$(date +%F).sql.gz |
7.5.3 模拟周二23:00到周三10:00之间数据变化
1 | use backup |
7.5.4 模拟故障,删除库(只是模拟,不代表生产操作)
1 | drop database backup; |
7.6 恢复过程
7.6.1 准备临时数据库(多实例3307)
1 | systemctl start mysqld3307 |
7.6.2 准备备份
1 | (1)准备全备: |
7.6.3 恢复备份到临时库
1 | mysql -S /data/3307/mysql.sock |
第8章 备份时优化参数
1 | (1) max_allowed_packet 最大的数据包大小 |
第9章 MySQL物理备份工具-xtrabackup(XBK、Xbackup)
9.1 安装
9.1.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 |
9.1.2 下载软件并安装
1 | #centos7 |
9.2 备份命令介绍
1 | xtrabackup |
9.3 备份方式——物理备份
1 | (1)对于非Innodb表(比如 myisam)是,锁表cp数据文件,属于一种温备份。 |
面试题: xbk 在innodb表备份恢复的流程
1 | (1)xbk备份执行的瞬间,立即触发ckpt,已提交的数据脏页,从内存刷写到磁盘,并记录此时的LSN号 |
9.4 innobackupex使用
9.4.1 全备
1 | [root@db01 backup]# innobackupex --user=root --password=123 /data/backup |
9.4.2 自主定制备份路径名
1 | [root@db01 backup]# innobackupex --user=root --password=123 --no-timestamp /backup/full |
备份集中多出来的文件
1 | -rw-r----- 1 root root 24 Jun 29 09:59 xtrabackup_binlog_info |
9.4.3 全备的恢复
准备备份(Prepared)
1 | 将redo进行重做,已提交的写到数据文件,未提交的使用undo回滚掉。模拟了CSR的过程 |
恢复备份
1 | 前提: |
创建新目录
1 | [root@db01 backup]# mkdir /data/mysql1 |
数据授权
1 | chown -R mysql.mysql /data/mysql1 |
恢复备份
1 | [root@db01 full]# cp -a /backup/full/* /data/mysql1/ |
启动数据库
1 | vim /etc/my.cnf |
9.4.5 innobackupex 增量备份(incremental)
1 | (1)增量备份的方式,是基于上一次备份进行增量。 |
增量备份命令
1 | (1)删掉原来备份 |
恢复到周三误drop之前的数据状态
1 | 恢复思路: |
恢复过程
1 | 1. 检查备份 |
从mysqldump 全备中获取库和表的备份
1 | 1、获得表结构 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 WF's Blog!
评论