mysql 的binlog 是二进制日志?

mysql-binlog是MySQL数据库的二进制日志,用于记录用户对数据库操作的SQL语句((除了数据查询语句)信息。可以使用mysqlbin命令查看二进制日志的内容

二机制的日志看不懂吧

阅读 2.7k
2 个回答

mysqlbinlog功能是将 MySQL 的binlog日志转换成MySQL 文本SQL语句,默认情况下binlog日志是二进制文件.

file命令查看文件类型

$ file mysql-bin.002149 
mysql-bin.002149: MySQL replication log

直接用xxd命令查看(二进制)

$ xxd -l 1024 mysql-bin.002149 
00000000: fe62 696e 562a 5f5d 0f01 0000 0077 0000  .binV*_].....w..
00000010: 007b 0000 0000 0004 0035 2e37 2e32 372d  .{.......5.7.27-
00000020: 3075 6275 6e74 7530 2e31 362e 3034 2e31  0ubuntu0.16.04.1
00000030: 2d6c 6f67 0000 0000 0000 0000 0000 0000  -log............
00000040: 0000 0000 0000 0000 0000 0000 0000 0013  ................

转换日志成文本的sql看一下

$ mysqlbinlog --no-defaults  /var/lib/mysql/mysql-bin.002149  >~/test.sql
$ head ~/test.sql

输出

/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#190822  7:51:43 server id 1  end_log_pos 123 CRC32 0x6c47a911     Start: binlog v 4, server v 5.7.27-0ubuntu0.16.04.1-log created 190822  7:51:43
BINLOG '
D9ldXQ8BAAAAdwAAAHsAAAAAAAQANS43LjI3LTB1YnVudHUwLjE2LjA0LjEtbG9nAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAEzgNAAgAEgAEBAQEEgAAXwAEGggAAAAICAgCAAAACgoKKioAEjQA
ARGpR2w=
'/*!*/;

输出虽然大部分是文本,但因为采用的mixed模式,也有类似BINLOG类似的指令,这部分是无法转成sql语句的。也就无法查看了。

对这段神秘的BINLOG解析一下:

echo "D9ldXQ8BAAAAdwAAAHsAAAAAAAQANS43LjI3LTB1YnVudHUwLjE2LjA0LjEtbG9nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEzgNAAgAEgAEBAQEEgAAXwAEGggAAAAICAgCAAAACgoKKioAEjQAARGpR2w=" |base64 -d |xxd

将会输出:

00000000: 0fd9 5d5d 0f01 0000 0077 0000 007b 0000  ..]].....w...{..
00000010: 0000 0004 0035 2e37 2e32 372d 3075 6275  .....5.7.27-0ubu
00000020: 6e74 7530 2e31 362e 3034 2e31 2d6c 6f67  ntu0.16.04.1-log
00000030: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000040: 0000 0000 0000 0000 0000 0013 380d 0008  ............8...
00000050: 0012 0004 0404 0412 0000 5f00 041a 0800  .........._.....
00000060: 0000 0808 0802 0000 000a 0a0a 2a2a 0012  ............**..
00000070: 3400 0111 a947 6c                        4....Gl

和前面那段似曾相识。

mysqlbinlog–base64-output=DECODE-ROWS -v 参数可以把BINLOG部分转化成可读的注释掉的SQL, 但不是所有的都能成功转化。

mysqlbinlog命令可以将二进制日志文件转化为sql 语句,
虽然不是可执行的标准sql ,但基本上可以看明白,
如果你想看到标准的sql,可以看看这篇文章https://segmentfault.com/a/11...
可以将二进制的日志文件转化为标准的sql语句,还有对应的回滚语句。

推荐问题
宣传栏