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!
 评论






