一、备份恢复与迁移
1、DBA在数据库备份恢复方面的职责
设计备份策略:
全备:数据量小的话,天天全备;
增量:数据量大,几TB,周日夜里全备,
每天做上一天的增备
每天做基于全备的增备;
时间:半夜;
自动:定时任务;
日常备份检查:
备份存在性;
备份空间是否够用。
定期恢复演练(测试备份是否正确):
一季度,或者半年。
故障恢复:
通过现有备份,能够将数据库恢复到故障之前的时间点;
迁移:
停机时间;
回退方案。
2、备份类型
热备:只有innodb支持热备,在数据库正常业务时,备份数据,并且能够一致性恢复,业务不停止;
冷备:关闭数据库业务,数据库没有任何变更情况下,进行备份数据,业务停止;
逻辑备份工具:
基于SQL语句进行备份
mysqldump
mysqlbinlog
物理备份功能:
Xtrabackup(XBK):percona第三方 免费
MySQL Enterprise Backup(MEB):官方企业版备份工具,收费
(1)mysqldump:
优点:
不需要安装;
备份出来的是SQL,文本格式,可读性高,便于备份处理;
压缩比较高,节省备份的磁盘空间;
缺点:
依赖于数据库引擎,需要从磁盘把数据读出,然后转换成SQL进行转储,比较耗费资源,数据量大的话效率较低。
建议:100G内的数据量级,可以使用mysqldump;
超过TB以上,我们也可能选择的是mysqldump,配合分布式的系统;
1EB=1024PB=1000000TB
(2)Xtrabackup:
优点:
类似于直接cp数据文件,不需要管理逻辑结构,相对来说性能较高;
缺点:
可读性差;
压缩比较低,需要更多的磁盘空间;
建议:100G-1TB
(3)备份策略:
备份方式:
全备:
增量:
逻辑备份:mysqldump+mysqlbinlog
物理备份:xtrabackup_full+xtrabackup_incr+binlog 或者xtrabackup_full+binlog
其他备份:主从复制备份
①逻辑备份工具-mysqldump
客户端通用命令:和连接有关
-u
-p
-S
-h
-P
本地备份:
mysqldump -uroot -p密码 -S /tmp/mysql.sql
远程备份:
mysqldump -uroot -p密码 -h -P端口
②基本备份参数:
-A:实现全库备份,
-B:实现多个库的备份;
全备:
mysqldump -uroot -p -A -S /tmp/mysql.sock >/backup/full.sql
备份单个库或多个库:备份school和stu库
mysqldump -uroot -p -B school stu -S /tmp/mysql.sock >/backup/db.sql
备份某个库下的1张或多张表:
备份school库下的student表和teacher表
mysqldump -uroot -p school student teacher -S /tmp/mysql.sock >/backup/tab.sql
school下的表都备份:只备份表
mysqldump -uroot -p school -S /tmp/mysql.sock >/backup/tab.sql
注意:此种方法,只会备份建表语句和insert语句;索引恢复前需要把库建行,并use进去。
③必加参数(1):
-R:在备份时,同时备份存储过程和函数,如果没有会自动忽略;
-E:在备份时,同时备份event,如果没有会自动忽略;
--triggers:在备份时,同时备份触发器,如果没有会自动忽略;
④必加参数(2):
--master-data=2:
记录备份开始时position号,可以作为将来做日志截取的起点
可以实现自动锁表;
--master-data=0:默认没开启 1:把备份点写入到二进制文件里 2:备份点以注释的形式写入到二进制文件里;
配合--single-transaction,减少锁的(innodb引擎)。
--single-transaction
对于innodb的表,实现快照备份,不需要锁表。
⑤其他参数(不是必加参数):
-F:一个库给刷一个mysql-bin.00000二进制日志;
--set-gtid-purged=auto:在备份文件中,
auto,on,off
使用场景:
--set-gtid-purged=OFF,可以使用在日常备份参数中
mysqldump -uroot -p -A -R -E --triggers --master-data=2 --single-transaction --set-gtid-purged=OFF >/backup/full.sql;
--set-gtid-purged=ON或AUTO在构建主从复制时需要的参数配置
mysqldump -uroot -p -A -R -E --triggers --master-data=2 --single-transaction --set-gtid-purged=ON >/backup/full.sql;
--max-allowed-packet=:数据包的最大大小;
带时间戳备份:
mysqldump -uroot -p -A -R --triggers --master-data=2 max_allowed_packet=128M --single-transaction|gzip >/backup/full_$(date+%F).sql.gz;




