mysql查看binlog日志详解

1. 查看binlog日志是否开启

mysql默认是不开启binlog日志的,需要手动打开

mysql> show variables like 'log_%';
+----------------------------------------+-------------------------------------------------+
| Variable_name                          | Value                                           |
+----------------------------------------+-------------------------------------------------+
| log_bin                                | OFF                                             |
| log_bin_basename                       |                                                 |
| log_bin_index                          |                                                 |
| log_bin_trust_function_creators        | OFF                                             |
| log_bin_use_v1_row_events              | OFF                                             |
| log_builtin_as_identified_by_password  | OFF                                             |
| log_error                              | C:\Program Files\mysql\data\DESKTOP-7MV7HDB.err |
| log_error_verbosity                    | 3                                               |
| log_output                             | FILE                                            |
| log_queries_not_using_indexes          | OFF                                             |
| log_slave_updates                      | OFF                                             |
| log_slow_admin_statements              | OFF                                             |
| log_slow_slave_statements              | OFF                                             |
| log_statements_unsafe_for_binlog       | ON                                              |
| log_syslog                             | ON                                              |
| log_syslog_tag                         |                                                 |
| log_throttle_queries_not_using_indexes | 0                                               |
| log_timestamps                         | UTC                                             |
| log_warnings                           | 2                                               |
+----------------------------------------+-------------------------------------------------+
19 rows in set, 1 warning (0.02 sec)

可以看到log.bin日志为OFF并没有开启

2. 开启binlog日志

Linux找到my.cnf配置文件
windows找到my.ini配置文件
修改其中的内容

#第一种方式:
#开启binlog日志
log_bin=ON
#binlog日志的基本文件名
log_bin_basename=/var/lib/mysql/mysql-bin
#binlog文件的索引文件,管理所有binlog文件
log_bin_index=/var/lib/mysql/mysql-bin.index
#配置serverid
server-id=1

#第二种方式:
#此一行等同于上面log_bin三行
log-bin=/var/lib/mysql/mysql-bin
#配置serverid
server-id=1

修改完后重新启动mysql

linux:service mysqld restart
windows:服务->mysql->右键重新启动

执行完后再次查看binlog

mysql> show variables like 'log_%';
+----------------------------------------+-------------------------------------------------+
| Variable_name                          | Value                                           |
+----------------------------------------+-------------------------------------------------+
| log_bin                                | ON                                              |
| log_bin_basename                       | D:\data\mysql\mysql-bin                         |
| log_bin_index                          | D:\data\mysql\mysql-bin.index                   |
| log_bin_trust_function_creators        | OFF                                             |
| log_bin_use_v1_row_events              | OFF                                             |
| log_builtin_as_identified_by_password  | OFF                                             |
| log_error                              | C:\Program Files\mysql\data\DESKTOP-7MV7HDB.err |
| log_error_verbosity                    | 3                                               |
| log_output                             | FILE                                            |
| log_queries_not_using_indexes          | OFF                                             |
| log_slave_updates                      | OFF                                             |
| log_slow_admin_statements              | OFF                                             |
| log_slow_slave_statements              | OFF                                             |
| log_statements_unsafe_for_binlog       | ON                                              |
| log_syslog                             | ON                                              |
| log_syslog_tag                         |                                                 |
| log_throttle_queries_not_using_indexes | 0                                               |
| log_timestamps                         | UTC                                             |
| log_warnings                           | 2                                               |
+----------------------------------------+-------------------------------------------------+
19 rows in set, 1 warning (0.00 sec)

D:\data\mysql即是binlog日志存放的目录

3. 操作数据库,查看效果

3.1 查看当前正在写入的binlog文件
mysql> show master status\G
*************************** 1. row ***************************
             File: mysql-bin.000001
         Position: 382
     Binlog_Do_DB: 
 Binlog_Ignore_DB: 
Executed_Gtid_Set: 
1 row in set (0.00 sec)
3.2 查看指定binlog文件的内容

这里做了个测试,感觉linux展示的效果比windows的要好,不知道原因,希望有大佬不吝赐教

#linux环境
mysql> mysql> show binlog events in 'mysql-bin.000001';
+------------------+-----+-------------+-----------+-------------+--------------------------------------------------------------------------+
| Log_name         | Pos | Event_type  | Server_id | End_log_pos | Info                                                                     |
+------------------+-----+-------------+-----------+-------------+--------------------------------------------------------------------------+
| mysql-bin.000001 |   4 | Format_desc |         1 |         120 | Server ver: 5.6.45-log, Binlog ver: 4                                    |
| mysql-bin.000001 | 120 | Query       |         1 |         211 | BEGIN                                                                    |
| mysql-bin.000001 | 211 | Query       |         1 |         351 | use `usercenter`; DELETE FROM `usercenter`.`sms_vercode` WHERE `id` = 36 |
| mysql-bin.000001 | 351 | Xid         |         1 |         382 | COMMIT /* xid=48 */                                                      |
+------------------+-----+-------------+-----------+-------------+--------------------------------------------------------------------------+
#windows环境
mysql> show binlog events in 'mysql-bin.000001';
+------------------+-----+----------------+-----------+-------------+---------------------------------------+
| Log_name         | Pos | Event_type     | Server_id | End_log_pos | Info                                  |
+------------------+-----+----------------+-----------+-------------+---------------------------------------+
| mysql-bin.000001 |   4 | Format_desc    |         1 |         123 | Server ver: 5.7.23-log, Binlog ver: 4 |
| mysql-bin.000001 | 123 | Previous_gtids |         1 |         154 |                                       |
| mysql-bin.000001 | 154 | Anonymous_Gtid |         1 |         219 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'  |
| mysql-bin.000001 | 219 | Query          |         1 |         291 | BEGIN                                 |
| mysql-bin.000001 | 291 | Table_map      |         1 |         358 | table_id: 109 (test.student)          |
| mysql-bin.000001 | 358 | Update_rows    |         1 |         532 | table_id: 109 flags: STMT_END_F       |
| mysql-bin.000001 | 532 | Xid            |         1 |         563 | COMMIT /* xid=29 */                   |
| mysql-bin.000001 | 563 | Anonymous_Gtid |         1 |         628 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'  |
| mysql-bin.000001 | 628 | Query          |         1 |         700 | BEGIN                                 |
| mysql-bin.000001 | 700 | Table_map      |         1 |         767 | table_id: 109 (test.student)          |
| mysql-bin.000001 | 767 | Update_rows    |         1 |         941 | table_id: 109 flags: STMT_END_F       |
| mysql-bin.000001 | 941 | Xid            |         1 |         972 | COMMIT /* xid=45 */                   |
+------------------+-----+----------------+-----------+-------------+---------------------------------------+
12 rows in set (0.01 sec)
3.3 用mysqlbinlog工具查看

直接使用

#linux环境
/usr/bin/mysqlbinlog /var/lib/mysql/mysql-bin.000001
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#200904 15:59:30 server id 1  end_log_pos 120 CRC32 0x13ff3b26  Start: binlog v 4, server v 5.6.45-log created 200904 15:59:30 at startup
# Warning: this binlog is either in use or was not closed properly.
ROLLBACK/*!*/;
BINLOG '
4vNRXw8BAAAAdAAAAHgAAAABAAQANS42LjQ1LWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAADi81FfEzgNAAgAEgAEBAQEEgAAXAAEGggAAAAICAgCAAAACgoKGRkAASY7
/xM=
'/*!*/;
# at 120
#200904 16:24:21 server id 1  end_log_pos 211 CRC32 0xd1be92c3  Query   thread_id=4     exec_time=0     error_code=0
SET TIMESTAMP=1599207861/*!*/;
SET @@session.pseudo_thread_id=4/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
SET @@session.sql_mode=1075838976/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C utf8mb4 *//*!*/;
SET @@session.character_set_client=45,@@session.collation_connection=45,@@session.collation_server=8/*!*/;
SET @@session.lc_time_names=0/*!*/;
SET @@session.collation_database=DEFAULT/*!*/;
BEGIN
/*!*/;
# at 211
#200904 16:24:21 server id 1  end_log_pos 351 CRC32 0xf46910bb  Query   thread_id=4     exec_time=0     error_code=0
use `usercenter`/*!*/;
SET TIMESTAMP=1599207861/*!*/;
DELETE FROM `usercenter`.`sms_vercode` WHERE `id` = 36
/*!*/;
# at 351
#200904 16:24:21 server id 1  end_log_pos 382 CRC32 0x238a94fc  Xid = 48
COMMIT/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;

注:上面的BINLOG的部分看不懂,因为是Base64编码后的,所以中间加上--base64-output=decode-rows -v命令就能展示出来sql了
(base64-output,可以控制输出语句输出base64编码的BINLOG语句;decode-rows:选项将把基于行的事件解码成一个SQL语句)
-r, --result-file=name 将输入的文本格式的文件转储到指定的文件。

windows环境下执行这个命令报错

C:\Program Files\mysql\bin> mysqlbinlog D:\data\mysql\mysql-bin.000001;
mysqlbinlog: [ERROR] unknown variable 'default-character-set=utf8'

原因是mysqlbinlog这个工具无法识别binlog中的配置中的default-character-set=utf8这个指令。

解决方法1:my.cnf(my.ini)中将default-character-set=utf8 修改为 character-set-server = utf8 修改完后要重启mysql
解决方法2:用mysqlbinlog --no-defaults D:\data\mysql\mysql-bin.000001打开
解决方法3:原来是我的my.ini文件中有两个设置默认字符集的,删掉一个即可

[client]
port=3306
#干掉这个或者下面那个
default-character-set=utf8


[mysqld]

port=3306
character_set_server=utf8

最后执行后的结果跟linux下的差不多,就不粘结果了

基于开始/结束时间查看

/usr/bin/mysqlbinlog --start-datetime="2020-09-04 16:00:00" --stop-datetime="2020-09-04 18:00:00" /var/lib/mysql/mysql-bin.000001
3.4 解析binlog格式
BEGIN
/*!*/;
# at 211
#200904 16:24:21 server id 1  end_log_pos 351 CRC32 0xf46910bb  Query   thread_id=4     exec_time=0     error_code=0
use `usercenter`/*!*/;
SET TIMESTAMP=1599207861/*!*/;
DELETE FROM `usercenter`.`sms_vercode` WHERE `id` = 36
/*!*/;
# at 351
#200904 16:24:21 server id 1  end_log_pos 382 CRC32 0x238a94fc  Xid = 48
COMMIT/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
  • at 351:说明"事务"的起点,是以第211字节开始的
  • end_log_pos 382:说明以第282字节结束
  • 200904 16:24:21:事务发生的时间
  • exec_time=0:事务执行的时间
  • error_code=0:错误码
  • server id 1:服务器的标识id

最后贴一个将binlog导出到用户目录下的语句,查询当天,且BINLOG内容进行base64解码

mysqlbinlog --base64-output=decode-rows -v --start-datetime="2021-12-14 00:00:00" --stop-datetime="2021-12-15 00:00:00" /usr/local/mysql/data/binlog.000029 -r /Users/xxx/temp/binlog.sql
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,172评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,346评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,788评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,299评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,409评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,467评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,476评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,262评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,699评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,994评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,167评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,827评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,499评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,149评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,387评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,028评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,055评论 2 352

推荐阅读更多精彩内容