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';
指定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;
相关文章
近期热文
入门小站
全栈入门知识
Official Account