
二进制日志管理
1.错误日志
1.1 作用
记录启动\关闭\日常运行过程中,状态信息,警告,错误
1.2 错误日志配置
默认就是开启的: /数据路径下/hostname.err
手工设定:
vim /etc/my.cnf log_error=/var/log/mysql.log重启生效
show variables like 'log_error';1.3 日志内容查看
主要关注[ERROR],看上下文
2.二进制binlog
2.1 作用
- (1)备份恢复必须依赖二进制日志
- (2)主从环境必须依赖二进制日志
2.2 binlog配置 (5.7必须加server_id)
注意:MySQL默认是没有开启二进制日志的。
2.2.1 创建日志目录
[root@db01 mysql]# mkdir /data/binlog [root@db01 mysql]# chown -R mysql.mysql /data/binlog2.2.2 修改配置文件
vim /etc/my.cnf [mysqld] server_id=6 log_bin=/data/binlog/mysql-bin binlog_format=row2.2.3 重启数据库生效
[root@db01 mysql]# /etc/init.d/mysqld restart2.2.4 参数说明
server_id=3306主要是在主从复制过程中必须要加的,但是在5.7版本中,要用以下参数(log_bin),开启binlog日志,即使是单机也是必加的
log_bin=/data/binlog/mysql-bin
- (1)开启二进制日志功能
- (2)设置二进制日志目录及名称前缀
binlog_format=row
binlog的记录格式SBR RBR mixed
3.binlog记录了什么
2.3.0 引入
binlog是SQL层的功能。记录的是变更SQL语句,不记录查询语句。
2.3.1 记录SQL语句种类
DDL :原封不动的记录当前DDL(statement)。 DCL :原封不动的记录当前DCL(statement)。 DML :只记录已经提交的事务DML三种记录方式:受binlog_format(binlog的记录格式)参数影响
- (1)statement(5.6默认)SBR :语句模式原封不动的记录当前DML。
- (2)ROW(5.7 默认值) RBR :记录数据行的变化(用户看不懂,需要工具分析)
- (3)mixed(混合)模式 :以上两种模式的混合
面试题:
SBR与RBR模式的对比STATEMENT:可读性较高,日志量少,但是不够严谨 ROW :可读性很低,日志量大,足够严谨 id name intime insert into t1 values(1,'zs',now()) 我们建议使用:row记录模式
4.event简介
2.4.1 事件的简介
二进制日志的最小记录单元
对于DDL,DCL,一个语句就是一个event
对于DML语句来讲:例如以下列子,就被分为了4个eventDML如下
begin; 120 - 340 DML1 340 - 460 DML2 460 - 550 commit; 550 - 7602.4.2 event的组成
三部分构成:
- 事件的开始标识
- 事件内容
- 事件的结束标识
Position:
开始标识:at 194
结束标识:end_log_pos 254194? 254? 某个事件在binlog中的相对位置号位置号的作用是: 为了方便我们截取事件
5.日志文件查看
2.5.1 查看日志的开启情况:
log_bin参数设置的路径,可以找到二进制日志db01 [(none)]>show variables like 'log_bin%'; +---------------------------------+------------------------------+ | Variable_name | Value | +---------------------------------+------------------------------+ | log_bin | ON | | log_bin_basename | /data/binlog/mysql-bin | | log_bin_index | /data/binlog/mysql-bin.index | | log_bin_trust_function_creators | OFF | | log_bin_use_v1_row_events | OFF | +---------------------------------+------------------------------+ 5 rows in set (0.01 sec) db01 [(none)]>show variables like 'log_bin%'; +---------------------------------+------------------------------+ | Variable_name | Value | +---------------------------------+------------------------------+ | log_bin | ON | | log_bin_basename | /data/binlog/mysql-bin | | log_bin_index | /data/binlog/mysql-bin.index | | log_bin_trust_function_creators | OFF | | log_bin_use_v1_row_events | OFF | +---------------------------------+------------------------------+ 5 rows in set (0.01 sec)2.5.2 查看一共多少个binlog
db01 [(none)]>show binary logs; +------------------+-----------+ | Log_name | File_size | +------------------+-----------+ | mysql-bin.000001 | 154 | +------------------+-----------+ 1 row in set (0.00 sec)2.5.3 查看mysql正在使用的日志文件
show master status; x86cloud [(none)]>show master status;file:当前MySQL正在使用的文件名 Position:最后一个事件的结束位置号
6.日志内容查看
2.6.1 event查看
show master status; show binlog events in 'mysql-bin.000002'; x86cloud [(none)]>show binlog events in 'mysql-bin.000005'; +------------------+-----+-------------+-----------+-------------+---------------------------------------+ | Log_name | Pos | Event_type | Server_id | End_log_pos | Info | +------------------+-----+-------------+-----------+-------------+---------------------------------------+ | mysql-bin.000005 | 4 | Format_desc | 1 | 120 | Server ver: 5.6.40-log, Binlog ver: 4 | | mysql-bin.000005 | 120 | Query | 1 | 208 | create database db | +------------------+-----+-------------+-----------+-------------+--------------------------------------Log_name:binlog文件名 Pos:开始的position ***** Event_type:事件类型 Format_desc:格式描述,每一个日志文件的第一个事件,多用户没有意义,MySQL识别binlog必要信息 5.6 4-120 5.7 4-154 Server_id:mysql服务号标识 End_log_pos:事件的结束位置号 ***** Info:事件内容*****录入数据,看事件信息:
create database testdb; use testdb; create table t1(id int); insert into t1 values(1); commit; show binlog events in 'mysql-bin.000005'; x86cloud [testdb]>show binlog events in 'mysql-bin.000005'; +------------------+-----+-------------+-----------+-------------+----------------------------------------+ | Log_name | Pos | Event_type | Server_id | End_log_pos | Info | +------------------+-----+-------------+-----------+-------------+----------------------------------------+ | mysql-bin.000005 | 4 | Format_desc | 1 | 120 | Server ver: 5.6.40-log, Binlog ver: 4 | | mysql-bin.000005 | 120 | Query | 1 | 208 | create database db | | mysql-bin.000005 | 208 | Query | 1 | 308 | create database testdb | | mysql-bin.000005 | 308 | Query | 1 | 409 | use `testdb`; create table t1(id int) | | mysql-bin.000005 | 409 | Query | 1 | 492 | BEGIN | | mysql-bin.000005 | 492 | Query | 1 | 594 | use `testdb`; insert into t1 values(1) | | mysql-bin.000005 | 594 | Xid | 1 | 625 | COMMIT /* xid=32 */ | +------------------+-----+-------------+-----------+-------------+----------------------------------------+2.6.2 binlog文件内容详细查看
create database testdb1; use testdb1; create table t1(id int); insert into t1 values(1); commit; show binlog events in 'mysql-bin.000006'; mysqlbinlog /data/mysql/mysql-bin.000006 mysqlbinlog --base64-output=decode-rows -vvvv /data/mysql/mysql-bin.000006 mysqlbinlog -d testdb1 /data/mysql/mysql-bin.000006