1默认情况下安装mysql是不开启binlog的。
查看C:\xampp\mysql\bin\my.ini配置文件:
# binary logging - not required for slaves, but recommended #log-bin=mysql-bin
关于log-bin是注释的,我们只需要打开这个注释,就开启了binlog。
#add by dhpei for open the bin log log-bin = C:/xampp/mysql/databinlog/mylog-mysql-bin
修改配置后重启mysql就可以在databinlog目录下看到生成的两个文件:
mylog-mysql-bin.000001 mylog-mysql-bin.index
2查看binlog是否开启的命令
mysql> show variables like '%log_bin%'; +---------------------------------+-------------------------------------------------+ | Variable_name | Value | +---------------------------------+-------------------------------------------------+ | log_bin | ON | | log_bin_basename | C:\xampp\mysql\databinlog\mylog-mysql-bin | | log_bin_index | C:\xampp\mysql\databinlog\mylog-mysql-bin.index | | log_bin_trust_function_creators | OFF | | log_bin_use_v1_row_events | OFF | | sql_log_bin | ON | +---------------------------------+-------------------------------------------------+ 6 rows in set
可以看到binlog是开启的,并且看到了binlog的存储路径。
3 binlog有3中格式,分别是row,statement,mixed,三种格式各有优缺点主要使用的还是row模式和statement模式。
查看当前mysql的binlog格式
mysql> show variables like 'binlog_format'; +---------------+-----------+ | Variable_name | Value | +---------------+-----------+ | binlog_format | STATEMENT | +---------------+-----------+ 1 row in set
3.1 statement模式,在statement模式下binlog日志全部都是query类型,可以看到记录到了执行的sql详细信息,type都是query。
| mylog-mysql-bin.000001 | 1908 | Intvar | 1 |1940 | INSERT_ID=8 | | mylog-mysql-bin.000001 | 1940 | Query | 1 | 2067 | use `rlog`; insert into ts_blog(title,content) values ('t3','c3') | | mylog-mysql-bin.000001 | 2067 | Xid | 1 | 2098 | COMMIT /* xid=49 */ | |mylog-mysql-bin.000001 | 2098 | Query | 1 | 2177 | BEGIN | | mylog-mysql-bin.000001 | 2177 | Query | 1 | 2303 | use `rlog`; update ts_blog set title='t3update' where title='t3' | | mylog-mysql-bin.000001 | 2303 | Xid | 1 | 2334 | COMMIT /* xid=50 */ | | mylog-mysql-bin.000001 | 2334 | Query | 1 | 2413 | BEGIN | | mylog-mysql-bin.000001 | 2413 | Query | 1 | 2529 | use `rlog`; delete from ts_blog where title='t3update' | | mylog-mysql-bin.000001 | 2529 | Xid | 1 | 2560 | COMMIT /* xid=51 */ | +------------------------+------+-------------+-----------+-------------+-------------------------------------------------------------------+
3.2row模式
修改binlog的格式为row,需要修改启动mysql的配置文件C:\xampp\mysql\bin\my.ini:
#add by dhpei for open the bin log log-bin = C:/xampp/mysql/databinlog/mylog-mysql-bin binlog_format=row
修改之后重启服务mysql服务
mysql> show variables like 'binlog_format'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | binlog_format | ROW | +---------------+-------+ 1 row in set
可以看到binlog_format已经改为ROW了。
在row模式下,binlog的日志如下,可以看到只是获取到了table_id;
mysql> show binlog events in 'mylog-mysql-bin.000003'; +------------------------+-----+-------------+-----------+-------------+---------------------------------------+ | Log_name | Pos | Event_type | Server_id | End_log_pos | Info | +------------------------+-----+-------------+-----------+-------------+---------------------------------------+ | mylog-mysql-bin.000003 | 4 | Format_desc |1 |120 | Server ver: 5.6.16-log, Binlog ver: 4 | | mylog-mysql-bin.000003 | 120 | Query |1 |192 | BEGIN | | mylog-mysql-bin.000003 | 192 | Table_map |1 |247 | table_id: 70 (rlog.ts_blog) | | mylog-mysql-bin.000003 | 247 | Write_rows |1 |294 | table_id: 70 flags: STMT_END_F | | mylog-mysql-bin.000003 | 294 | Xid|1 |325 | COMMIT /* xid=11 */ | | mylog-mysql-bin.000003 | 325 | Query |1 |397 | BEGIN | | mylog-mysql-bin.000003 | 397 | Table_map |1 |452 | table_id: 70 (rlog.ts_blog) | | mylog-mysql-bin.000003 | 452 | Update_rows |1 |518 | table_id: 70 flags: STMT_END_F | | mylog-mysql-bin.000003 | 518 | Xid|1 |549 | COMMIT /* xid=12 */ | | mylog-mysql-bin.000003 | 549 | Query |1 |621 | BEGIN | | mylog-mysql-bin.000003 | 621 | Table_map |1 |676 | table_id: 70 (rlog.ts_blog) | | mylog-mysql-bin.000003 | 676 | Delete_rows |1 |729 | table_id: 70 flags: STMT_END_F | | mylog-mysql-bin.000003 | 729 | Xid|1 |760 | COMMIT /* xid=13 */ | +------------------------+-----+-------------+-----------+-------------+---------------------------------------+
4查看当前mysql正在读写的binlog日志文件
mysql> show master status; +------------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------------+----------+--------------+------------------+-------------------+ | mylog-mysql-bin.000003 |760 | | | | +------------------------+----------+--------------+------------------+-------------------+ 1 row in set
5查看当前系统产生的所有binlog日志文件
mysql> show binary logs; +------------------------+-----------+ | Log_name | File_size | +------------------------+-----------+ | mylog-mysql-bin.000001 | 2560 | | mylog-mysql-bin.000002 | 120 | | mylog-mysql-bin.000003 | 760 | +------------------------+-----------+ 3 rows in set