200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > Mysql数据库误删除数据恢复方案

Mysql数据库误删除数据恢复方案

时间:2019-02-26 12:03:18

相关推荐

Mysql数据库误删除数据恢复方案

Mysql数据库误删除数据恢复方案

一、查看binlog是否开启并锁表

#进入mysqlmysql -uroot -p#查看binlog是否开启show variables like '%log_bin%'; #如果log_bin显示为ON则开启成功#锁表,防止数据被污染lock tables test read;

二、查询目前在哪个binlog日志

#列出binlog列表show binary logs;#查询最新的binlogshow master status;

三、导出删除日期范围内的binlog日志

在mysql的bin目录下使用mysqlbinlog,如果是docker容器则使用find命令查找到mysqlbinlog命令所在文件,进入执行即可

mysqlbinlog -uroot -proot --base64-output=decode-rows --start-datetime="-01-13 08:00:00" --stop-datetime="-01-14 10:00:00" --read-from-remote-server -vv mysql-bin.000002 | sed -n '/### DELETE FROM `test`.`test`/, /COMMIT/p' > /var/lib/mysql/row.sql;#--base64-output=decode-rows 表示导出格式为row#--start-datetime="-01-13 08:00:00" 表示查询的开始时间#--stop-datetime="-01-14 10:00:00" 查询的结束时间#--read-from-remote-server 表示用于备份远程服务器的binlog。如果不指定该选项,则会查找本地的binlog。-vv 表示显示sql 语句加 字段类型#sed -n '/### DELETE FROM `test`.`test`/, /COMMIT/p' 表示过滤规则# > /var/lib/mysql/row.sql 表示输出路径

四、过滤刚刚导出的binlog日志

#先进入导出binlog的路径, docker可以去到容器外挂载路径cd /var/lib/mysqlcat delete.txt | sed -n '/###/p' | sed 's/### //g;s/\/\*.*/,/g;s/DELETE FROM/INSERT INTO/g;s/WHERE/SELECT/g;' | sed -r 's/(@3.*),/\1;/g' | sed 's/@[1-9]=//g' > rollback.sql;#sed -r 's/(@3.*),/\1;/g'#这里的@3代码过滤出的binlog的最后一行,替换掉最后的逗号变为;

在mysql中使用unlock tables;解锁表

再执行sql文件即可。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。