误删数据库-binlog恢复mysql

1,175 阅读1分钟

原因

开发误删数据库表,需要恢复

要求

mysql 有开启 binlog 日志记录

步骤

1. 找到 binlog 文件

ll /var/lib/mysql/*bin*
# 查看 binlog 日志文件列表
mysql -uroot -ppassword
mysql> show master logs;
# 查看最后一个binlog日志的编号及最后一个操作事件position 结束点的值
mysql> show master status;
# 刷新日志,产生一个新编号 binlog 文件
mysql> flush logs;

2. 寻找需要还原的时间点 position

ll /var/lib/mysql/  # 查看文件时间# 1. 通过Navicat 连接 mysql 查看 binlog文件内容(命令行查看太慢)
mysql >  show binlog events in 'master-bin.000002';

image.png

3. 导出 sql 语句

mysqlbinlog --no-defaults  --stop-position=315502651 --database=unidb2 /data/mysql/master-bin.000002 > /2.sql | mysql -uroot -ppassword
​
mysqldump -uroot -ppassword unidb2 < /2.sql

4. 执行导出的 sql 文件

注:执行sql文件时有创建表语句,提示表已存在,因此需要备份原数据库,然后删除所有表后再执行sql文件

# 备份原数据库unidb2
mysqldump -uroot -ppassword unidb2 > bak.sql
# 删除 unidb2 下所有表后导入 2.sql
mysqldump -uroot -ppassword unidb2 < /2.sql

\