大家好,这两天做项目是真的难受,误删库里面9万多条数据,项目经理一脸想杀了我的表情,幸亏最终找到了解决方案,为了防止下次再次碰见这种问题,记录下来分享给大家
误删mysql数据如何通过binlog 日志文件进行恢复
一:确保mysql已经开启binlog,查看命令
#进入数据库命令面板,输入以下命令
show variables like '%log_bin%';
值为ON,表示已开启
二:进入binlog文件目录,找出日志文件
查看日志存放位置,mysql默认的存放位置在 var/lib/mysql/
show variables like '%datadir%';
三:切换到mysqlbinlog目录
该目录默认在 /usr/bin/
mysqlbinlog 命令的语法格式: mysqlbinlog mysql-bin.0000xx | mysql -u用户名 -p密码
数据库名
-------------------------------------------------------- 常用参数选项解释:
–start-position=875 起始pos点
–stop-position=954 结束pos点
–start-datetime=“2016-9-25 22:01:08” 起始时间点
–stop-datetime=“2019-9-25 22:09:46” 结束时间点
–database=zyyshop 指定恢复的数据库
-------------------------------------------------------- 不常用选项:
-u --user=name 连接到远程主机的用户名
-p --password[=name] 连接到远程主机的密码
-h --host=name 从远程主机上获取binlog日志
–read-from-remote-server 从某个MySQL服务器上读取binlog日志
四:通过mysqlbinlog工具命令查看数据库增删改查记录
首先通过命令 根据你的操作时间 去日志文件中截取那段日志
mysqlbinlog --no-defaults --database=youku --start-datetime="2023-04-19 14:00:00" --stop-datetime="2023-04-19 15:00:00" /var/lib/mysql/binlog.000020 > /123.txt
然后在根据 pos点的范围来获取 操作的那段日志
mysqlbinlog --no-defaults --base64-output=DECODE-ROWS -v --start-position=393923040 --stop-position=406094626 --database=uimpx_parse /var/lib/mysql/binlog.000020 > /restore123.sql
发现得到了这样的文件