总结
1、binary log记录的是
已经提交commit
的各种DML和DDL语句,类似oracle的redo log(包含online redo log和archive redo log)中已经commit提交的数据
statement 格式的 binlog,最后会有 COMMIT;
row 格式的 binlog,最后会有一个 XID event;
2、binary log用于
主从复制
和
基于时间点的恢复
3、在MySQL 5.7.3及其以后的版本中,若想开启二进制日志,除了log-bin参数外还必须加上server_id参数。否则会有如下报错
[ERROR] You have enabled the binary log, but you haven't provided the mandatory server-id.
4、purge binary logs时,磁盘上的物理文件也一并删除了
5、binary log日志格式,可以简单认为就是执行过的事务中的sql语句。但又不完全是sql语句这么简单,而是执行的sql语句(增删改)及反向的信息,比如delete对应着delete本身和其反向的insert。使用mysqlbinlog解析binlog可以看到
6、binary log产生时间,事务提交的时候,一次性将事务中的sql语句(一个事物可能对应多个sql语句)按照一定的格式记录到binlog中
7、binlog的保持时间由参数expire_logs_days配置,也就是说对于非活动的日志文件,在生成时间超过expire_logs_days配置的天数之后,会被自动删除。
8、查看binary log的内容可以使用以下两种方式
mysqlbinlog mysql-bin.000002
mysql> show binlog events in 'mysql-bin.000002';
mysql> show binlog events in 'mysql-bin.00002' from 504769752 limit 30,30;
mysql> show binlog events [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count];
选项解析:
IN 'log_name' 指定要查询的binlog文件名(不指定就是第一个binlog文件)
FROM pos 指定从哪个pos起始点开始查起(不指定就是从整个文件首个pos点开始算)
LIMIT [offset,] 偏移量(不指定就是0)
row_count 查询总条数(不指定就是所有行)
涉及参数
log_bin
:是否开启binary log
log_bin_basename
:binary log文件的存放路径和名称
log_bin_index
:binary log索引文件的存放路径和名称
expire_logs_days
:自动删除几天以前的binary log文件
innodb_page_size
:InnoDB表空间的页面大小,默认16K
sync_binlog
:MySQL服务器将二进制日志同步到磁盘的频率,即写日志的同时是否写入磁盘,
此处写磁盘不是写表的数据文件,而是写mysql-bin.00000X日志文件
By default is set to 0, meaning that there is no delay
When sync_binlog is set to a value n greater than 1, the delay is applied after every n binary log commit groups.
binlog_group_commit_sync_delay
:二进制日志提交后需要等待多少微秒才能把二进制日志文件同步到磁盘,5.7.5默认是0,表示立即写
https://dev.mysql.com/doc/refman/5.7/en/glossary.html#glos_binary_log
binary log
A file containing a record of all statements that attempt to change table data. These statements can be replayed to bring slave servers up to date in a replication scenario, or to bring a database up to date after restoring table data from a backup. The binary logging featur