vlambda博客
学习文章列表

【雷火UX平台开发】MySQL误操作数据恢复



SQL分类

1.DDL(Data Definition Language)数据库定义语言
(1) CREATE
(2) ALTER
(3) DROP
(4) TRUNCATE
(5) COMMENT
(6) RENAME

2. DML(Data Manipulation Language)数据操纵语言
(1) SELECT
(2) INSERT
(3) UPDATE
(4) DELETE
(5) MERGE
(6) CALL
(7) EXPLAIN PLAN
(8) LOCK TABLE

3. DCL(Data Control Language)数据库控制语言
(1) GRANT
(2) REVOKE

4. TCL(Transaction Control Language)事务控制语言
(1) SAVEPOINT

(2) ROLLBACK  

a) 只能在一个事务处理内使用(执行一条 START TRANSACTION 命令之后)

b) 只对DML生效(只能回退insert、update、delete、不能回退create、drop、select)

(3) SET TRANSACTION

【雷火UX平台开发】MySQL误操作数据恢复



备份与恢复类型

1. 物理(原始)与逻辑备份
2. 在线与离线备份
3. 本地与远程备份
4. 快照备份
5. 完整备份与增量备份
6. 完全与时间点(增量)恢复
7. 表维护
8. 备份调度、压缩和加密
【雷火UX平台开发】MySQL误操作数据恢复




常用备份的方法

1. 使用MySQL Enterprise Backup进行备份
(1) 支持:热备份,增量备份,选择备份,直接备份到云,加密,压缩备份等;
(2) 针对Innodb引擎进行优化的,但可以备份和恢复所有MySQL能支持的引擎;
(3) 以block级别进行并行备份,性能大大优于逻辑备份工具。
2. 使用Mysqldump进行备份
(1) MySQL自带的、社区开源的逻辑备份工具;
(2) 工作方式:从数据库中将SQL语句导出写入到一个文本文件中。
3. 复制表进行备份
(1) 由于InnoDB可能存在未刷新到磁盘的缓存数据,所以不适用于InnoDB表。
4. 备份包含数据的分割文本文件
5. 启用二进制日志进行增量备份
(1) 二进制日志记录仅记录发生数据库更改或可能发生更改的语句对应的事件(如不匹配任何行的delete操作);仅记录完成的事件或事务,若事务未提交则仅在InnoDB中缓存,直到服务器收到commit语句;
(2) Mysql 8.0之前默认禁用,之后默认启用,可以通过设置--log-bin参数为ON开启;
(3) 由于二进制格式和SQL不兼容的问题,会导致不同版本间的复制存在困难。Mysql 8.0是一个重要的分水岭;
(4) 当备份大型二进制日志文件到本地MYSQL服务器时,需要注意文件系统是否有足够的空间用于生成文件;
(5) 重要参数:
1)--log-bin:二进制日志开启/禁用
2)--sync_binlog: 在每个N提交组之后将二进制日志同步到磁盘
3)--binlog_encryption:设置是否加密二进制日志文件
4) -- binlog_transaction_compression:设置是否压缩二进制日志文件
5) --binlog-format:设置二进制文件的格式,默认为row
6) -- binlog_row_image:记录binlong如何记录修改前还是修改后日志。
6. 启用副本进行备份

7. 恢复损坏的表

(1) 如,使用REPAIR TABLE或myisamchk -rMyISAM恢复的损坏表
8.在Veritas、LVM 或 ZFS文件系统使用文件系统快照进行备份
【雷火UX平台开发】MySQL误操作数据恢复



闪回恢复

1. 闪回技术:
传统恢复利用备份和去除错误SQL的binlog恢复方式资源消耗大,操作复杂;快照备份能缩短恢复时间但对mysql性能影响较大,无法实现快速回滚。随后,闪回技术被提出。闪回技术核心思想是将数据库回退到过去的某个时间点,实现了不使用备份、快速恢复数据的目标。

2. 常见闪回工具

(1) Mysqlbinlog

(常用于二进制文件的备份,但由于支持二进制文件的解析,所以可以在一定程度上支持闪回操作。)
a) 缺点:

i) 功能受sql版本影响:MySQL 8.0以前版本无法正确识别加密或压缩的二进制日志文件。二进制日志文件;MySQL 8.0以后版本使用--read-from-remote-server可以读取加密二进文件,可以自动解压缩;

ii) 若二进制日志中包含\0(null)字符,在无法解析;

iii) 如果连接丢失(服务器重新启动/网络中断),mysql不会重新连接;

iv) 相较于其他闪回工具,效率较差,通用性较差。

b) 优点:

i) 官方自带,无须额外安装;

ii) 支持离线解析,也支持在线解析。

c) 重要命令/函数:

i) SHOW BINARY LOGS/ SHOW MASTER LOGS:查二进制日志是否加密(或查看文件头是否携带0xFD62696E进行区分);

ii) REPLICATION CLIENT:授允许使用查看二进制日志是否加密;

iii) read_binlog_magic:通过读取二进制表头记录的Magic num值,判断二进制文件是否加密:Magic num= 0xFE62696E代表文件未加密;Magic num= 0xFE62696E代表文件加密。


(2) binlog2sql

a) 缺点:

i) 需要Python环境,通过生成回滚/前滚SQL实现数据的恢复。

ii) 借助二进制文件展开相关工作,需要启用二进制文件。若未启用二进制文件,则无法使用。
b) 优点:

i) 支持二进制日志文件的解析,但是由于允许过滤对象,相对于Mysqlbinlog,解析得到的SQL比较“干净”;

ii) 支持DML和DDL。


(3) MyFlash

a) 缺点:

i) 需要动态编译成二进制脚本以后执行;

ii) 通过生成反向二进制文件实现数据的恢复,即生成的回滚数据仍然是二进制格式的需要借助二进制解释程序进行解析;

iii) 借助二进制文件展开相关工作,需要启用二进制文件。若未启用二进制文件,则无法使用。

b) 优点:

i) 通过rename的方式备份数据表的方式,实现了DDL的回滚;

ii) 支持离线解析。


(4) my2sql

a) 缺点:

i) 借助二进制文件展开相关工作,需要启用二进制文件,且指定该二进制文件格式为row, binlog_row_image=full;

ii) 只能回滚DML,不能回滚DDL;

iii) 不支持离线解析。

b) 优点:

i) 可以直接下载linux二进制版本执行,无特殊环境要求;

ii) 生成标准SQL

iii) 支持闪回、前滚、事务分析功能。

【雷火UX平台开发】MySQL误操作数据恢复

参考资料

[1] SQL四种语言:DDL,DML,DCL,TCL https://www.cnblogs.com/henryhappier/archive/2010/07/05/1771295.html

[2] MySQL误操作闪回恢复利器之my2sql https://cloud.tencent.com/developer/article/1806352

[3]备份与恢复https://dev.mysql.com/doc/refman/8.0/en/backup-and-recovery.html



往期推荐


关注“网易雷火UX用户体验中心”学习更多干货!