什么是Binlog

binlog是Mysql sever层维护的一种二进制日志,主要是用来记录对mysql数据更新或潜在发生更新的SQL语句,并以"事务"的形式保存在磁盘中;

作用:

  1. 复制:MySQL Replication在Master端开启binlog,Master把它的二进制日志传递给slaves并回放来达到master-slave数据一致的目的
  2. 数据恢复:通过mysqlbinlog工具恢复数据
  3. 增量备份

操作Binlog

开启

my.cnf => [mysqld]块 => 添加 log-bin=mysql-bin

查看状态

1
mysql> show variables like 'log_%'; 
+----------------------------------------+---------------------------------------+
| Variable_name                          | Value                                 |
+----------------------------------------+---------------------------------------+
| log_bin                                | ON                                    | ------> ON表示已经开启binlog日志
| log_bin_basename                       | /usr/local/mysql/data/mysql-bin       |
| log_bin_index                          | /usr/local/mysql/data/mysql-bin.index |
| log_bin_trust_function_creators        | OFF                                   |
| log_bin_use_v1_row_events              | OFF                                   |
| log_error                              | /usr/local/mysql/data/martin.err      |
| log_output                             | FILE                                  |
| log_queries_not_using_indexes          | OFF                                   |
| log_slave_updates                      | OFF                                   |
| log_slow_admin_statements              | OFF                                   |
| log_slow_slave_statements              | OFF                                   |
| log_throttle_queries_not_using_indexes | 0                                     |
| log_warnings                           | 1                                     |
+----------------------------------------+---------------------------------------+

查看内容

默认情况下binlog日志是二进制格式,无法直接查看。有以下两种方式查看:

1. mysql查看binlog

1
2
3
4
mysql> show binlog events;   #只查看第一个binlog文件的内容
mysql> show binlog events in 'mysql-bin.000002';#查看指定binlog文件的内容
mysql> show binary logs;  #获取binlog文件列表
mysql> show master status #查看当前正在写入的binlog文件

2. 使用mysqlbinlog工具

  • 基于开始/结束时间
1
mysqlbinlog --start-datetime='2013-09-10 00:00:00' --stop-datetime='2013-09-10 01:01:01' -d {database} {binlog-file}
  • 基于pos值
1
mysqlbinlog --start-postion=107 --stop-position=1000 -d {database} {binlog-file}
  • 转换为可读文本
1
mysqlbinlog –base64-output=DECODE-ROWS -v -d {database} {binlog-file}