文章目录
MySQL日志分类
MySQL服务层日志
- 二进制日志
- 慢查询日志
- 通用日志
- …
存储引擎层日志
以Innodb存储引擎来讲,主要由 Redo log 和 Undo log , 为了支持事务。
这里我们重点来了解下 binlog的主要功能
binlog
binlog都记录了哪些内容
binlog中主要记录了所有对MySQL数据库的修改事件,包括增删改查事件以及对表结构的修改事件。 需要注意的一点: 只有成功执行的才回被记录到binlog中,那些执行出错或者已经回滚的数据,是不会被记录到binlog中的。
binlog格式初探
基于段的格式-STATEMENT
基于段的格式 binlog_format=STATEMENT (5.7以前默认的)
STATEMENT 的优缺点
优点:日志记录量相对较小,节省磁盘及网络I/O ,只对一条删记录进行修改或者插入,row格式所产生的日质量小于段产生的日志量
缺点: 必须要记录上下文的信息,以确保在从服务器上能够正确执行。但是有些特定函数比如UUID(),user() 这样非确定性函数还是无法复制,有可能造成主备服务器数据不一致。
查看
[root@artisan ~]# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 44
Server version: 5.7.29-log MySQL Community Server (GPL)
.....
.....
mysql> show variables like 'binlog_format'; # 查看当前binlog的格式
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| binlog_format | ROW |
+---------------+-------+
1 row in set (0.00 sec)
mysql> set session binlog_formate=statement; # 修改session级别的binlog格式为statement
mysql> set session binlog_format=statement;
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like 'binlog_format'; #确认下当前binlog的格式
+---------------+-----------+
| Variable_name | Value |
+---------------+-----------+
| binlog_format | STATEMENT |
+---------------+-----------+
1 row in set (0.00 sec)
mysql> show binary logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000001 | 177 |
| mysql-bin.000002 | 177 |
| mysql-bin.000045 | 5743 |
+------------------+-----------+
45 rows in set (0.00 sec)
mysql> flush logs; # 刷新log ,会产生一个新的binlog
Query OK, 0 rows affected (0.05 sec)
mysql> show binary logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000001 | 177 |
....
....
| mysql-bin.000045 | 5790 |
| mysql-bin.000046 | 154 |
+------------------+-----------+
46 rows in set (0.00 sec)
mysql> 下面随便搞点操作,方便观察binlog