码迷,mamicode.com
首页 > 数据库 > 详细

在另一台服务器上还原被误删的 MySQL 数据

时间:2018-11-12 12:08:12      阅读:197      评论:0      收藏:0      [点我收藏+]

标签:single   文件拷贝   服务   binlog   --   table   int   时间   databases   

数据库备份语句

mysqldump -S /tmp/mysql3309.sock -u root -pMySQL8.0 --single-transaction --quick --flush-logs --triggers --routines --events --set-gtid-purged=OFF --databases testdb > testdb.dump

备份时表 nw 存在以下数据

mysql> select * from nw;
+---------------------+
| dt                  |
+---------------------+
| 2018-11-12 10:20:26 |
| 2018-11-12 10:20:27 |
| 2018-11-12 10:20:28 |
| 2018-11-12 10:20:28 |
| 2018-11-12 10:20:29 |
| 2018-11-12 10:30:53 |
| 2018-11-12 10:30:54 |
| 2018-11-12 10:30:55 |
| 2018-11-12 10:30:55 |
| 2018-11-12 10:30:56 |
| 2018-11-12 10:30:57 |
| 2018-11-12 10:30:57 |
+---------------------+

将最近的备份和备份后的二进制文件拷贝另一台有 MySQL 实例的服务器B

将二进制文件提取为明文文件,查询数据删除的时间点

mysqlbinlog --base64-output=decode-rows -v binlog.000006 > result.sql
#181112 10:34:23 server id 3309  end_log_pos 2846       Delete_rows: table id 694 flags: STMT_END_F
### DELETE FROM `testdb`.`nw`
### WHERE
###   @1=1541989226
### DELETE FROM `testdb`.`nw`

在服务器B上还原数据库

mysql -S /tmp/mysql3309.sock -u root -pMySQL8.0 < testdb.dump

将删除数据前的二进制日志重新应用到数据库

mysqlbinlog --stop-datetime="2018-11-12 10:34:00" --skip-gtids binlog.000006 | mysql -S /tmp/mysql3309.sock -u root -pMySQL8.0

将表 nw dump 出来

mysqldump -S /tmp/mysql3309.sock -u root -pMySQL8.0 --single-transaction --quick --flush-logs --triggers --routines --events --set-gtid-purged=OFF testdb nw > nw.dump

提取 nw.dump 中的 insert 语句

grep "INSERT INTO \`nw\` VALUES" nw.dump > insert.sql

将 insert 语句在原数据库执行,查询结果数据已经恢复

mysql> use sbtest;
mysql> source insert.sql
mysql> select * from nw;
+---------------------+
| dt                  |
+---------------------+
| 2018-11-12 10:20:26 |
| 2018-11-12 10:20:27 |
| 2018-11-12 10:20:28 |
| 2018-11-12 10:20:28 |
| 2018-11-12 10:20:29 |
| 2018-11-12 10:30:53 |
| 2018-11-12 10:30:54 |
| 2018-11-12 10:30:55 |
| 2018-11-12 10:30:55 |
| 2018-11-12 10:30:56 |
| 2018-11-12 10:30:57 |
| 2018-11-12 10:30:57 |
| 2018-11-12 10:33:37 |
| 2018-11-12 10:33:38 |
| 2018-11-12 10:33:39 |
| 2018-11-12 10:33:40 |
| 2018-11-12 10:33:40 |
| 2018-11-12 10:33:41 |
| 2018-11-12 10:33:42 |
| 2018-11-12 10:33:42 |
| 2018-11-12 10:33:43 |
+---------------------+

注意:不要在原服务器上执行还原操作

在另一台服务器上还原被误删的 MySQL 数据

标签:single   文件拷贝   服务   binlog   --   table   int   时间   databases   

原文地址:http://blog.51cto.com/linux10000/2315677

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!