mysql-mysqlbinlog的使用详解

2023-05-16

一、背景

二进制日志在MySQL数据库中有着至关重要的作用,而读取二进制日志的工具就显得同样重要了,官方的mysqlbinlog就是读取二进制日志的工具,这里就结合官网和自己的实践整理一下

(PS: 最近总在学习新知识,担心老的知识不用会忘,所以梳理一下,新欢旧爱都要宠着)

二、介绍

1.参数简介

Option NameDescriptionIntroducedDeprecated
--base64-output

此选项确定何时使用BINLOG语句将事件显示为以base-64字符串编码 。该选项具有以下允许值(不区分大小写):

默认为--base64-output=AUTO

NEVER使 BINLOG语句不显示。如果发现必须使用来显示的行事件,则mysqlbinlog退出并出现错误BINLOG。

DECODE-ROWS通过指定--verbose选项,向mysqlbinlog指定您打算对行事件进行解码并显示为带注释的SQL语句。与NEVER一样,DECODE-ROWS禁止显示BINLOG语句,但是与NEVER不同,如果找到行事件,它不会以错误退出。

--bind-address在具有多个网络接口的计算机上,使用此选项选择用于连接到MySQL服务器的接口
--binlog-row-event-max-size指定基于行的二进制日志事件的最大大小,以字节为单位。如果可能,将行分组为小于此大小的事件。该值应为256的倍数。默认值为4GB
--character-sets-dir字符集的安装目录
--connection-server-id

此选项用于测试MySQL服务器是否支持BINLOG_DUMP_NON_BLOCK连接标志。正常操作不需要。

该选项的有效默认值和最小值取决于mysqlbinlog是在阻塞模式还是非阻塞模式下运行。当 mysqlbinlog在阻塞模式下运行时,默认值(最小值)为1;默认值为1。在非阻塞模式下运行时,默认值(和最小值)为0。

--database仅列出该数据库的条目,如果二进制格式是基于语句的,那么只有显示use db_name及下面的语句可以输出,而insert test.tab_name的语句并不会输出,而选择基于行模式的二进制格式,则会输出该库下表的修改,不过你用的是何种形式的sql,有没有使用use
--debug编写调试日志,
--debug-check程序退出时,打印一些调试信息。
--debug-info程序退出时,打印调试信息以及内存和CPU使用情况统计信息。
--default-auth有关使用哪个客户端身份验证插件的提示
--defaults-extra-file在全局选项文件之后但在用户选项文件之前(在Unix上)读取此选项文件。如果文件不存在或无法访问,则发生错误。如果 file_name不是绝对路径名,则相对于当前目录进行解释
--defaults-file仅使用给定的选项文件。如果文件不存在或无法访问,则发生错误。
--defaults-group-suffix不仅阅读常规选项组,而且阅读具有常规名称和后缀的组
--disable-log-bin禁用二进制日志记录
--exclude-gtids不要显示gtid_set中列出的任何组
--force-if-open读取二进制日志文件,即使它们已打开或未正确关闭
--force-read使用此选项,如果mysqlbinlog读取了它无法识别的二进制日志事件,它将打印警告,忽略该事件,然后继续。如果没有此选项,则mysqlbinlog会在读取到此类事件时停止。
--get-server-public-key从服务器请求基于RSA密钥对的密码交换所需的公共密钥。此选项适用于使用caching_sha2_password身份验证插件进行身份验证的客户端 。对于该插件,除非请求,否则服务器不会发送公钥。对于未使用该插件进行身份验证的帐户,将忽略此选项。如果不使用基于RSA的密码交换,也将被忽略,5.7.23
--helpDisplay help message and exit
--hexdump显示日志注释的十六进制转储
--host从给定主机上的MySQL服务器获取二进制日志
--idempotent告诉MySQL服务器在处理更新时使用幂等模式
--include-gtids仅显示gtid_set中列出的组 
--local-load对于与LOAD DATA语句相对应的数据加载操作 , mysqlbinlog从二进制日志事件中提取文件,将它们作为临时文件写入本地文件系统,并编写 LOAD DATA LOCAL语句以导致文件被加载。默认情况下,mysqlbinlog将这些临时文件写入特定于操作系统的目录。该--local-load选项可用于显式指定mysqlbinlog应该在其中 准备本地临时文件的目录
--login-path.mylogin.cnf登录路径文件中的命名登录路径读取选项 
--no-defaults不要读取任何选项文件,如果使用时有如下报错mysqlbinlog: [ERROR] unknown variable 'default-character-set=utf8'可以使用该选项绕过
--offset跳过日志中的N个条目
open_files_limit指定要保留的打开文件描述符的数量。
--password用于连接服务器的MySQL帐户的密码。密码值是可选的。如果未给出,则 mysqlbinlog提示输入一个。如果给出,则--password=或 -p与后面的密码之间 必须没有空格。如果未指定密码选项,则默认为不发送密码
--plugin-dir在其中查找插件的目录
--port用于连接到远程服务器的TCP / IP端口号。
--print-defaults打印程序名称及其从选项文件中获得的所有选项。
--protocol用于连接到服务器的传输协议
--raw默认情况下,mysqlbinlog读取二进制日志文件并以文本格式写入事件。 --raw选项告诉mysqlbinlog以其原始二进制格式编写它们。 它的使用要求也使用--read-from-remote-server,因为文件是从服务器请求的。 mysqlbinlog为从服务器读取的每个文件写一个输出文件。 --raw选项可用于备份服务器的二进制日志。 使用--stop-never选项,备份是在线的,因为mysqlbinlog保持与服务器的连接。 默认情况下,输出文件将以与原始日志文件相同的名称写入当前目录。 可以使用--result-file选项修改输出文件名。
--read-from-remote-master

通过将选项值分别设置为BINLOG-DUMP-NON-GTIDS或BINLOG-DUMP-GTIDS,分别使用COM_BINLOG_DUMP或COM_BINLOG_DUMP_GTID命令从MySQL服务器读取二进制日志。 如果将--read-from-remote-master = BINLOG-DUMP-GTIDS与--exclude-gtids结合使用,则可以在源上过滤掉事务,从而避免不必要的网络流量。

连接参数选项与此选项或--read-from-remote-server选项一起使用。 这些选项是--host,--password,--port,--protocol,--socket和--user。 如果两个远程选项均未指定,则连接参数选项将被忽略。

使用此选项需要REPLICATION SLAVE特权。

--read-from-remote-server从MySQL服务器读取二进制日志,而不是读取本地日志文件。此选项要求远程服务器正在运行。它仅适用于远程服务器上的二进制日志文件,不适用于中继日志文件。
--result-file如果没有--raw选项,则此选项指示mysqlbinlog将文本输出写入到的文件。 使用--raw,mysqlbinlog为从服务器传输的每个日志文件写入一个二进制输出文件,默认情况下使用与原始日志文件相同的名称将它们写入当前目录。 在这种情况下,--result-file选项值被视为修改输出文件名的前缀。
--rewrite-db

从基于行或基于语句的日志中读取时,请将所有出现的from_name重写为to_name。 对于基于行的日志,对行进行重写;对于基于语句的日志,对USE子句进行重写。 在5.7.8之前的MySQL版本中,此选项仅在还原使用基于行的格式记录的表时使用。

警告
使用此选项时,表名称与数据库名称匹配的语句不会被重写为使用新名称。

如前所述,用作此选项值的重写规则是形式为'from_name-> to_name'的字符串,因此必须用引号将其引起来。

与--database选项一起使用时,--rewrite-db选项将首先应用; 然后使用重写的数据库名称应用--database选项。 在这方面,提供选项的顺序没有区别。

--secure-auth

不要以旧(4.1之前)格式将密码发送到服务器。这样可以防止除使用较新密码格式的服务器以外的其他连接。

从MySQL 5.7.5开始,此选项已被弃用

Yes
--server-id仅显示由具有给定服务器ID的服务器创建的事件
--server-id-bits

仅使用server_id的前N位来标识服务器。 如果二进制日志是由mysqld编写的,其中server-id-bits设置为小于32,并且用户数据存储在最高有效位中,则在mysqlbinlog中将--server-id-bits设置为32,可以看到此数据。

NDB Cluster发行版随附提供或从NDB Cluster源构建的mysqlbinlog版本仅支持此选项。

--server-public-key-pathPEM格式的文件的路径名,其中包含服务器用于基于RSA密钥对的密码交换所需的公用密钥的客户端副本。 此选项适用于使用sha256_password或caching_sha2_password身份验证插件进行身份验证的客户端。 对于未通过这些插件之一进行身份验证的帐户,将忽略此选项。 如果不使用基于RSA的密码交换,也将被忽略,例如客户端使用安全连接连接到服务器时。

如果给出了--server-public-key-path = file_name并指定了有效的公钥文件,则它优先于--get-server-public-key。

对于sha256_password,仅当使用OpenSSL构建MySQL时,此选项才适用。

5.7.23
--set-charset在输出中 添加一条语句,以指定用于处理日志文件的字符集。 SET NAMES charset_name
--shared-memory-base-name

在Windows上,共享内存名称,用于使用共享内存与本地服务器建立的连接。默认值为MYSQL。共享内存名称区分大小写。

仅当在shared_memory启用了支持共享内存连接的系统变量的情况下启动服务器时,此选项才适用 。

--short-form仅显示日志中包含的语句,而没有任何其他信息或基于行的事件。这仅用于测试,不应在生产系统中使用。
--skip-gtids不要在输出中显示任何GTID。 从一个或多个包含GTID的二进制日志写入转储文件时,这是必需的
--socketUnix socket file or Windows named pipe to use
--sslEnable connection encryption
--ssl-caFile that contains list of trusted SSL Certificate Authorities
--ssl-capathDirectory that contains trusted SSL Certificate Authority certificate files
--ssl-certFile that contains X.509 certificate
--ssl-cipherPermissible ciphers for connection encryption
--ssl-crlFile that contains certificate revocation lists
--ssl-crlpathDirectory that contains certificate revocation-list files
--ssl-keyFile that contains X.509 key
--ssl-modeDesired security state of connection to server5.7.11
--ssl-verify-server-certVerify host name against server certificate Common Name identity
--start-datetime开始时间
--start-position开始pos点
--stop-datetime结束时间
--stop-never

此选项与--read-from-remote-server一起使用。 它告诉mysqlbinlog保持与服务器的连接。 否则,当从服务器传输了最后一个日志文件时,mysqlbinlog将退出。 --stop-never意味着--to-last-log,因此仅需要在命令行上命名要传输的第一个日志文件。

--stop-never通常与--raw一起使用以进行实时二进制日志备份,但也可以不与--raw一起使用,以在服务器生成日志事件时保持日志事件的连续文本显示。

--stop-never-slave-server-id使用--stop-never,mysqlbinlog在连接到服务器时报告服务器ID 65535。 --stop-never-slave-server-id明确指定要报告的服务器ID。 它可以用来避免与副本服务器或另一个mysqlbinlog进程的ID发生冲突。
--stop-position结束pos点
--tls-version允许的TLS协议进行加密连接。 该值是一个或多个逗号分隔的协议名称的列表。 可以为此选项命名的协议取决于用于编译MySQL的SSL库5.7.10
--to-last-log不要在从MySQL服务器请求的二进制日志的结尾处停止,而要继续打印直到最后一个二进制日志的结尾。 如果将输出发送到同一MySQL服务器,则可能导致无限循环。 此选项需要--read-from-remote-server。
--user连接到远程服务器时要使用的MySQL帐户的用户名。
--verbose重建行事件,并将其显示为带注释的SQL语句。如果两次给出此选项(通过传递“ -vv”或“ --verbose --verbose”),则输出将包含指示列数据类型和某些元数据的注释,以及行查询日志事件(如果已配置)。
--verify-binlog-checksum验证二进制日志文件中的校验和。
--version显示版本信息并退出。

2.重要参数的相关演示

2.1 截取位置相关参数

# 参数:--start-datetime,--stop-datetime,--start-position,--stop-position,--database

# 示例
mysqlbinlog  --start-position=194   mysql-bin.000021
# 有些同学可能发现即使我们指定了起始的pos点,但是日志仍然是从4开始的,这是为什么呢,可能影响的原因是我们的二进制日志格式为row,那么我们就需要加上--base64-output=decode-rows这个参数选项
mysqlbinlog  --start-position=194 --base64-output=decode-rows   mysql-bin.000021
# 如此一来,你会发现这时候的pos点已经从194开始了
mysqlbinlog  --start-datetime='2021-04-08 09:23:55'  --base64-output=decode-rows   mysql-bin.000022
# 起始时间和结束时间也同理,那如果start-position和start-datetime同时存在会怎么样呢,实践证明会取更靠后的选项,即时间的位置更靠后取时间,pos点的位置更靠后则取pos点
mysqlbinlog --start-position=3983 --start-datetime='2021-04-08 09:25:27'  --base64-output=decode-rows -vv  mysql-bin.000022

结果如下图: 

# 反过来,--stop-position和--stop-datetime同时存在的时候则是取更靠前的,即指定的时间在文件中更靠前则取时间,pos点在文件中更靠前则取pos点
 mysqlbinlog --stop-position=2945 --stop-datetime='2021-04-08 09:21:58'  --base64-output=decode-rows -vv  mysql-bin.000022

结果如下图: 

2.2 输出格式相关参数

# 参数:--base64-output,--verbose

# 现在的二进制基本都是采用row格式,官方也是推荐的row格式,所以这两个参数就显得极为重要了,接下来就演示下这两个参数的意义,原始什么参数都不加的
mysqlbinlog  --start-position=2111 --stop-position=2212  mysql-bin.000022

结果如下图

# 可以看到结果并不是你想看到的,至少不是我想看到的,如果你的眼睛自带编译解码等功能,那当我没有说,然后我们接下来加上--base64-output参数
 mysqlbinlog  --start-position=2111 --stop-position=2212  --base64-output=decode-rows  mysql-bin.000022

结果如下图

# 我们可以看到上图已经看不到乱码了,但是我们依然不知道这个二进制在表达着什么,那么我们再加上-vv
 mysqlbinlog  --start-position=2111 --stop-position=2212  --base64-output=decode-rows  -vv mysql-bin.000022

 结果如下图:

此时我们已经清楚的知道了段时间的数据库发生了什么事件了

2.3 db相关参数

# 参数:--database,--rewrite-db

mysqlbinlog  --start-position=2111 --stop-position=2212  --base64-output=decode-rows  -vv --database=binlog_test1  mysql-bin.000022
mysqlbinlog  --start-position=2111 --stop-position=2212  --base64-output=decode-rows  -vv --database=binlog_test2 --rewrite-db "binlog_test1->binlog_test2"  mysql-bin.000022

3.常用范例

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

mysqlbinlog --read-from-remote-server mysql-bin.123 	--host=192.168.1.1 --port=3306 -vv  --base64-output=decode-rows --user user --password > binlog.123

想到一个补一个吧

官网链接:MySQL :: MySQL 5.7 Reference Manual :: 4.6.7 mysqlbinlog — Utility for Processing Binary Log Files

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mysql-mysqlbinlog的使用详解 的相关文章

随机推荐

  • [李景山php]RHEL\CentOS 7\ubuntu16.04 下 MySQL 连接数被限制为214个

    问题 项目中 xff0c 由于连接数过多 xff0c 提示 Too many connections xff0c 需要增加连接数 我在 etc my cnf中修改了 max connections 61 2000 但是 xff0c 实际连接
  • 关系型数据库和非关系型数据库的特性以及各自的优缺点

    数据库 类型特性优点缺点关系型数据库 SQLite Oracle mysql1 关系型数据库 xff0c 是指采用了关系模型来组织 数据的数据库 xff1b 2 关系型数据库的最大特点就是事务的一致性 xff1b 3 简单来说 xff0c
  • 采用libuv的epoll方式实现的异步高性能libcurl发送数据的方法

    Libcurl较为基本的用法是easyinterface xff0c 它是最简单的同步接口 xff0c 容易理解 xff0c 实现代码简单 xff0c 但是性能低下 curl multi perform 43 select xff1a 可以
  • 各种浏览器语言包、国际化如何配置

    size 61 large 如果web项目使用了国际化多语言包 xff0c 切换浏览器语言包可以切换语言 xff1a color 61 red Firefox如何中英文切换 color 首先得下载语言包 xff0c 网址 xff1a url
  • libcurl采用curl_multi_perform() + curl_multi_wait()方式实现异步高性能l发送数据的方法

    前两篇文章 c c 43 43 调用libcurl库发送http请求的两种基本用法 采用libuv的epoll方式实现的异步高性能libcurl发送数据的方法 讲述了采用libcurl发送数据的基础方法和高性能方法 xff0c 基础方法较为
  • 网络库libevent、libev、libuv对比

    Libevent libev libuv 三个网络库 xff0c 都是c 语言实现的异步事件库Asynchronousevent library xff09 异步事件库本质上是提供异步事件通知 xff08 Asynchronous Even
  • 记flume部署过程中遇到的问题以及解决方法(持续更新)

    项目需求是将线上服务器生成的日志信息实时导入kafka xff0c 采用agent和collector分层传输 xff0c app的数据通过thrift传给agent xff0c agent通过avro sink将数据发给collector
  • c++11多线程编程(一):创建线程的三种方法

    c 43 43 11线程库 原始的c 43 43 标准仅支持单线程编程 xff0c 新的c 43 43 标准 xff08 c 43 43 11或c 43 43 0x xff09 于2011年发布 xff0c 引入了新的线程库 编译器要求 L
  • c++11多线程编程(六):事件处理

    本节讨论在多线程环境下的事件处理 有时 xff0c 线程需要等待某事件发生 xff0c 比如一个条件变为true xff0c 或者某任务被另一个线程完成 例如 xff0c 我们创建一个基于网络的应用程序 xff0c 处理如下的任务 xff1
  • C++11智能指针(六):unique_ptr介绍与例子

    本节介绍下c 43 43 11提供的智能指针实现 std unique ptr lt gt 什么是std unique ptrunique ptr lt gt 是c 43 43 11提供的智能指针实现之一 xff0c 用于防止内存泄漏 un
  • RabbitMQ图解

    RabbitMQ是一个消息队列软件 xff0c 称为消息代理或队列管理器 简单地说 xff0c 这是一个可以定义队列的软件 xff0c 应用程序可以连接到队列并将消息传输到队列中 消息可以包括任何类型的信息 例如 xff0c 它可以具有从另
  • RabbitMQ C 客户端收发数据实例解析

    rabbitmq c客户端 xff0c github地址 xff1a https github com alanxz rabbitmq c rabbitmq c是一个C语言操作的AMQP客户端库 xff0c 用来与RabbitMQ brok
  • php curl知识点

    如果不支持https可以试试关掉ssl curl setopt ch CURLOPT SSL VERIFYHOST 0 curl setopt ch CURLOPT SSL VERIFYPEER 0 编译curl的时候开启ssl with
  • 大小端字节序知识详解

    计算机硬件有两种储存数据的方式 xff1a 大端字节序 xff08 big endian xff09 和 小端字节序 xff08 little endian xff09 举例 xff1a 数值0x2211使用两个字节储存 xff1a 高位字
  • URL转义及编码

    js对文字进行编码涉及3个函数 xff1a escape encodeURI encodeURIComponent xff0c 相应3个解码函数 xff1a unescape decodeURI decodeURIComponent url
  • 从C到C++高级过渡

    当做速学笔记使用 简写 基础篇 环境设置 g 43 43 有些系统默认是使用 C 43 43 98 xff0c 我们可以指定使用 C 43 43 11 来编译 main cpp 文件 xff1a g span class token ope
  • 收藏!了解UART总线工作原理看这一篇就够了!

    原文 xff1a 玩转单片机 2019 08 24 16 50 29 越学到后面 xff0c 基础知识更加不能忘记 xff0c 温故而知新 还记得当年的打印机 xff0c 鼠标和调制解调器吗 xff1f 他们都有巨大笨重的连接器和粗电缆 x
  • extern "C"在DLL导出函数时有什么作用?

    extern是c c 43 43 语言中表明函数和全局变量作用范围的关键字 该关键字告诉编译器 xff0c 其声明的函数和变量可以在本模块或其他模块中使用 通常 xff0c 在模块的头文件中对本模块提供给其他模块引用的函数和全局变量以关键字
  • MPU6050六轴传感器的原理及编程说明

    一 xff0e 简介 MPU6050 是 InvenSense 公司推出的整合性 6 轴运动处理组件 xff0c 其内部整合了 3 轴陀螺仪和 3 轴加速度传感器 xff0c 并且含有一个IIC 接口 xff0c 可用于连接外部磁力传感器
  • mysql-mysqlbinlog的使用详解

    一 背景 二进制日志在MySQL数据库中有着至关重要的作用 xff0c 而读取二进制日志的工具就显得同样重要了 xff0c 官方的mysqlbinlog就是读取二进制日志的工具 xff0c 这里就结合官网和自己的实践整理一下 xff08 P