mysqlbinlog命令使用

参考:
https://www.cnblogs.com/zouhong/p/14540380.html
https://www.iteye.com/blog/wx1568934009-2469938

获取二进制日志列表show binary logs

show binary logs

在这里插入图片描述

查看具体日志文件mysqlbinlog mysql-bin.000025

进入服务器

#存放binlog的地方,具体可看配置文件
cd /var/lib/mysql
mysqlbinlog mysql-bin.000025

日志全文

[root@129 home]# cd /var/lib/mysql
[root@129 mysql]# mysqlbinlog mysql-bin.000025
# The proper term is pseudo_replica_mode, but we use this compatibility alias
# to make the statement usable on server versions 8.0.24 and older.
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#220407 20:56:18 server id 129  end_log_pos 126 CRC32 0xf0043ca2        Start: binlog v 4, server v 8.0.28 created 220407 20:56:18 at startup
ROLLBACK/*!*/;
BINLOG '
ct9OYg+BAAAAegAAAH4AAAAAAAQAOC4wLjI4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAABy305iEwANAAgAAAAABAAEAAAAYgAEGggAAAAICAgCAAAACgoKKioAEjQA
CigAAaI8BPA=
'/*!*/;
# at 126
#220407 20:56:18 server id 129  end_log_pos 157 CRC32 0x8b107e3b        Previous-GTIDs
# [empty]
# at 157
#220407 21:01:23 server id 129  end_log_pos 180 CRC32 0x65c055ca        Stop
SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;
DELIMITER ;
# End of log file
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;

获取指定数据库的日志-d

#先把日志文件拿到备份的目录
cd /home/mysqlbak
cp /var/lib/mysql/mysql-bin.* ./
#获取指定库的日志文件 -d 指定数据库 -r 指定输出在哪个文件
mysqlbinlog -d clsn  mysql-bin.000026 -r clsn.sql

在这里插入图片描述

禁止恢复过程产生日志 -D

在使用二进制日志文件进行数据库恢复时,该过程中也会产生日志文件,就会进入一个循环状态,继续恢复该过程中的数据。因此,当使用mysqlbinlog命令时,要禁用二进制日志,请使用下面所示的-D选项:

mysqlbinlog -d clsn -D  mysql-bin.000026 -r clsn2.sql

在这里插入图片描述

对比有无-D文件发现如下,左侧是不加-D
文件开始

/*!32316 SET @OLD_SQL_LOG_BIN=@@SQL_LOG_BIN, SQL_LOG_BIN=0*/;

在这里插入图片描述
文件结尾

/*!32316 SET SQL_LOG_BIN=@OLD_SQL_LOG_BIN*/;

在这里插入图片描述
尝试恢复

mysql -uroot -p'123456' < clsn2.sql

观察mysql-bin.000026文件发现文件大小和修改时间都未变化,代表恢复不会产生binlog日志。

控制输出base64编码的BINLOG语句 --base64-output

使用base64-output选项,可以控制输出语句何时是输出base64编码的BINLOG语句。
以下是输出设置的可能值:

  • never
  • unspec
  • decode-rows
  • auto(默认)

never:当指定如下所示的never时,它将不在输出中显示base64编码的BINLOG语句。

mysqlbinlog -d clsn --base64-output=never  mysql-bin.000026 -r clsn3.sql

下面的语句不输出

BINLOG '
peBOYg+BAAAAegAAAH4AAAABAAQAOC4wLjI4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAACl4E5iEwANAAgAAAAABAAEAAAAYgAEGggAAAAICAgCAAAACgoKKioAEjQA
CigAAcVeR9E=

对比有无base64编码的binlog语句
在这里插入图片描述
unspec:当指定unspec选项时,只要有可能,它将只显示BINLOG项。因此,只有在专门调试一些问题时才使用它。

mysqlbinlog -d clsn --base64-output=unspec  mysql-bin.000026 -r clsn4.sql

发现生成的文件和不加参数生成的文件一模一样这里也不是很懂,后续在推敲。

decode-rows:这个选项将把基于行的事件解码成一个SQL语句,特别是当指定-verbose选项时,如下所示。

mysqlbinlog -d clsn --base64-output=decode-rows --verbose mysql-bin.000026 -r clsn5.sql

发现生成的文件和不加参数生成的文件一模一样这里也不是很懂,后续在推敲。

auto这里不解释。

mysqlbinlog输出调试信息

[root@129 mysqlbak]# mysql -V
mysql  Ver 8.0.28 for Linux on x86_64 (MySQL Community Server - GPL)

很遗憾,我安装的是非调试版本此功能无法尝试。
在这里插入图片描述

跳过前N个条目 -o

mysqlbinlog -d clsn -o 500 mysql-bin.000026 -r clsn6.sql

打开clsn6.sql文件对比之前的完整文件,看到明显少了很多
在这里插入图片描述

保存输出到文件 -r

不介绍上面用到很多

从一个特定位置提取后续条目 -j

mysqlbinlog -j 10644 mysql-bin.000026 -r clsn7.sql

在这里插入图片描述

提取指定位置之前的条 --stop-position

有stop就有start,这里不举例

mysqlbinlog --stop-position 157  mysql-bin.000026 -r clsn8.sql

在输出中只显示语句 -s

默认情况下,正如在前面的示例输出中看到的一样,除了SQL语句之外,在mysqlbinlog输出中还会有一些附加信息。如果只想查看常规的SQL语句,而不需要其他内容,那么可以使用 -s 选项,如下所示。

[root@129 mysqlbak]# mysqlbinlog -s mysql-bin.000026 -r clsn9.sql
WARNING: --short-form is deprecated and will be removed in a future version

查看特定开始时间的条目 --start-datetime --stop-datetime

mysqlbinlog --start-datetime='2022-04-07 21:27:47' --stop-datetime='2022-04-08 18:17:21' mysql-bin.000026 -r clsn10.sql

从远程服务器获取二进制日志

  • -R 选项指示mysqlbinlog命令从远程服务器读取日志文件
  • -h 指定远程服务器的ip地址
  • -p 将提示输入密码,注意是mysql数据库密码不是linux服务器密码。默认使用“root”作为用户名。也可以使用 -u 选项指定用户名
  • -u 指定访问mysql的用户名,注意不是linux服务器的登录名
  • -r 输出到文件
mysqlbinlog -R -h 192.168.106.140 -u root -p'123456' mysql-bin.000026 -r bin.sql
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值