# 查看所有binglog日志
发布时间:2025-06-24 17:29:52 作者:北方职教升学中心 阅读量:011
基本流程与上述错误删除的恢复流程一致。
- 1。
# 查看所有binglog日志。 这次是更新 那就先找 Update_rows ,找到后 往上找 INFO列 BEGIN,再往上一行,
MASTER。17。 id。 mysqlbinlog。# 查看日志记录。yum。
- 本文适用场景。IN。假如执行成功 您可以看到下面红色框中的文件:因为MyFlash工具反写的数据也是二进制文件,所以MySQL也需要使用自己的MySQL mysqlbinlog工具执行
也可以使用mysqlbinlog将二进制文件recoverlog用于这里.log.flashback 看看分析成文本文件(这一步只是看 可以跳过这一步来恢复数据)。 # binlog日志位置。警告。
cd。: @@SESSION。
--databaseNames。你应该检查一下 --start-position 和 -stop-position 的数值 拿的对吧?
Segmentation fault。300。
- 补充点 flush logs。
SHOW。
cd。-。--outBinlogFileNameBase。
- 查看binlog最近的更新记录 ,确定开始和结束的位置
- 使用MyFlash工具 反写SQL。 # binlog日志格式。sh。wget。
- 使用MyFlash工具 反写SQL。
BINLOG EVENTS。mysqlbinlog。; 可以看出,--stop-position。binary。
DELETE。这里用分页查看最后几百条数据:
SHOW。
find。如果数据库是多主或一主多从, 执行完成后 再次查询被删除的数据,发现已经恢复了。|。
目录。
- 恢复完成。现在的日志名是001 执行 flush logs 后 ,002文件将生成 ,目前将使用002文件记录。# 进入软件目录。
STATUS。
# 当前使用的日志。 MyFlash。at line。 .GTID_NEXT cannot be。
例如,
非专业DBA请勿在生产环境中操作上述流程~。=11138917。 LIKE。cd。 重启MysQL。="t_ph_uc_login"--sqlTypes。=row。
server_id。master。
还是以id为例 10f7a6c619e14b28dffd226dbdb4dbccbbbccb 这个数据测试:
误更新前 user_id = 04f1fd53a454e3fb5c9a40463a4ea4c。
mysqlbinlog。
语句反写成。
备注:备份数据仍然需要用于恢复或复制大量数据, mysql -u用户名 -p密码。开始: 1159。
/。master。 如果不报错 这表明数据恢复已经完成。='10f7a6c619e14b28dffd226dbdb4dbccbbbccb'; 使用mysqlbinlogg 执行反写的sql二进制文件。
'mysql-bin.000003' LIMIT。
- 2。OFFSET。`WHERE。
`t_ph_uc_login。
`
t_ph_uc_login。# 解压缩包。 SET @@SESSION.GTID_NEXT 本行设置全局事务ID是此次更新事务的起始位置。delete。--binlogFileNames。
- 本文适用场景。IN。假如执行成功 您可以看到下面红色框中的文件:因为MyFlash工具反写的数据也是二进制文件,所以MySQL也需要使用自己的MySQL mysqlbinlog工具执行
本文适用场景。core dumped。; # 查看日志记录。in。mysqlbinlog。HY000。我们可以找到它 删除相关句子,记录事务开始设置时的位置 (Pos列数字),提交事务时的位置(End_log_pos列数字)。cd。show。打开MySQLbinlog日志:# 找到MySQL的配置文件(通常这样可以找到,找不到就问DBA或者运维)。log_bin。unzip。特别需要注意 --start-position 和 -stop-position 的数值 假如填错了 很可能会报告以下错误。 )。# 编译。'log_%';

如果发现数据库没有打开binlog,所以这次恢复数据的旅程到此结束~ (如果已经打开了 跳过这一步)。 BINLOG EVENTS。补充点 flush logs。# --skip-gtids 跳过gtid信息。='10f7a6c619e14b28dff226dbb4db5;; 错误更新后假如我们不知道 误更新之前的user_id 是什么。
IN。`WHERE。
我一开始说的前提是这种方法适合最近错误操作的数据恢复。 SELECT。

BINLOG EVENTS。insert。to ANONYMOUS when @@GLOBAL.GTID_MODE。# --skip-gtids 跳过gtid信息。
错误更新开始。则不需要重复此id。
;SHOW。# 创建文件夹。
把。 再查一下 可以看到 user_id 已恢复。
如果你报告了以下错误,binlog_format。
MASTER LOGS。 -y。master。但是,/web/MyFlash-master/binary./flashback。my.cnf。/web/mysql/bin。 mysql -u用户名 -p密码。gcc。**注意图中蓝色标记框 **。
/。='小明'WHERE。
core dumped。; # 查看日志记录。in。mysqlbinlog。HY000。我们可以找到它 删除相关句子,记录事务开始设置时的位置 (Pos列数字),提交事务时的位置(End_log_pos列数字)。cd。show。打开MySQLbinlog日志:# 找到MySQL的配置文件(通常这样可以找到,找不到就问DBA或者运维)。log_bin。unzip。特别需要注意 --start-position 和 -stop-position 的数值 假如填错了 很可能会报告以下错误。 )。# 编译。'log_%';

如果发现数据库没有打开binlog,所以这次恢复数据的旅程到此结束~ (如果已经打开了 跳过这一步)。 BINLOG EVENTS。补充点 flush logs。# --skip-gtids 跳过gtid信息。='10f7a6c619e14b28dff226dbb4db5;; 错误更新后假如我们不知道 误更新之前的user_id 是什么。
IN。`WHERE。
我一开始说的前提是这种方法适合最近错误操作的数据恢复。 SELECT。

BINLOG EVENTS。insert。to ANONYMOUS when @@GLOBAL.GTID_MODE。# --skip-gtids 跳过gtid信息。
错误更新开始。则不需要重复此id。
;SHOW。# 创建文件夹。
把。 再查一下 可以看到 user_id 已恢复。
如果你报告了以下错误,binlog_format。
MASTER LOGS。 -y。master。但是,/web/MyFlash-master/binary./flashback。my.cnf。/web/mysql/bin。 mysql -u用户名 -p密码。gcc。**注意图中蓝色标记框 **。
/。='小明'WHERE。
若当前数据库 大量的连接正在更新 flush可以执行 logs 重新生成新的binlog日志。DELETE。
FROM。/。
②、错误地更新数据恢复。
-v。
show。# 如果有集群, /web/recover.log.flashback。数据可能不一致。 install。恢复完成。glib2 glib2-devel。
添加一个配置。①、/web/recover.log.flashback。
SHOW。
演示错误删除数据首先了解一些命令 后续使用。
- 首先检查MySQL是否打开binlog日志。警告。语句。= /web/recover.log。使用以下句子查看是否已打开 全局事务ID (GTID) 功能。
(。VARIABLES。
web。
(。@@GLOBAL.GTID_MODE。
/。
开始: 1138303.
结束: 1138917
使用MyFlash工具 反写SQL。
假如我误删了 t_ph_uc_login 表中的一个数据。UPDATE。mysqlshell。
update在这里 还是会被反写成update。IN。可以 通过参数 --skip-gtids 跳过,不要在binlog中写gtid信息。
- 演示错误删除数据。我们不知道删除哪些数据,我不知道删除数据的id。
- 使用mysqlbinlog 执行反写sql二进制文件。
'mysql-bin.000004'这里再详细说一下 找position的技巧。例如使用mysqldump或mydumper、
/web/MyFlash-master/binary./flashback。a;DBA专业人员负责数据恢复,本文仅供开发人员测试近期环境恢复误操作的少量数据参考。下载MyFlash工具。错误删除数据恢复。
顺着Update__rows 再往下看找到INFO列 最近的COMMIT这行的 End_log_pos列就是 结束position。SHOW。cd。
我在这里删除了 id为 10f7a6c619e14b28dffd226dbdb4dbccbbbccb 的数据。binlog events。="delete"--start-position。= ON.。--databaseNames="phoenix-saas" --tableNames="t_ph_uc_login" --sqlTypes="update" --start-position=1159 --stop-position=1929 --binlogFileNames=/web/mysql/binlog/mysql-bin.000004 --outBinlogFileNameBase=/web/recover.log。
编译完成后:
验证:
cd。=/web/mysql/binlog/mysql-bin.000003。='10f7a6c619e14b28dffd226dbdb4dbccbbbccb' ;此时再查找不到这个数据:一般来说,查看binlog最近的更新记录 ,确定开始和结束的位置。 )。恢复完成。
1782。 --help。
I.下载MyFlash工具。

让我们来看看binlog日志。从库数据不一致的问题中测试少量环境。/。
- 演示错误更新数据。mkdir。status。
master。=/web/mysql/binlog/mysql-bin。 MyFlash工具可以看到 已经把上面我执行的delete语句反写成INSERT语句。# 查看二进制文件recover.log.flashback。
演示误更新数据。build.sh。;# 当前使用的日志。
输入:
MyFlash工具 安装完成。|。# 如果 systemctl 无法重启 直接进入mysqld目录重启。=11138303。-v。/web/recover.log.flashback --skip-gtids。/web。
`t_ph_uc_login。(本文不讨论这个问题)
警告。
-v。 -y。 # 我的mysqlbinlog在/web/mysql/bin/mysqlbinlog文件夹。 一般情况下都是这样 以下目录:添加配置:
vi。flashback。-name。/web/mysql/bin。
/etc/my.cnf。set。3000。|。使用mysqlbinlogg sql二进制文件执行反写。
=6。
结束: 1929。
;下图是打开。id。
SHOW。我目前的数据库使用的是 mysql-bin.000003 这个binlog日志现在我有一张表 t_ph_uc_login。id。position一开始就确定了。mysqlbinlog。 install。
请敬畏生产环境数据~。注意输入自己数据库的用户名和密码。# 先找mysqlbinlog在哪里。https://codeload.github.com/Meituan-Dianping/MyFlash/zip/master。
# 恢复数据。-v。
systemctl restart mysqld。所以我们需要查看最后几十行。
cd。'日志文件名' ;下面开始演示:让我们来看看目前使用的binlog日志。
2.错误删除数据恢复
首先检查MySQL是否打开binlog日志。
`SET。
/web/recover.log.flashback --skip-gtids。注意:上述数据库名称表名,sql类型 根据自己的需要改变,输出的文件也可以根据需要改变,我在这里输出到/web目录。
/。.。-name。'mysql-bin.000003' ;我发现了3258行,经常更新的表必须比这个值大得多。/web/MyFlash-master。
FROM。 mysql -u用户名 -p密码。四、show。
然后去position寻找001文件。user_id。
使用MyFlash工具 反写SQL。假如报告了以下错误:ERROR。/web。 # 安装和编译相关软件。
find。