2018/07 作者:ihunter 0 次 0
当你需要恢复MySQL时,也会需要使用到二进制日志文件。
mysqlbinlog 命令,以用户可视的方式展示出二进制日志中的内容。同时,也可以将其中的内容读取出来,供其他MySQL实用程序使用。
在此示例中,我们将会涉及以下内容:
- 获取当前二进制日志列表
- mysqlbinlog默认行为
- 获取特定数据库条目
- 禁止恢复过程产生日志
- 在输出中控制base-64 BINLOG
- mysqlbinlog输出调试信息
- 跳过前N个条目
- 保存输出到文件
- 从一个特定位置提取条目
- 将条目截止到一个特定的位置
- 刷新日志以清除Binlog输出
- 在输出中只显示语句
- 查看特定开始时间的条目
- 查看特定结束时间的条目
- 从远程服务器获取二进制日志
1 获取当前二进制日志列表
2 mysqlbinlog 默认行为
3 获取特定数据库条目
4 禁止恢复过程产生日志
当使用-to-last-log选项时,这个选项也会有所帮助。另外,请记住,该命令需要root权限来执行。
5 在输出中控制base-64 BINLOG
- never
- always
- decode-rows
- auto(默认)
MySQL主从复制异常,定位具体的SQL
show binlog events 找到对应的position:
MySQL bin_log 日志row格式,如何转换为SQL:
show binlog events in 'mysql-bin.007064' from 0 limit 165000, 100;
可以看到一个语句跨越了四段position:
| mysql-bin.007064 | 309483688 | Query | 1 | 309483760 | BEGIN |
| mysql-bin.007064 | 309483760 | Table_map | 1 | 309483828 | table_id: 71 (guba.guba_threads_all) |
| mysql-bin.007064 | 309483828 | Delete_rows | 1 | 309483892 | table_id: 71 flags: STMT_END_F |
| mysql-bin.007064 | 309483892 | Xid | 1 | 309483923 | COMMIT / xid=2760796538 /
通过mysqlbinlog 来分析下具体执行的SQL语句内容:
/usr/local/mysql/bin/mysqlbinlog -v --base64-output=DECODE-ROWS --start-position=309483688 --stop-position=309483923 mysql-bin.007064
DELETE FROM
guba
.guba_threads_all
WHERE
@1=16923125 / INT meta=0 nullable=0 is_null=0 /
@2='zp' / VARSTRING(90) meta=90 nullable=0 is_null=0 /
6 mysqlbinlog输出调试信息
7 跳过前N个条目
下面将跳过指定的mysql bin日志中的前10个条目。
8 保存输出到文件
9 从一个特定位置提取条目
10 将条目截止到一个特定的位置
11 刷新日志以清除Binlog输出
12 在输出中只显示语句
也可以使用 --short-form 选项,效果相同。
13 查看特定开始时间的条目
14 查看特定结束时间的条目
15 从远程服务器获取二进制日志
此处使用-R选项。-R选项与-read-from-remote-server相同。
- -R 选项指示mysqlbinlog命令从远程服务器读取日志文件
- -h 指定远程服务器的ip地址
- -p 将提示输入密码。默认情况下,它将使用“root”作为用户名。也可以使用 -u 选项指定用户名。
- mysqld-bin.000001 这是在这里读到的远程服务器的二进制日志文件的名称。
下面命令与上面的命令完全相同:
1 | $ mysqlbinlog -R --host=192.168.101.2 -u root -p mysqld-bin.000001<span style="text-indent: 2em; |
上篇:
Mycat学习实战-Mycat读写分离
下篇:
mysqladmin命令用法