binlog相关

MySQL 的二进制日志 binlog 可以说是 MySQL 最重要的日志,它记录了所有的 DDL 和 DML 语句(除了数据查询语句select、show等),以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务安全型的。binlog 的主要目的是复制和恢复。

Binlog日志的两个最重要的使用场景
MySQL主从复制:MySQL Replication在Master端开启binlog,Master把它的二进制日志传递给slaves来达到master-slave数据一致的目的
数据恢复:通过使用 mysqlbinlog工具来使恢复数据

总体的关于binlog的参数如下

sync_binlog = 1
log-bin = mysql-bin
binlog_format = row
expire_logs_days = 10
binlog_cache_size =4M
max_binlog_cache_size =8M
max_binlog_size =1024M

相关参数讲解

log-bin
决定了msyql 的binlog的名字,⽣成的binlog名字为mysql-bin.000001

binlog_format
规定binlog的格式, binlog有三种格式statement, row以及mixed,默认使⽤默认使⽤statement(5.7.7之前),建议使⽤row格式(5.7.7之后默认)

expire_logs_days
过期时间

binlog_do_db
此参数表示只记录指定数据库的⼆进制⽇志

binlog_ignore_db
此参数表示不记录指定的数据库的⼆进制⽇志

sync_binlog
在提交n次事务后,进⾏binlog的落盘, 0为不进⾏强⾏的刷新操作,⽽是由⽂件系统控制刷新⽇志⽂件
如果是在线交易和帐有关的数据建议设置成1, 如果是其它数据可以保持为0即可。

max_binlog_size
binlog⽂件的最⼤值,默认和最⼤是1GB,并不能严格限定⼆进制⽂件的⼤⼩

max_binlog_cache_size 表示的是binlog 能够使⽤的最⼤cache 内存⼤⼩
当我们执⾏多语句事务的时候 所有session的使⽤的内存超过max_binlog_cache_size的值时
就会报错: “Multi-statement transaction required more than 'max_binlog_cache_size' bytes ofstorage”

mysqlbinlog格式

statment格式
特点:记录每⼀条数据的SQL,将执⾏的每⼀条SQL记录在binlog中,减少⽇志量,节省IO,提⾼性能。
缺点:某些SQL中的函数⽆法使⽤,⽐如SYSDATE(),在同步过程中会出现⽆法同步的问题。
mixed格式
特点:⼀般的语句使⽤SQL语句来记录,遇到特殊的语句使⽤row格式来记录,保证数据的⼀致性和复制的准确性。
row格式
特点: binlog中仅仅记录哪⼀条记录被修改,不记录dml的sql语句,会详细记录每⼀行的更改细节,不会出现⽆法复制的问题。
缺点:因为要记录每⼀条修改记录的⽇志,所以⼤量占⽤磁盘IO和⼤量使⽤硬盘空间。

注:将二进制日志格式设置为ROW时,有些更改仍然使用基于语句的格式,包括所有DDL语句,例如CREATE TABLE, ALTER TABLE,或 DROP TABLE。

开启binlog

由于log_bin是个只读系统变量,不能动态的修改,只能再my.cnf里[mysqld]模块添加log-bin 配置,表示启用binlog,如果没有给定值,写成 log-bin=,则默认名称为主机名。(注:名称若带有小数点,则只取第一个小数点前的部分作为名称)

[mysqld]
log-bin=mysql-bin

此方法需要重启数据库方能生效,如果想临时关掉binlog而又不想重启数据库,可以使用sql_log_bin,sql_log_bin 是一个动态变量,修改该变量时,可以只对当前会话生效(Session),也可以是全局的(Global),当全局修改这个变量时,只会对新的会话生效(这意味当对当前会话也不会生效),因此一般全局修改了这个变量后,都要把原来的所有连接 kill 掉,全局只在MariaDB 5.5之前和MySQL 5.6.22之前生效,后面的版本都已经不支持全局,因为太危险了。
用处:
当还原数据库的时候,如果不关闭二进制日志,那么你还原的过程仍然会记录在二进制日志里面,不仅浪费资源,而且增加了磁盘的容量,还没有必要(特别是利用二进制还原数据库的时候)所以一般还原的时候会选择关闭二进制日志,可以通过修改配置文件,重启关闭二进制日志。
也可以动态命令关闭sql_log_bin,然后导入数据库。

set sql_log_bin=0;# 设为0后,在当前会话上执行的语句都不记录binlog
set sql_log_bin=1; # 取消限制

常用的binlog命令

# 是否启用binlog日志
show variables like 'log_bin'; # 查看详细的日志配置信息
show global variables like '%log%'; # 查看binlog的目录
show global variables like "%log_bin%"; # 查看当前服务器使用的biglog文件及大小
show binary logs; # 查看最新一个binlog日志文件名称和Position
show master status; # 清除所有的binlog⽂件,并且重置为⼀个
reset master

清理binlog日志

自动清理:
通过binlog参数(expire_logs_days )来实现mysql⾃动删除binlog

show binary logs;
show variables like 'expire_logs_days';
set global expire_logs_days=3; # 过期删除,单位是天

手动清理:

1、使⽤reset master 重置binlog⽂件(#reset master后,会造成slave⽆法找到master的严重后果)

2、直接rm本地删除binlog

# 查看正在使用的binlog
show master status;

直接使⽤rm 命令删除不是当前使⽤的binlog(切记不要删除正在使⽤的binlog)

mysqlbinlog命令

root@localhost localhost 15:23:43 (none)>show global variables like "%log_bin%";
+---------------------------------+-----------------------------+
| Variable_name | Value |
+---------------------------------+-----------------------------+
| log_bin | ON |
| log_bin_basename | /data/mysql/mysql-bin |
| log_bin_index | /data/mysql/mysql-bin.index |
| log_bin_trust_function_creators | ON |
| log_bin_use_v1_row_events | OFF |
+---------------------------------+-----------------------------+
5 rows in set (0.00 sec) root@localhost localhost 15:29:21 test1>show global variables like "binlog_format";
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| binlog_format | ROW |
+---------------+-------+
1 row in set (0.01 sec) root@localhost localhost 15:25:06 abc>create database test1;
Query OK, 1 row affected (0.00 sec) root@localhost localhost 15:25:28 abc>use test1;
Database changed
root@localhost localhost 15:25:34 test1>CREATE TABLE `abc` (
-> `id` int(11) NOT NULL AUTO_INCREMENT,
-> `c1` int(11) DEFAULT NULL,
-> PRIMARY KEY (`id`),
-> KEY `shouji` (`c1`) USING BTREE
-> ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.01 sec) root@localhost localhost 15:26:12 test1>insert into abc(c1) values (1);
Query OK, 1 row affected (0.13 sec) root@localhost localhost 15:26:23 test1>insert into abc(c1) values (2),(3);
Query OK, 2 rows affected (0.02 sec)
Records: 2 Duplicates: 0 Warnings: 0 root@localhost localhost 15:26:43 test1>delete from abc where id=2;
Query OK, 1 row affected (0.00 sec) root@localhost localhost 15:26:58 test1>select * from abc;
+----+------+
| id | c1 |
+----+------+
| 1 | 1 |
| 3 | 3 |
+----+------+
2 rows in set (0.00 sec)

root@localhost localhost 15:47:38 test1>show master status;
+------------------+----------+--------------+------------------+------------------------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+------------------------------------------+
| mysql-bin.000001 | 1361 | | | 0f943fa6-3117-11ea-a98d-005056b351ef:1-5 |
+------------------+----------+--------------+------------------+------------------------------------------+
1 row in set (0.00 sec)

root@localhost localhost 15:48:27 test1>show binlog events in 'mysql-bin.000001'\G;
*************************** 1. row ***************************
Log_name: mysql-bin.000001
Pos: 4
Event_type: Format_desc
Server_id: 1007231
End_log_pos: 123
Info: Server ver: 5.7.19-log, Binlog ver: 4
*************************** 2. row ***************************
Log_name: mysql-bin.000001
Pos: 123
Event_type: Previous_gtids
Server_id: 1007231
End_log_pos: 150
Info:
*************************** 3. row ***************************
Log_name: mysql-bin.000001
Pos: 150
Event_type: Gtid
Server_id: 1007231
End_log_pos: 211
Info: SET @@SESSION.GTID_NEXT= '0f943fa6-3117-11ea-a98d-005056b351ef:1'
*************************** 4. row ***************************
Log_name: mysql-bin.000001
Pos: 211
Event_type: Query
Server_id: 1007231
End_log_pos: 304
Info: create database test1
*************************** 5. row ***************************
Log_name: mysql-bin.000001
Pos: 304
Event_type: Gtid
Server_id: 1007231
End_log_pos: 365
Info: SET @@SESSION.GTID_NEXT= '0f943fa6-3117-11ea-a98d-005056b351ef:2'
*************************** 6. row ***************************
Log_name: mysql-bin.000001
Pos: 365
Event_type: Query
Server_id: 1007231
End_log_pos: 629
Info: use `test1`; CREATE TABLE `abc` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`c1` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `shouji` (`c1`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
*************************** 7. row ***************************
Log_name: mysql-bin.000001
Pos: 629
Event_type: Gtid
Server_id: 1007231
End_log_pos: 690
Info: SET @@SESSION.GTID_NEXT= '0f943fa6-3117-11ea-a98d-005056b351ef:3'
*************************** 8. row ***************************
Log_name: mysql-bin.000001
Pos: 690
Event_type: Query
Server_id: 1007231
End_log_pos: 759
Info: BEGIN
*************************** 9. row ***************************
Log_name: mysql-bin.000001
Pos: 759
Event_type: Table_map
Server_id: 1007231
End_log_pos: 803
Info: table_id: 220 (test1.abc)
*************************** 10. row ***************************
Log_name: mysql-bin.000001
Pos: 803
Event_type: Write_rows
Server_id: 1007231
End_log_pos: 843
Info: table_id: 220 flags: STMT_END_F
*************************** 11. row ***************************
Log_name: mysql-bin.000001
Pos: 843
Event_type: Xid
Server_id: 1007231
End_log_pos: 870
Info: COMMIT /* xid=52 */
*************************** 12. row ***************************
Log_name: mysql-bin.000001
Pos: 870
Event_type: Gtid
Server_id: 1007231
End_log_pos: 931
Info: SET @@SESSION.GTID_NEXT= '0f943fa6-3117-11ea-a98d-005056b351ef:4'
*************************** 13. row ***************************
Log_name: mysql-bin.000001
Pos: 931
Event_type: Query
Server_id: 1007231
End_log_pos: 1000
Info: BEGIN
*************************** 14. row ***************************
Log_name: mysql-bin.000001
Pos: 1000
Event_type: Table_map
Server_id: 1007231
End_log_pos: 1044
Info: table_id: 220 (test1.abc)
*************************** 15. row ***************************
Log_name: mysql-bin.000001
Pos: 1044
Event_type: Write_rows
Server_id: 1007231
End_log_pos: 1093
Info: table_id: 220 flags: STMT_END_F
*************************** 16. row ***************************
Log_name: mysql-bin.000001
Pos: 1093
Event_type: Xid
Server_id: 1007231
End_log_pos: 1120
Info: COMMIT /* xid=53 */
*************************** 17. row ***************************
Log_name: mysql-bin.000001
Pos: 1120
Event_type: Gtid
Server_id: 1007231
End_log_pos: 1181
Info: SET @@SESSION.GTID_NEXT= '0f943fa6-3117-11ea-a98d-005056b351ef:5'
*************************** 18. row ***************************
Log_name: mysql-bin.000001
Pos: 1181
Event_type: Query
Server_id: 1007231
End_log_pos: 1250
Info: BEGIN
*************************** 19. row ***************************
Log_name: mysql-bin.000001
Pos: 1250
Event_type: Table_map
Server_id: 1007231
End_log_pos: 1294
Info: table_id: 220 (test1.abc)
*************************** 20. row ***************************
Log_name: mysql-bin.000001
Pos: 1294
Event_type: Delete_rows
Server_id: 1007231
End_log_pos: 1334
Info: table_id: 220 flags: STMT_END_F
*************************** 21. row ***************************
Log_name: mysql-bin.000001
Pos: 1334
Event_type: Xid
Server_id: 1007231
End_log_pos: 1361
Info: COMMIT /* xid=54 */
21 rows in set (0.00 sec)

 

下面是mysqlbinlog命令的参数,摘自官方文档

选项名称 描述 引用 弃用
--base64-output 使用base-64编码打印二进制日志条目    
--bind-address 使用指定的网络接口连接到MySQL Server    
--binlog-row-event-max-size 二进制日志最大事件大小    
--character-sets-dir 字符集的安装目录    
--connection-server-id 用于测试和调试。有关适用的默认值和其他详细信息,请参见文本 5.7.5  
--database 仅列出该数据库的条目    
--debug 编写调试日志    
--debug-check 程序退出时打印调试信息    
--debug-info 程序退出时打印调试信息,内存和CPU统计信息    
--default-auth 身份验证插件使用    
--defaults-extra-file 除了通常的选项文件,还读取命名的选项文件    
--defaults-file 只读命名的选项文件    
--defaults-group-suffix 选项组后缀值    
--disable-log-bin 禁用二进制日志记录    
--exclude-gtids 不要显示提供的GTID集中的任何组    
--force-if-open 读取二进制日志文件,即使打开或未正确关闭    
--force-read 如果mysqlbinlog读取了无法识别的二进制日志事件,则会输出警告    
--get-server-public-key 从服务器请求RSA公钥 5.7.23  
--help 显示帮助信息并退出    
--hexdump 显示登录注释的十六进制转储    
--host MySQL服务器所在的主机    
--idempotent 仅在处理来自此会话的二进制日志更新时,导致服务器使用幂等模式 5.7.0  
--include-gtids 仅显示提供的GTID集中的组    
--local-load 在指定目录中为LOAD DATA准备本地临时文件    
--login-path 从.mylogin.cnf中读取登录路径选项    
--no-defaults 不读取选项文件    
--offset 跳过日志中的前N个条目    
open_files_limit 指定要保留的打开文件描述符的数量    
--password 连接服务器时使用的密码    
--plugin-dir 安装插件的目录    
--port 用于连接的TCP / IP端口号    
--print-defaults 打印默认选项    
--protocol 使用的连接协议    
--raw 将事件以原始(二进制)格式写入输出文件    
--read-from-remote-master 从MySQL主服务器读取二进制日志,而不是读取本地日志文件    
--read-from-remote-server 从MySQL服务器而不是本地日志文件中读取二进制日志    
--result-file 直接输出到命名文件    
--rewrite-db 从基于行的格式编写的日志中播放时,为数据库创建重写规则。可多次使用 5.7.1  
--secure-auth 不要以旧(4.1之前)格式向服务器发送密码 5.7.4 5.7.5
--server-id 仅提取由具有给定服务器ID的服务器创建的那些事件    
--server-id-bits 告诉mysqlbinlog当mysqld编写的server-id-bits设置为小于最大值时,如何解释二进制日志中的服务器ID;仅受MySQL Cluster版本的mysqlbinlog支持    
--server-public-key-path 包含RSA公钥的文件的路径名 5.7.23  
--set-charset 在输出中添加SET NAMES charset_name语句    
--shared-memory-base-name 用于共享内存连接的共享内存的名称    
--short-form 仅显示日志中包含的语句    
--skip-gtids 不要打印任何GTID。从包含GTID的二进制日志写入转储文件时使用此功能    
--socket Unix套接字文件或Windows命名管道使用    
--ssl 启用连接加密 5.7.3  
--ssl-ca 包含受信任的SSL证书颁发机构列表的文件 5.7.3  
--ssl-capath 包含受信任的SSL证书颁发机构证书文件的目录 5.7.3  
--ssl-cert 包含X.509证书的文件 5.7.3  
--ssl-cipher 连接加密的允许密码 5.7.3  
--ssl-crl 包含证书吊销列表的文件    
--ssl-crlpath 包含证书吊销列表文件的目录    
--ssl-key 包含X.509密钥的文件 5.7.3  
--ssl-mode 与服务器连接的所需安全状态 5.7.11  
--ssl-verify-server-cert 根据服务器证书的公用名身份验证主机名 5.7.3  
--start-datetime 从第一个事件中读取时间戳等于或晚于datetime参数的二进制日志    
--start-position 从位置等于或大于参数的第一个事件读取二进制日志    
--stop-datetime 在时间戳等于或大于datetime参数的第一个事件时停止读取二进制日志    
--stop-never 读取最后一个二进制日志文件后保持与服务器的连接    
--stop-never-slave-server-id 连接到服务器时要报告的从服务器ID    
--stop-position 在第一个事件中停止读取二进制日志,且位置等于或大于参数    
--tls-version 允许的TLS协议进行加密连接 5.7.10  
--to-last-log 不要在从MySQL服务器请求的二进制日志的结尾处停止,而要继续打印到最后一个二进制日志的结尾    
--user 连接服务器时要使用的MySQL用户名    
--verbose 将行事件重建为SQL语句    
--verify-binlog-checksum 验证二进制日志中的校验和    
[root@localhost mysql]# mysqlbinlog mysql-bin.000001 >/data/tmp/mysqlbinlog.sql
[root@localhost mysql]# cat /data/tmp/mysqlbinlog.sql
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#200107 15:45:15 server id 1007231 end_log_pos 123 Start: binlog v 4, server v 5.7.19-log created 200107 15:45:15 at startup
# Warning: this binlog is either in use or was not closed properly.
ROLLBACK/*!*/;
BINLOG '
CzcUXg9/Xg8AdwAAAHsAAAABAAQANS43LjE5LWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAALNxReEzgNAAgAEgAEBAQEEgAAXwAEGggAAAAICAgCAAAACgoKKioAEjQA
AEJXKj0=
'/*!*/;
# at 123
#200107 15:45:15 server id 1007231 end_log_pos 150 Previous-GTIDs
# [empty]
# at 150
#200107 15:45:53 server id 1007231 end_log_pos 211 GTID last_committed=0 sequence_number=1 rbr_only=no
SET @@SESSION.GTID_NEXT= '0f943fa6-3117-11ea-a98d-005056b351ef:1'/*!*/;
# at 211
#200107 15:45:53 server id 1007231 end_log_pos 304 Query thread_id=3 exec_time=0 error_code=0
SET TIMESTAMP=1578383153/*!*/;
SET @@session.pseudo_thread_id=3/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
SET @@session.sql_mode=1344274432/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C utf8mb4 *//*!*/;
SET @@session.character_set_client=224,@@session.collation_connection=224,@@session.collation_server=224/*!*/;
SET @@session.lc_time_names=0/*!*/;
SET @@session.collation_database=DEFAULT/*!*/;
create database test1
/*!*/;
# at 304
#200107 15:46:38 server id 1007231 end_log_pos 365 GTID last_committed=1 sequence_number=2 rbr_only=no
SET @@SESSION.GTID_NEXT= '0f943fa6-3117-11ea-a98d-005056b351ef:2'/*!*/;
# at 365
#200107 15:46:38 server id 1007231 end_log_pos 629 Query thread_id=3 exec_time=0 error_code=0
use `test1`/*!*/;
SET TIMESTAMP=1578383198/*!*/;
CREATE TABLE `abc` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`c1` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `shouji` (`c1`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
/*!*/;
# at 629
#200107 15:47:15 server id 1007231 end_log_pos 690 GTID last_committed=2 sequence_number=3 rbr_only=yes
/*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;
SET @@SESSION.GTID_NEXT= '0f943fa6-3117-11ea-a98d-005056b351ef:3'/*!*/;
# at 690
#200107 15:47:15 server id 1007231 end_log_pos 759 Query thread_id=3 exec_time=0 error_code=0
SET TIMESTAMP=1578383235/*!*/;
BEGIN
/*!*/;
# at 759
#200107 15:47:15 server id 1007231 end_log_pos 803 Table_map: `test1`.`abc` mapped to number 220
# at 803
#200107 15:47:15 server id 1007231 end_log_pos 843 Write_rows: table id 220 flags: STMT_END_F BINLOG '
gzcUXhN/Xg8ALAAAACMDAAAAANwAAAAAAAEABXRlc3QxAANhYmMAAgMDAAI=
gzcUXh5/Xg8AKAAAAEsDAAAAANwAAAAAAAEAAgAC//wBAAAAAQAAAA==
'/*!*/;
# at 843
#200107 15:47:15 server id 1007231 end_log_pos 870 Xid = 52
COMMIT/*!*/;
# at 870
#200107 15:47:23 server id 1007231 end_log_pos 931 GTID last_committed=3 sequence_number=4 rbr_only=yes
/*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;
SET @@SESSION.GTID_NEXT= '0f943fa6-3117-11ea-a98d-005056b351ef:4'/*!*/;
# at 931
#200107 15:47:23 server id 1007231 end_log_pos 1000 Query thread_id=3 exec_time=0 error_code=0
SET TIMESTAMP=1578383243/*!*/;
BEGIN
/*!*/;
# at 1000
#200107 15:47:23 server id 1007231 end_log_pos 1044 Table_map: `test1`.`abc` mapped to number 220
# at 1044
#200107 15:47:23 server id 1007231 end_log_pos 1093 Write_rows: table id 220 flags: STMT_END_F BINLOG '
izcUXhN/Xg8ALAAAABQEAAAAANwAAAAAAAEABXRlc3QxAANhYmMAAgMDAAI=
izcUXh5/Xg8AMQAAAEUEAAAAANwAAAAAAAEAAgAC//wCAAAAAgAAAPwDAAAAAwAAAA==
'/*!*/;
# at 1093
#200107 15:47:23 server id 1007231 end_log_pos 1120 Xid = 53
COMMIT/*!*/;
# at 1120
#200107 15:47:30 server id 1007231 end_log_pos 1181 GTID last_committed=4 sequence_number=5 rbr_only=yes
/*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;
SET @@SESSION.GTID_NEXT= '0f943fa6-3117-11ea-a98d-005056b351ef:5'/*!*/;
# at 1181
#200107 15:47:30 server id 1007231 end_log_pos 1250 Query thread_id=3 exec_time=0 error_code=0
SET TIMESTAMP=1578383250/*!*/;
BEGIN
/*!*/;
# at 1250
#200107 15:47:30 server id 1007231 end_log_pos 1294 Table_map: `test1`.`abc` mapped to number 220
# at 1294
#200107 15:47:30 server id 1007231 end_log_pos 1334 Delete_rows: table id 220 flags: STMT_END_F BINLOG '
kjcUXhN/Xg8ALAAAAA4FAAAAANwAAAAAAAEABXRlc3QxAANhYmMAAgMDAAI=
kjcUXiB/Xg8AKAAAADYFAAAAANwAAAAAAAEAAgAC//wCAAAAAgAAAA==
'/*!*/;
# at 1334
#200107 15:47:30 server id 1007231 end_log_pos 1361 Xid = 54
COMMIT/*!*/;
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*/;

发现有很多base64编码的BINLOG语句,比如

BINLOG '
CzcUXg9/Xg8AdwAAAHsAAAABAAQANS43LjE5LWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAALNxReEzgNAAgAEgAEBAQEEgAAXwAEGggAAAAICAgCAAAACgoKKioAEjQA
AEJXKj0=
'/*!*/;
这样的,这就需要加上--base64-output=DECODE-ROWS --verbose来解成一个sql语句。
[root@localhost mysql]# mysqlbinlog --base64-output=DECODE-ROWS -v mysql-bin.000001 >/data/tmp/mysqlbinlog2.sql
[root@localhost mysql]# cat /data/tmp/mysqlbinlog2.sql
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#200107 15:45:15 server id 1007231 end_log_pos 123 Start: binlog v 4, server v 5.7.19-log created 200107 15:45:15 at startup
# Warning: this binlog is either in use or was not closed properly.
ROLLBACK/*!*/;
# at 123
#200107 15:45:15 server id 1007231 end_log_pos 150 Previous-GTIDs
# [empty]
# at 150
#200107 15:45:53 server id 1007231 end_log_pos 211 GTID last_committed=0 sequence_number=1 rbr_only=no
SET @@SESSION.GTID_NEXT= '0f943fa6-3117-11ea-a98d-005056b351ef:1'/*!*/;
# at 211
#200107 15:45:53 server id 1007231 end_log_pos 304 Query thread_id=3 exec_time=0 error_code=0
SET TIMESTAMP=1578383153/*!*/;
SET @@session.pseudo_thread_id=3/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
SET @@session.sql_mode=1344274432/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C utf8mb4 *//*!*/;
SET @@session.character_set_client=224,@@session.collation_connection=224,@@session.collation_server=224/*!*/;
SET @@session.lc_time_names=0/*!*/;
SET @@session.collation_database=DEFAULT/*!*/;
create database test1
/*!*/;
# at 304
#200107 15:46:38 server id 1007231 end_log_pos 365 GTID last_committed=1 sequence_number=2 rbr_only=no
SET @@SESSION.GTID_NEXT= '0f943fa6-3117-11ea-a98d-005056b351ef:2'/*!*/;
# at 365
#200107 15:46:38 server id 1007231 end_log_pos 629 Query thread_id=3 exec_time=0 error_code=0
use `test1`/*!*/;
SET TIMESTAMP=1578383198/*!*/;
CREATE TABLE `abc` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`c1` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `shouji` (`c1`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
/*!*/;
# at 629
#200107 15:47:15 server id 1007231 end_log_pos 690 GTID last_committed=2 sequence_number=3 rbr_only=yes
/*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;
SET @@SESSION.GTID_NEXT= '0f943fa6-3117-11ea-a98d-005056b351ef:3'/*!*/;
# at 690
#200107 15:47:15 server id 1007231 end_log_pos 759 Query thread_id=3 exec_time=0 error_code=0
SET TIMESTAMP=1578383235/*!*/;
BEGIN
/*!*/;
# at 759
#200107 15:47:15 server id 1007231 end_log_pos 803 Table_map: `test1`.`abc` mapped to number 220
# at 803
#200107 15:47:15 server id 1007231 end_log_pos 843 Write_rows: table id 220 flags: STMT_END_F
### INSERT INTO `test1`.`abc`
### SET
### @1=1
### @2=1
# at 843
#200107 15:47:15 server id 1007231 end_log_pos 870 Xid = 52
COMMIT/*!*/;
# at 870
#200107 15:47:23 server id 1007231 end_log_pos 931 GTID last_committed=3 sequence_number=4 rbr_only=yes
/*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;
SET @@SESSION.GTID_NEXT= '0f943fa6-3117-11ea-a98d-005056b351ef:4'/*!*/;
# at 931
#200107 15:47:23 server id 1007231 end_log_pos 1000 Query thread_id=3 exec_time=0 error_code=0
SET TIMESTAMP=1578383243/*!*/;
BEGIN
/*!*/;
# at 1000
#200107 15:47:23 server id 1007231 end_log_pos 1044 Table_map: `test1`.`abc` mapped to number 220
# at 1044
#200107 15:47:23 server id 1007231 end_log_pos 1093 Write_rows: table id 220 flags: STMT_END_F
### INSERT INTO `test1`.`abc`
### SET
### @1=2
### @2=2
### INSERT INTO `test1`.`abc`
### SET
### @1=3
### @2=3
# at 1093
#200107 15:47:23 server id 1007231 end_log_pos 1120 Xid = 53
COMMIT/*!*/;
# at 1120
#200107 15:47:30 server id 1007231 end_log_pos 1181 GTID last_committed=4 sequence_number=5 rbr_only=yes
/*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;
SET @@SESSION.GTID_NEXT= '0f943fa6-3117-11ea-a98d-005056b351ef:5'/*!*/;
# at 1181
#200107 15:47:30 server id 1007231 end_log_pos 1250 Query thread_id=3 exec_time=0 error_code=0
SET TIMESTAMP=1578383250/*!*/;
BEGIN
/*!*/;
# at 1250
#200107 15:47:30 server id 1007231 end_log_pos 1294 Table_map: `test1`.`abc` mapped to number 220
# at 1294
#200107 15:47:30 server id 1007231 end_log_pos 1334 Delete_rows: table id 220 flags: STMT_END_F
### DELETE FROM `test1`.`abc`
### WHERE
### @1=2
### @2=2
# at 1334
#200107 15:47:30 server id 1007231 end_log_pos 1361 Xid = 54
COMMIT/*!*/;
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*/;

这样就能看出来具体的sql了。

还可以根据时间来筛选语句:

[root@localhost mysql]# mysqlbinlog --base64-output=DECODE-ROWS -v --start-datetime="2020-01-07 15:47:14" --stop-datetime="2020-01-07 15:47:24" mysql-bin.000001 >/data/tmp/mysqlbinlog3.sql
[root@localhost mysql]# cat /data/tmp/mysqlbinlog3.sql
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#200107 15:45:15 server id 1007231 end_log_pos 123 Start: binlog v 4, server v 5.7.19-log created 200107 15:45:15 at startup
# Warning: this binlog is either in use or was not closed properly.
ROLLBACK/*!*/;
# at 629
#200107 15:47:15 server id 1007231 end_log_pos 690 GTID last_committed=2 sequence_number=3 rbr_only=yes
/*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;
SET @@SESSION.GTID_NEXT= '0f943fa6-3117-11ea-a98d-005056b351ef:3'/*!*/;
# at 690
#200107 15:47:15 server id 1007231 end_log_pos 759 Query thread_id=3 exec_time=0 error_code=0
SET TIMESTAMP=1578383235/*!*/;
SET @@session.pseudo_thread_id=3/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
SET @@session.sql_mode=1344274432/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C utf8mb4 *//*!*/;
SET @@session.character_set_client=224,@@session.collation_connection=224,@@session.collation_server=224/*!*/;
SET @@session.lc_time_names=0/*!*/;
SET @@session.collation_database=DEFAULT/*!*/;
BEGIN
/*!*/;
# at 759
#200107 15:47:15 server id 1007231 end_log_pos 803 Table_map: `test1`.`abc` mapped to number 220
# at 803
#200107 15:47:15 server id 1007231 end_log_pos 843 Write_rows: table id 220 flags: STMT_END_F
### INSERT INTO `test1`.`abc`
### SET
### @1=1
### @2=1
# at 843
#200107 15:47:15 server id 1007231 end_log_pos 870 Xid = 52
COMMIT/*!*/;
# at 870
#200107 15:47:23 server id 1007231 end_log_pos 931 GTID last_committed=3 sequence_number=4 rbr_only=yes
/*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;
SET @@SESSION.GTID_NEXT= '0f943fa6-3117-11ea-a98d-005056b351ef:4'/*!*/;
# at 931
#200107 15:47:23 server id 1007231 end_log_pos 1000 Query thread_id=3 exec_time=0 error_code=0
SET TIMESTAMP=1578383243/*!*/;
BEGIN
/*!*/;
# at 1000
#200107 15:47:23 server id 1007231 end_log_pos 1044 Table_map: `test1`.`abc` mapped to number 220
# at 1044
#200107 15:47:23 server id 1007231 end_log_pos 1093 Write_rows: table id 220 flags: STMT_END_F
### INSERT INTO `test1`.`abc`
### SET
### @1=2
### @2=2
### INSERT INTO `test1`.`abc`
### SET
### @1=3
### @2=3
# at 1093
#200107 15:47:23 server id 1007231 end_log_pos 1120 Xid = 53
COMMIT/*!*/;
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*/;

根据位置筛选,比我我们上面用show binlog events in 'mysql-bin.000001'\G;看到的有条删除类型的语句

*************************** 20. row ***************************
Log_name: mysql-bin.000001
Pos: 1294
Event_type: Delete_rows
Server_id: 1007231
End_log_pos: 1334
Info: table_id: 220 flags: STMT_END_F
[root@localhost mysql]# mysqlbinlog --base64-output=DECODE-ROWS -v  --stop-position="1334" mysql-bin.000001 >/data/tmp/mysqlbinlog4.sql

You have new mail in /var/spool/mail/root
[root@localhost mysql]# cat /data/tmp/mysqlbinlog4.sql
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#200107 15:45:15 server id 1007231 end_log_pos 123 Start: binlog v 4, server v 5.7.19-log created 200107 15:45:15 at startup
# Warning: this binlog is either in use or was not closed properly.
ROLLBACK/*!*/;
# at 123
#200107 15:45:15 server id 1007231 end_log_pos 150 Previous-GTIDs
# [empty]
# at 150
#200107 15:45:53 server id 1007231 end_log_pos 211 GTID last_committed=0 sequence_number=1 rbr_only=no
SET @@SESSION.GTID_NEXT= '0f943fa6-3117-11ea-a98d-005056b351ef:1'/*!*/;
# at 211
#200107 15:45:53 server id 1007231 end_log_pos 304 Query thread_id=3 exec_time=0 error_code=0
SET TIMESTAMP=1578383153/*!*/;
SET @@session.pseudo_thread_id=3/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
SET @@session.sql_mode=1344274432/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C utf8mb4 *//*!*/;
SET @@session.character_set_client=224,@@session.collation_connection=224,@@session.collation_server=224/*!*/;
SET @@session.lc_time_names=0/*!*/;
SET @@session.collation_database=DEFAULT/*!*/;
create database test1
/*!*/;
# at 304
#200107 15:46:38 server id 1007231 end_log_pos 365 GTID last_committed=1 sequence_number=2 rbr_only=no
SET @@SESSION.GTID_NEXT= '0f943fa6-3117-11ea-a98d-005056b351ef:2'/*!*/;
# at 365
#200107 15:46:38 server id 1007231 end_log_pos 629 Query thread_id=3 exec_time=0 error_code=0
use `test1`/*!*/;
SET TIMESTAMP=1578383198/*!*/;
CREATE TABLE `abc` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`c1` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `shouji` (`c1`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
/*!*/;
# at 629
#200107 15:47:15 server id 1007231 end_log_pos 690 GTID last_committed=2 sequence_number=3 rbr_only=yes
/*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;
SET @@SESSION.GTID_NEXT= '0f943fa6-3117-11ea-a98d-005056b351ef:3'/*!*/;
# at 690
#200107 15:47:15 server id 1007231 end_log_pos 759 Query thread_id=3 exec_time=0 error_code=0
SET TIMESTAMP=1578383235/*!*/;
BEGIN
/*!*/;
# at 759
#200107 15:47:15 server id 1007231 end_log_pos 803 Table_map: `test1`.`abc` mapped to number 220
# at 803
#200107 15:47:15 server id 1007231 end_log_pos 843 Write_rows: table id 220 flags: STMT_END_F
### INSERT INTO `test1`.`abc`
### SET
### @1=1
### @2=1
# at 843
#200107 15:47:15 server id 1007231 end_log_pos 870 Xid = 52
COMMIT/*!*/;
# at 870
#200107 15:47:23 server id 1007231 end_log_pos 931 GTID last_committed=3 sequence_number=4 rbr_only=yes
/*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;
SET @@SESSION.GTID_NEXT= '0f943fa6-3117-11ea-a98d-005056b351ef:4'/*!*/;
# at 931
#200107 15:47:23 server id 1007231 end_log_pos 1000 Query thread_id=3 exec_time=0 error_code=0
SET TIMESTAMP=1578383243/*!*/;
BEGIN
/*!*/;
# at 1000
#200107 15:47:23 server id 1007231 end_log_pos 1044 Table_map: `test1`.`abc` mapped to number 220
# at 1044
#200107 15:47:23 server id 1007231 end_log_pos 1093 Write_rows: table id 220 flags: STMT_END_F
### INSERT INTO `test1`.`abc`
### SET
### @1=2
### @2=2
### INSERT INTO `test1`.`abc`
### SET
### @1=3
### @2=3
# at 1093
#200107 15:47:23 server id 1007231 end_log_pos 1120 Xid = 53
COMMIT/*!*/;
# at 1120
#200107 15:47:30 server id 1007231 end_log_pos 1181 GTID last_committed=4 sequence_number=5 rbr_only=yes
/*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;
SET @@SESSION.GTID_NEXT= '0f943fa6-3117-11ea-a98d-005056b351ef:5'/*!*/;
# at 1181
#200107 15:47:30 server id 1007231 end_log_pos 1250 Query thread_id=3 exec_time=0 error_code=0
SET TIMESTAMP=1578383250/*!*/;
BEGIN
/*!*/;
# at 1250
#200107 15:47:30 server id 1007231 end_log_pos 1294 Table_map: `test1`.`abc` mapped to number 220
# at 1294
#200107 15:47:30 server id 1007231 end_log_pos 1334 Delete_rows: table id 220 flags: STMT_END_F
### DELETE FROM `test1`.`abc`
### WHERE
### @1=2
### @2=2
ROLLBACK /* added by mysqlbinlog */ /*!*/;
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*/;

其他选项可以根据需求添加使用。

 

Mysql的binlog日志与mysqlbinlog命令的更多相关文章

  1. 解说mysql之binlog日志以及利用binlog日志恢复数据

    众所周知,binlog日志对于mysql数据库来说是十分重要的.在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全备份+binlog日志恢复增量数据部分),化险为夷! 废 ...

  2. Mysql之binlog日志说明及利用binlog日志恢复数据操作记录

    众所周知,binlog日志对于mysql数据库来说是十分重要的.在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全备份+binlog日志恢复增量数据部分),化险为夷! 一 ...

  3. Mysql利用binlog日志恢复数据操作(转)

    a.开启binlog日志:1)编辑打开mysql配置文件/etc/mys.cnf[root@vm-002 ~]# vim /etc/my.cnf在[mysqld] 区块添加 log-bin=mysql ...

  4. 【转】Mysql之binlog日志说明及利用binlog日志恢复数据操作记录

    众所周知,binlog日志对于mysql数据库来说是十分重要的.在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全备份+binlog日志恢复增量数据部分),化险为夷! 废 ...

  5. MySQL二进制binlog日志说明以及利用binlog日志恢复数据

    MySQL的binlog日志对于mysql数据库来说是十分重要的.在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全量备份+binlog日志恢复增量数据部分). 一.关于 ...

  6. mysql 开启binlog日志,恢复误删的表、数据、mysql库

    linux下开启mysql的binlog日志功能 1.配置mysql配置文件my.cnf(内容如下). #配置文件储存的位置log-bin=mysql-bin#5.7以及以上版本需要配置这一行(保证唯 ...

  7. mysql通过binlog日志来恢复数据

    简介 在生产的过程中有这么一个业务场景:比如我在2016-11-19 09:30:00 通过mysqldump的方式备份了数据库,但是在2016-11-19 10:30:00的时候数据库崩溃了,如果通 ...

  8. 20180530利用Maxwell组件实时监听Mysql的binlog日志

    转自:https://blog.csdn.net/qq_30921461/article/details/78320750 http://kafka.apache.org/quickstart htt ...

  9. mysql将bin-log日志文件转为sql文件

    查看mysqlbinlog版本 mysqlbinlog -V [--version] 查看binlog日志开启状态 show variables like '%log_bin%'; mysql打开bi ...

随机推荐

  1. C# 在 8.0 对比 string 和 string? 的类型

    在 C# 8.0 的时候提供了可空字符串的判断,但是可空字符串和字符串的类型是不是不同的? 打开 VisualStudio 2019 这时就不能再使用 VisualStudio 2017 因为不支持 ...

  2. 随机抽样 (numpy.random)

    随机抽样 (numpy.random) 简单的随机数据 rand(d0, d1, ..., dn) 随机值 >>> np.random.rand(3,2) array([[ 0.14 ...

  3. Less 语法快速入门

    Less 语法快速入门 Less 是一门 CSS 预处理语言其可以运行在 Node 或浏览器端. 它将传统的 css 样式结构单一的排版顺序进行了优化,让我们可以通过层级嵌套的方式将 css 类名与H ...

  4. 【31.95%】【CF 714B】Filya and Homework

    time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...

  5. linux PCI 寻址

    每个 PCI 外设有一个总线号, 一个设备号, 一个功能号标识. PCI 规范允许单个系统占 用多达 256 个总线, 但是因为 256 个总线对许多大系统是不够的, Linux 现在支持 PCI 域 ...

  6. BZOJ 3166

    BZOJ3196: Tyvj 1730 二逼平衡树 传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=3196 题意: 1.查询k在区间内的排名 ...

  7. HDU4528 小明捉迷藏 [搜索-BFS]

    一.题意 小明S在迷宫n*m中找大明D和二明E,障碍物X不能走,问你计算是否能在时间t内找到大明和二明 二.分析 2.1与普通的BFS不同,这里可以走回头路,这里应该建立四维的标记数组标记数组,例如v ...

  8. Java核心技术·卷 II(原书第10版)分享下载

    Java核心技术·卷 II 内容介绍 Java领域最有影响力和价值的著作之一,由拥有20多年教学与研究经验的资深Java技术专家撰写(获Jolt大奖),与<Java编程思想>齐名,10余年 ...

  9. [Vue源码]一起来学Vue模板编译原理(一)-Template生成AST

    本文我们一起通过学习Vue模板编译原理(一)-Template生成AST来分析Vue源码.预计接下来会围绕Vue源码来整理一些文章,如下. 一起来学Vue双向绑定原理-数据劫持和发布订阅 一起来学Vu ...

  10. 多线程之美8一 AbstractQueuedSynchronizer源码分析<二>

    目录 AQS的源码分析 该篇主要分析AQS的ConditionObject,是AQS的内部类,实现等待通知机制. 1.条件队列 条件队列与AQS中的同步队列有所不同,结构图如下: 两者区别: 1.链表 ...