MySQL备份笔记
备份的分类维度
- 备份时数据库的状态
- Hot Backup(热备):正常运行中直接备份
- Cold Backup(冷备):完全停止后备份
- Warm Backup(温备):数据库只读
- 备份文件的格式
- 逻辑备份:输出文本或SQL语句
- 物理备份(裸文件):备份数据库底层文件,如对于InnoDB来说,一般就是.idb文件以及其他元数据的文件
- 备份的内容
- 完全备份:备份完整数据
- 增量备份:备份数据差异
- 日志备份:备份Binlog(Binlog代表这一段时间内所有的数据差异,即数据变化的操作)
工具举例
- mysqldump:逻辑、热、全量备份
- xtrabackup:物理、热、全量+增量备份
使用OUTFILE命令进行备份
OUTFILE
- MySQL原生的SQL指令
- 最原始的逻辑备份方式
- 备份的功能和效果取决于如何写SQL语句
使用方式
-
首先查出MySQL的导出路径 show variables like '%secure%';
-
使用into outfile指令将查询结果导出至文件 select * into outfile '/var/lib/mysql-files/out_file_test' from table_xxx;
注意事项
- 在InnoDB事务下,可以做到一致性视图,即在可重复读的隔离级别下,开启事务后,因为MVCC的存在,此时所导的每一张表都处于同一时刻
- 修改分隔符:fields terminated by
- 修改换行符:lines terminated by
缺陷
- 输出的文本比较简略
- 很难进行还原,现在往往用来简单导出数据
OUTFILE如何改进?
- 自动发SELECT语句,不需要手动发送
- 自动开始事务
- 输出INSERT语句,可以直接用于还原
mysqldump
- 非常常用的MySQL逻辑备份工具
- MySQL Server自带
- 输出的备份内容为sql语句,平衡了阅读和还原
- sql语句占空间较小
原理
使用方法
注意事项
- –single-transaction:在RR级别下进行(InnoDB)
- –lock-all-tables:使用FTWRL锁所有表(MyISAM)
- –lock-tables:使用READ LOCAL锁当前库的表(MyISAM)
- –all-databases:备份所有数据库
缺点
- 导出逻辑数据,备份较慢
- 还原需要执行sql,速度也较慢
增量备份
mysqldump是不能做增量备份的,因为它是向库中每一个表发送select * 语句,那么要怎么实现增量备份呢?
思路:
- binlog忠实记录了MySQL数据的变化
- mysqldump全量备份之后,可以用binlog作为增量
- mysqldump全量备份时,切换新的binlog文件
- 从零还原时,采用全量还原+binlog还原
步骤
一、mysqldump全量备份
-
mysqldump使用以下语句对数据进行全量备份: mysqldump -uroot -p111111 --database d1 --single-transaction --flush-logs --master-data=2 > xxx.sql
-
–flush-logs:备份后切换binlog文件 -
–master-data=2:记录切换后的binlog文件名
二、binlog增量备份
三、还原
XtraBackup物理备份
为什么需要物理备份
- 直接备份InnoDB底层数据文件
- 导出不需要转换,速度快
- 工作时对数据库的压力较小
- 更容易实现增量备份
直接拷贝裸文件可行吗?
- 理论上可行,但有很多问题:
- 要同时备份frm文件、ibd文件、binlog文件、redo log文件等
- 在不同版本的数据库和操作系统上还原可能有兼容问题
- 必须冷备份,影响业务
实现物理 + 热 + 全量备份
- 思路:利用redo log,备份ibd文件 + 备份期间的redo log
- 1、启动redo log监听线程,开始收集redo log
- 2、拷贝ibd数据文件
- 3、停止收集redo log
- 4、加FTWRL锁拷贝元数据frm
实现物理 + 热 + 增量备份
- 思路:与全量级别相同
- 如何确定增量:根据每个页的LSN号,确定变化的页
实现物理还原
- 思路:mysqld crash崩溃恢复流程相似
- 还原ibd文件,重放redo log
ibbackup
- 现名MySQL Enterprise Backup,InnoDB官方出品
- 实现了上述的功能,性能优秀
XtraBackup
- Percona公司开发的开源版本,实现ibbackup所有功能
- XtraBackup 8.0 -> MySQL 8.0
- XtraBackup 2.4 -> MySQL 5.1,5.5,5.6,5.7
XtraBackup全量使用方法
XtraBackup增量使用方法
如何防患于未然
权限隔离
- 给业务应用分配的账号只给DML权限
- 开发同学使用只读账号
- DBA平时使用时使用只读账号,特殊操作时切换账号
SQL审计
- DBA在开发环境审计即将上线的SQL语句
- 开发同学修改在线数据库,提交给DBA执行
- Inception自动审核工具
伪删表
- 删表之前将表改名,观察业务是否受影响
- 不直接删表,给表名加特殊后缀,用脚本删除
完备流程
|