备份类型
热备、温备(锁表备份)、冷备(业务关闭下备份)
备份工具
mysqldump
mysqldump -uroot -p123 -A >/back/full.sql (全备)
mysqldump -uroot -p123 -B test zabbix >/back/db.sql (库备份)
mysqldump -uroot -p123 city js tj >/back/tab.sql (表备份)
复制
常用备份参数
-R 备份存储过程和函数
-E 事件
--triggers 触发器
--master-data=2 记录备份时刻的binlog信息,记得加上single-transaction,innodb备份就不会锁表
--single-transaction 对于innodb的表进行一致性快照备份,不锁表,其他的还是会锁表。
扩展参数
--set-gtid-purged=AUTO/ON 构建主从时使用,默认即可
--max_allowed_packet=128M 控制备份时传输数据包的大小
恢复案例:
环境:mysql 5.7.26 ,数据量30G
备份策略:每天23点mysqldump全备
故障点:周三上午6点30数据库故障
思路:
1.停业务,挂维护,避免二次伤害
2.找临时库,恢复周二23点的全备
3.截取周二23点到故障点的binlog,恢复到临时库
4.直接顶替生产库,如果只是误删,只要从临时库导出数据到生产库即可(恢复时记得暂时关闭sql_log_bin)。
5.测试检验然后开启业务
物理备份(XBK)
innobackupex
非innodb,锁表备份,copy表文件。
innodb表,立即触发checkpoint,记录LSN,copy数据文件,并且将备份过程中新产生的数据的redo一起备份走,并记录LSN。在恢复时,调用innodb的CSR过程,将数据和redo的LSN追平,然后进行一致性恢复。
全备和恢复
innobackupex --user=root --password=123 --no-timestamp backup/full
innobackupex --apply-log back/full
复制
常用参数:
--slave-info 备份目录下会多生成一个xtrabackup_slave_info 文件, 这里会保存主日志文件以及偏移
--defaults-file 备份数据库的配置文件my.cnf的路径
2>$backupdir/backup.log 备份日志,将备份过程中的输出信息重定向到log
备份产生文件
xtrabackup_binlog_info 二进制信息,可作为截取起点
xtrabackup_checkpoints
from:备份中包含的LSN号起点,全备:0,增量:上次备份的结束位置
to:ckpt时的LSN
last:备份结束时的LSN,下次增量备份的起点(LSN-9)
增备和恢复
初增必须在全备基础上,备份目录要为空
innnobackupex --user=root --password=123 --no-timestamp --incremental --incremental-basedir=/backup/full backup/incr1
二增
innnobackupex --user=root --password=123 --no-timestamp --incremental --incremental-basedir=/backup/incr1 /backup/incr2
复制
恢复案例:
环境:mysql 5.7.26 ,数据量30G
备份策略:周日23点XBK全备,其他每天增备
故障点:周三上午6点30数据库故障
思路:
1.停业务,挂维护,避免二次伤害
2.找临时库,查找可用备份full+incr1+incr2
3.binlog,incr2到故障点的binlog,恢复
4.直接顶替生产库,如果只是误删,只要从临时库导出数据到生产库即可(恢复时记得暂时关闭sql_log_bin)。
5.测试检验然后开启业务
主要操作:
整理full,合并inc1到full,合并inc2到full,最后整理
#--redo-only 整理全备和所有增量合并时(除了最后一次增量)用
innobackupex --apply-log --redo-only /backup/full
innobackupex --apply-log --redo-only --incremental-dir=/backup/incr1 /backup/full
innobackupex --apply-log --incremental-dir=/backup/incr2 /backup/full
innobackupex --apply-log /backup/full
截取binlog
起点:cat incr2/xtrabackup_binlog_info
mysql-bin.000879 431 cd8d6766-6de6-11e8-80ca-fa163e468042:1-24,
fc66187a-5e96-11e8-9023-fa163e3143f8:1-2
终点:mysqlbinlog --skip-gtids --include-gtids='cd8d6766-6de6-11e8-80ca-fa163e468042:25-100' mysql-bin.000879 >/backup/binlog.sql
复制
题外话:数据库的备份非常重要,身为DBA的话,每天的第一件事其实应该是检查备份可用性(看备份日志,检查备份文件),同时要记得定期的恢复演练。最近想搞搞短视频了,毕竟B站元老级用户,一直不下海着实说不过去,现在想想,读大学的时候怎么什么都想不到呢?真的是人生呐。。。