记一次update导致的数据恢复
前提条件
- 首先需要数据库开启了bin_log
- 如果是update操作要开启ROW模式
- 清楚binlog存储的位置
恢复操作
- 因为是更新操作,所以直接使用Navicat工具,运行命令找到当前的bin文件
show master status;
- 记录下对应的文件名
- 运行命令
flush logs;
生成新的bin文件,让之前的操作保留在当前的状态下 - 进入到服务器使用linux命令
whereis mysqlbinlog
找到mysqlbinlog文件所在的位置 - 使用
./mysqlbinlog --no-defaults -v -v --base64-output=DECODE-ROWS /data/mysql/data/mysql-bin.000484 | grep -B 15 '附件'
找到对应操作的初始位置- /data/mysql/data/mysql-bin.000484 表示bin文件存储的位置
- -B 15 表示控制台打印输出的文件的行数
- ‘附件’ 表示要查找的关键词
- 找到起始位置之后,使用命令
./mysqlbinlog --no-defaults --start-position=743936807 -v -v --base64-output=DECODE-ROWS /data/mysql/data/mysql-bin.000484 | sed -n '/# at 743936807/,/COMMIT/p' > /data/temp.txt
将update修改的信息导出到temp.txt文件中- /data/mysql/data/mysql-bin.000484 表示bin文件存储的位置
- 743936807 表示文件找到的起始位置
- 导出的文件大致就是这个样子的,可以使用linux的sed进行文本的处理,但是我现在还不会,只能使用文本编辑工具进行替换操作