数据损坏类型
物理损坏:磁盘、文件损坏。比如磁盘被格式化、数据库文件损坏。
逻辑损坏:错误sql导致脏数据、错误数据,比如错误的drop、truncate、delete、insert、update。
DBA在备份、恢复的职责
- 设计备份、容灾策略
备份策略:备份工具的选择,备份周期设计,备份监控方法
容灾策略:用什么备份;设计架构,如高可用、演示从库、灾备库等 - 定期的备份、容灾检查
人工检查备份、容灾工作是否正常,备份空间是否足够 - 定期的故障恢复演练
- 数据损坏时快速准确恢复
- 数据迁移工作
备份类型
热备:在数据库正常业务时,备份数据,并且能够一致性恢复(只能是innodb),对业务影响非常小
温备:锁表备份,只能查询不能修改(myisam),影响到写入操作
冷备:关闭数据库业务,数据库没有任何变更的情况下,进行备份数据,业务停止
备份工具
逻辑备份备份的是sql语句,物理备份备份的是数据库文件
1. 逻辑备份方式
mysqldump(mdp)
replication
mydumper
load date in file
2. 物理备份方式
mysql enterprise backup
percona xtrabackup(pbk)
mysqldump使用
介绍:逻辑备份工具,备份的是sql语句
备份的内部逻辑过程:
- innodb表:采取快照备份的方式,开启一个独立的事务,获取当前最新的一致性快照,将快照数据放到临时表中,转换成sql(create database,create table,insert),保存到sql文件中
- 非innodb表:需要锁表备份,触发FTWRL,全局锁表,转换成sql(create database,create table,insert),保存到sql文件中
mysqldump的使用:
全备(全部数据库备份):# mysqldump -uroot -p123 -A >/data/backup/full.sql
备份一个或多个库:# mysqldump -uroot -p123 -B db1 db2 >/data/backup/db.sql
备份一个库中的一个或多个表:# mysqldump -uroot -p123 db1 table1 table2 >/data/backup/table.sql
以下两条备份命令的区别:
mysqldump -uroot -p123 -B db1 >/data/backup/db.sql
mysqldump -uroot -p123 db1 >/data/backup/db.sql
前者备份数据库+数据库内的表,会包含建库语句和use db1语句;后者只备份表,没有建库语句,在执行前需要手动建库,并手动use db1,再执行sql恢复数据。
其他的备份高级参数:
-F
在备份开始时,刷新一个新binlog日志
--master-data=2
(1)在备份时,会自动记录,二进制日志文件名和位置号
0 默认值
1 以change master to命令形式,可以用作主从复制
2 以注释的形式记录,备份时刻的文件名+postion号
(2) 自动锁表
(3)如果配合--single-transaction,只对非InnoDB表进行锁表备份,InnoDB表进行“热“”备,实际上是实现快照备份。
--single-transaction
innodb 存储引擎开启热备(快照备份)功能
master-data可以自动加锁
(1)在不加--single-transaction ,启动所有表的温备份,所有表都锁定
(1)加上--single-transaction ,对innodb进行快照备份,对非innodb表可以实现自动锁表功能
-R -E --triggers
-R 备份存储过程及函数
--triggers 备份触发器
-E 备份事件
--max_allowed_packet=64M
小数据量的系统的数据库恢复思路:
- 系统挂上维护页面,让用户明确系统正在升级维修
- 找测试库
- 恢复最近的一个全备
- 截取全备到故障前这段时间的binlog,并恢复
- 测试业务功能是否正常
- 恢复业务(把测试库导回到生产or直接用测试库先充当着生产库)
总结:mysqldump mysql自带,可读性高,压缩比高,但是备份时间(尤其恢复时间)比较长。mysqldump适合数据量小的时候备份(100G内),大了就不合适了。分布式备份也可选择mysqldump。
Percona Xtrabackup(xbk)使用
介绍:物理备份工具,拷贝数据文件。速度快。支持全备和增量备份。
备份内部过程(这个可以查看xbk官网介绍):
innodb表:支持热备。先checkpoint,将已提交的数据页刷新到磁盘,记录一个LSN;拷贝innodb表文件(ibdata1 frm ibd等);备份期间产生的数据变化的redo也会备份。
非innodb表:温备(锁表)。FTWRL,触发全局锁表;拷贝表的数据;解锁。
全部备份以后,再次统计LSN,写入到专用文件;记录二进制日志位置。最终将所有备份文件统一存放到一个目录下。
xbk暂时用不到,先了解到这里了,后续需要再安装实操一下吧。