如何解决线上数据库删了的问题

56次阅读
没有评论

共计 2289 个字符,预计需要花费 6 分钟才能阅读完成。

本篇内容主要讲解“如何解决线上数据库删了的问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让丸趣 TV 小编来带大家学习“如何解决线上数据库删了的问题”吧!

事件背景

MySQL 数据库每日零点自动全备

某天上午 9 点,二狗子不小心 drop 了一个数据库

我们需要通过全备的数据文件,以及增量的 binlog 文件进行数据恢复

主要思想与原理

利用全备的 sql 文件中记录的 CHANGE MASTER 语句,binlog 文件及其位置点信息,找出 binlog 文件增量的部分

用 mysqlbinlog 命令将上述的 binlog 文件导出为 sql 文件,并剔除其中的 drop 语句

通过全备文件和增量 binlog 文件的导出 sql 文件,就可以恢复到完整的数据

过程示意图

操作过程

模拟数据

CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` char(20) NOT NULL, `age` tinyint(2) NOT NULL DEFAULT  0 , PRIMARY KEY (`id`), KEY `index_name` (`name`) ) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 mysql  insert student values(1, zhangsan ,20); mysql  insert student values(2, lisi ,21); mysql  insert student values(3, wangwu ,22);

全备命令

# mysqldump -uroot -p -B -F -R -x --master-data=2 test|gzip  /server/backup/test_$(date +%F).sql.gz

参数说明:

-B 指定数据库

-F 刷新日志

-R 备份存储过程等

-x 锁表

–master-data 在备份语句里添加 CHANGE MASTER 语句以及 binlog 文件及位置点信息

继续插入数据并删库

mysql  insert student values(4, xiaoming ,20); mysql  insert student values(5, xiaohong ,20);

在插入数据的时候我们模拟误操作,删除 test 数据库。

mysql  drop database test;

此时,全备之后到误操作时刻之间,用户写入的数据在 binlog 中,需要恢复出来。

查看全备之后新增的 binlog 文件

# cd /server/backup/ # ls test_2020-08-19.sql.gz # gzip -d test_2020-08-19.sql.gz # grep CHANGE test_2020-08-19.sql -- CHANGE MASTER TO MASTER_LOG_FILE= mysql-bin.000003 , MASTER_LOG_POS=107;

这是全备时刻的 binlog 文件位置,即 mysql-bin.000003 的 107 行,因此在该文件之前的 binlog 文件中的数据都已经包含在这个全备的 sql 文件中了

移动 binlog 文件,并读取 sql,剔除其中的 drop 语句

# cp /data/3306/mysql-bin.000003 /server/backup/ # mysqlbinlog -d test mysql-bin.000003  mysql-bin.000003.sql

接下来,使用 vim 编辑 mysql-bin.000003.sql 文件,剔除 drop 语句

注意:在恢复全备数据之前必须将该 binlog 文件移出,否则恢复过程中,会继续写入语句到 binlog,最终导致增量恢复数据部分变得比较混乱

恢复数据

# mysql -uroot -p   test_2020-08-19.sql # mysql -uroot -p -e  select * from test.student;  +----+----------+-----+ | id | name | age | +----+----------+-----+ | 1 | zhangsan | 20 | | 2 | lisi | 21 | | 3 | wangwu | 22 | +----+----------+-----+

此时恢复了全备时刻的数据,然后使用 mysql-bin.000003.sql 文件恢复全备时刻到删除数据库之间,新增的数据。

# mysql -uroot -p test   mysql-bin.000003.sql # mysql -uroot -p -e  select * from test.student;  +----+----------+-----+ | id | name | age | +----+----------+-----+ | 1 | zhangsan | 20 | | 2 | lisi | 20 | | 3 | wangwu | 20 | | 4 | xiaoming | 20 | | 5 | xiaohong | 20 | +----+----------+-----+

此时,整个恢复过程结束,是不是很简单呢? 没错,就是这么简单!!

到此,相信大家对“如何解决线上数据库删了的问题”有了更深的了解,不妨来实际操作一番吧!这里是丸趣 TV 网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-27发表,共计2289字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)