Mysql的binlog日志与mysqlbinlog命令
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命令的更多相关文章
- 解说mysql之binlog日志以及利用binlog日志恢复数据
众所周知,binlog日志对于mysql数据库来说是十分重要的.在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全备份+binlog日志恢复增量数据部分),化险为夷! 废 ...
- Mysql之binlog日志说明及利用binlog日志恢复数据操作记录
众所周知,binlog日志对于mysql数据库来说是十分重要的.在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全备份+binlog日志恢复增量数据部分),化险为夷! 一 ...
- Mysql利用binlog日志恢复数据操作(转)
a.开启binlog日志:1)编辑打开mysql配置文件/etc/mys.cnf[root@vm-002 ~]# vim /etc/my.cnf在[mysqld] 区块添加 log-bin=mysql ...
- 【转】Mysql之binlog日志说明及利用binlog日志恢复数据操作记录
众所周知,binlog日志对于mysql数据库来说是十分重要的.在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全备份+binlog日志恢复增量数据部分),化险为夷! 废 ...
- MySQL二进制binlog日志说明以及利用binlog日志恢复数据
MySQL的binlog日志对于mysql数据库来说是十分重要的.在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全量备份+binlog日志恢复增量数据部分). 一.关于 ...
- mysql 开启binlog日志,恢复误删的表、数据、mysql库
linux下开启mysql的binlog日志功能 1.配置mysql配置文件my.cnf(内容如下). #配置文件储存的位置log-bin=mysql-bin#5.7以及以上版本需要配置这一行(保证唯 ...
- mysql通过binlog日志来恢复数据
简介 在生产的过程中有这么一个业务场景:比如我在2016-11-19 09:30:00 通过mysqldump的方式备份了数据库,但是在2016-11-19 10:30:00的时候数据库崩溃了,如果通 ...
- 20180530利用Maxwell组件实时监听Mysql的binlog日志
转自:https://blog.csdn.net/qq_30921461/article/details/78320750 http://kafka.apache.org/quickstart htt ...
- mysql将bin-log日志文件转为sql文件
查看mysqlbinlog版本 mysqlbinlog -V [--version] 查看binlog日志开启状态 show variables like '%log_bin%'; mysql打开bi ...
随机推荐
- H3C RIP路由表的初始化
- [转载]sublime用法精华
Sublime Text 全程指南 九月 03.2015. 暂无评论 永远站 作者:Lucida 原文链接:http://lucida.me/blog/sublime-text-complete-gu ...
- 基于vs2015 SignalR开发的微信小程序使用websocket实现聊天功能
一)前言 在微信小程上实现聊天功能,大致有三种方式:1)小程序云开发 2)购买第三方IM服务 3)使用自己的服务器自己开发. 这里重要讲使用自己的服务器自己开发,并且是基于vs的开发. 网上提供的解决 ...
- kali机获取不到ip地址解决
一.方法一 重启网卡:/etc/init.d/networking restart 重启kali:reboot 二.方法二 更改网络适配器:虚拟机-可移动设备-网络适配器设置-选择“桥接模式:直接连接 ...
- Visioi形状相关应用
选择手柄为白点 按住shift的同时移动白点更为灵活 黄色的点就是控制手柄(只有一维图形有) 当调整形状出现绿色边的时候说明:这个时候这个形状的边等于了某个形状的长 铅笔工具可以移动控制点来更形状 ...
- 6.ChannelPipeline
pipeline和handler ChannelPipline ChannelHandler ChannelHandlerContext pipeline的初始化 handler的添加和删除 hand ...
- http、https、SSL、TLS的区别
一.HTTP和HTTPS之间的区别 HTTP是一种协议,全称叫作:超文本传输协议(HTTP,HyperText Transfer Protocol),是互联网上应用最为广泛的一种网络协议.所有的WWW ...
- 20191121-4 Final发布用户使用报告
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2019fall/homework/10064 队名:组长 组长:杨天宇 组员:罗杨美慧,王歆瑶,魏鑫,梅小雨 ...
- 用c++ 给易语言写支持库学习记录
废话我就不对说 直接开始 易语言官方下载的易语言安装路径下 有一个SDK文件夹 我们点进入cpp文件夹里面提供是c++的SDK elib文件夹里就是sdk 我们新建一个win32项目 这里我用的是VS ...
- 【题解】P4755 Beautiful Pair(启发式合并的思路+分治=启发式分治)
[题解]P4755 Beautiful Pair upd: 之前一个first second烦了,现在AC了 由于之前是直接抄std写的,所以没有什么心得体会,今天自己写写发现 不知道为啥\(90\) ...