cmd mysql log_如何使用mysqlbinlog工具?

1 基础知识

1.1 MySQL BingLog的概念

MySQL BingLog是一种记录MySQL运行“事件”的二进制日志文件

MySQL BingLog文件需要使用mysqlbinlog专用工具读取

1.2 mysqlbinlog工具的作用

能显示复制关系的从属服务器的写入中继日志文件内容

2 最佳实践

2.1 命令选项的介绍

2.1.1 命令使用格式

shell> mysqlbinlog [options] log_file ...

2.1.2 命令的使用范例

shell> mysqlbinlog binglog.0000003

以上命令输出的内容有,

记录基本语句的日志记录

记录事件信息的SQL语句

记录执行SQL语句的ID

记录执行SQL语句的时间戳

记录执行SQL语句的耗时

另外,对于日志记录的格式,请参阅官方17.2.1章节

2.1.3 日志的范例

# at 141

#100309 9:28:36 server id 123 end_log_pos 245

Query thread_id=3350 exec_time=11 error_code=0

第一行”at”关键字后面的ID代表二进制日志的事件偏移量或起始位置

第二行,

“100309 9:28:36”为日期和时间

“server id”是事件起源服务器的标识

“end_log_pos”指示下一事件的起始位置(即当前时间结束位置加一)

“thread_id”指示事件由那个线程负责执行

“exec_time”指示事件执行所耗费的时间(主节点执行的开始时间至从节点执行的结束时间)

“error_code”指示时间执行的结果(零表示没有错误)

2.1.4 读取远程服务器的二进制日志

mysqlbinlog --read-from-remote-server

以上选项支持从远程服务器读取二进制日志(如果主服务加密从从服务器读取),另外以下选项作为辅助可选项,

“–host”指示远程二进制日志服务器的IP或主机名称

“–port”指示远程二进制日志服务器的端口

“–protocol”指示远程二进制日志服务器的协议

“–socket”指示远程二进制日志服务器的socket路径

“–user”指示远程二进制日志服务器的用户名

“–password”指示远程二进制日志服务为的用户密码

2.2 命令的使用范例

2.2.1 通过管道传递给MySQL客户端

shell> mysqlbinlog binlog.000001 | mysql -u root -p

当需要引入多个binlog文件时,可使用如下命令,

shell> mysqlbinlog binlog.[0-9]* | mysql -u root -p

另外,为避免BLOB值的影响,可加上如下选项再使用,

shell> mysqlbinlog --binary-mode binlog.[0-9]* | mysql -u root -p

2.2.2 编辑后再还原数据

shell> mysqlbinlog binlog.000001 > tmpfile

shell> ... edit tmpfile ...

shell> mysql -u root -p < tmpfile

注:以上通过命令将binlog导出到临时文件,编辑(删除某些原因不想执行的语句)后再导入MySQL客户端

2.2.3 安全的单线程执行

shell> mysqlbinlog binlog.000001 binlog.000002 | mysql -u root -p

以上使用单个线程依次导入两个binglog并执行,另外以下方法亦可作为替代,

shell> mysqlbinlog binlog.000001 > /tmp/statements.sql

shell> mysqlbinlog binlog.000002 >> /tmp/statements.sql

shell> mysql -u root -p -e "source /tmp/statements.sql"

另外以下方法是我们不建议的,请谨慎使用(有可能第一个binlog后执行会覆盖第二个binlog的执行结果),

shell> mysqlbinlog binlog.000001 | mysql -u root -p # DANGER!!

shell> mysqlbinlog binlog.000002 | mysql -u root -p # DANGER!!

2.2.4 通过管道的流输入

shell> gzip -cd binlog-files_1.gz | ./mysqlbinlog - | ./mysql -uroot -p

以上范例通过提取压缩包的内容后通过管道将二进制日志文件以流的形式直接作为mysqlbinlog的标准输入流,然后同样以流的形式传递给mysql客户端,如果需要指定多个压缩包,可使用如下命令,

shell> gzip -cd binlog-files_1.gz binlog-files_2.gz | ./mysqlbinlog - | ./mysql -uroot -p

另外需要注意的是,

以上使用方法只有MySQL 8.0.12以上版本支持

mysqlbinlog无法识别“–stop-position”选项

参阅文档

===================

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值