vlambda博客
学习文章列表

Mysql中的binlog入门介绍

开启binlog

二进制日志包括两类文件:二进制日志索引文件(文件名后缀为.index)用于记录所有的二进制文件,二进制日志文件(文件名后缀为.00000*)记录数据库所有的DDL和DML(除了数据查询语句)语句事件。

> vim /etc/my.cnf
[mysqld]
log-bin=mysql-bin
server-id=1

server-id必填,然后启动或者重启mysql服务

mysql的变量配置表,查看二进制日志是否已开启

> show variables like 'log_%';
+----------------------------------------+---------------------------------+
| Variable_name                          | Value                           |
+----------------------------------------+---------------------------------+
| log_bin                                | ON                              |
| log_bin_basename                       | /home/mysqldata/mysql-bin       |
| log_bin_index                          | /home/mysqldata/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                              | /var/log/mysqld.log             |
| 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                             | OFF                             |
| log_syslog_facility                    | daemon                          |
| log_syslog_include_pid                 | ON                              |
| log_syslog_tag                         |                                 |
| log_throttle_queries_not_using_indexes | 0                               |
| log_timestamps                         | UTC                             |
| log_warnings                           | 2                               |
+----------------------------------------+---------------------------------+
21 rows in set (0.00 sec)

常用binlog操作命令

查看所有的binlog日志列表

> show master logs;

查看master状态,即最后(最新)一个binlog日志的编号名称,及其最后一个操作事件pos结束点(Position)值

> show master status;

刷新log日志,自此刻开始产生一个新编号的binlog日志文件

> flush logs;

每当mysqld服务重启时,会自动执行此命令,刷新binlog日志;在mysqldump备份数据时加 -F 选项也会刷新binlog日志;

重置(清空)所有的binlog日志

> reset master;

查看binlog日志

binlog是二进制文件,普通文件查看器cat more vi等都无法打开,必须使用自带的 mysqlbinlog 命令查看.

> mysqlbinlog --base64-output -v -d demo mysql-bin.000003

下面是binlog日志的节选

BEGIN
/*!*/;
# at 1296
#210611 19:47:06 server id 1  end_log_pos 1407 CRC32 0xd50ae429         Query   thread_id=2     exec_time=0     error_code=0
SET TIMESTAMP=1623412026/*!*/;
update rumenz set id=456 where id=123
/*!*/;
# at 1407
#210611 19:47:06 server id 1  end_log_pos 1438 CRC32 0x64341009         Xid = 15
COMMIT/*!*/;

两个# at之间标示了mysql中的一个事件,而且在事件开始时也会通过end_log_pos标示事件结束的位置

  • at 1296表示该事件在binlog的位置是1296字节之后
  • server id 1 数据库主机的服务号
  • end_log_pos 1438 为事件的终点,是以1438 字节结束。
  • Xid:事件指示提交的XA事务

上面这种办法读取出binlog日志的全文内容较多,不容易分辨查看pos点信息,这里介绍一种更为方便的查询命令

> 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       查询总条数(不指定就是所有行)

真实数据节选

> show binlog events in 'mysql-bin.000003'\G;

*************************** 13. row ***************************
   Log_name: mysql-bin.000003
        Pos: 1002
 Event_type: Query
  Server_id: 1
End_log_pos: 1121
       Info: use `demo`; insert into rumenz(id,name) values(123,'qaz')
*************************** 14. row ***************************

查询第一个(最早)的binlog日志

> show binlog events;

指定mysql-bin.000003文件查询

> show binlog events in 'mysql-bin.000003';
image-20210611151352337

指定mysql-bin.000003文件查询,从pos点:321开始查起

> show binlog events in 'mysql-bin.000003' from 321;

指定mysql-bin.000003文件查询,从pos点:321开始查起,查询10条

> show binlog events in 'mysql-bin.000003' from 321 limit 10;

指定mysql-bin.000003文件查询,从pos点:321开始查起,偏移2行,查询10条

> show binlog events in 'mysql-bin.000003' from 321 limit 2,10;

相关文章






近期热文

入门小站
全栈入门知识
244篇原创内容
Official Account