记录了所有MySQL数据库的修改事件 包括增删改查时间和对表结构的修改事件
binlog_format=STATEMENT
查看日志使用的格式
mysql> show variables like "binlog_format";
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| binlog_format | ROW |
+---------------+-------+
1 row in set (0.00 sec)
set session binlog_format=statement; # 改成基于段的格式
mysql> flush logs; # 刷新日志
mysql> show binary logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql_bin.000001 | 201 |
| mysql_bin.000002 | 154 |
+------------------+-----------+
2 rows in set (0.00 sec)
如果启动报错
ERROR 1381 (HY000): You are not using binary logging
请在mysql的配置文件中加入
server-id=1
log_bin=mysql_bin 重启mysql就行
mysql> create database crn;
Query OK, 1 row affected (0.07 sec)
mysql> use crn
Database changed
mysql> create table t(id int,name varchar(20));
Query OK, 0 rows affected (0.90 sec)
mysql> insert into t values(1,'nica'),(2,'logs');
Query OK, 2 rows affected (0.15 sec)
Records: 2 Duplicates: 0 Warnings: 0
[root@MySQL8-slave2 ~]# cd /var/lib/mysql
[root@MySQL8-slave2 mysql]# mysqlbinlog mysql_bin.000002 # 里面可以看到所有的操作记录 是基于段的
例如 同一个SQL语句修改了10000条数据的情况,基于段的日志格式只会记录这个SQL语句基于行的日志会有10000条记录分别记录每一行SQL语句.
binlog_row_image=[full|minimal|noblob]
full表述全部记录
minimage只记录列的修改
noblob不会记录text的值
mysql> alter table t add c2 text;#加入一个c2列 字段类型为text
mysql> insert into t values(3,'ee','bbb');
查看你的mysqlbinlog日志
[root@MySQL8-slave2 mysql]# mysqlbinlog mysql_bin.000003
# 单独的用mysqlbinary完全看不到row里面的数据
[root@MySQL8-slave2 mysql]# mysqlbinlog mysql_bin.000003 -vv # 加入-vv参数就可以看到row格式的binlog日志记录方式
2.这个时候我们更改一下binlog_row_image的参数为minimal
mysql> set session binlog_row_image=minimal;
mysql> update t set c2='this 2' where id=2; # 更改数据
再次查看mysql_binlog.000003里面的数据
### UPDATE `crn`.`t` //可以看到minimal是这样的
3.更改binlog_row_image的参
blob
mysql> set session binlog_row_image=noblob; //注意这个时候不能用text格式
mysql> update t set name='blob' where id=3;
再次查看mysql_binlog.000003里面的数据
### SET
### @1=3 /* INT meta=0 nullable=1 is_null=0 */
### @2='blob' /* VARSTRING(20) meta=20 nullable=1 is_null=0 */
# at 1092
#200918 10:18:03 server id 1 end_log_pos 1123 CRC32 0x707bd6dc Xid = 61
COMMIT/*!*/;
SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;
DELIMITER ;
# End of log file //其实和ROW的方式差不多的 因为没更新text的列 所以SET后面没有数据
建议
这两个还是作为首选
注意,在使用binlog_formart=row的时候注意也应该设置
binlog_row_image=minial