Mysql日志管理

1.错误日志

记录启动\关闭\日常运行过程中,状态信息,警告,错误

配置

手工设定:

Master [(none)]>select @@log_error;
vim /etc/my.cnf
log_error=/var/log/mysql.log
log_timestamps=system
重启生效
show variables like 'log_error';

2. binlog

(1)备份恢复必须依赖二进制日志

(2)主从环境必须依赖二进制日志

查看相关

注意:MySQL默认是没有开启二进制日志的。
基础参数查看:

开关:
[(none)]>select @@log_bin;
日志路径及名字
[(none)]>select @@log_bin_basename;
服务ID号:
[(none)]>select @@server_id;
二进制日志格式:
[(none)]>select @@binlog_format;
双一标准之二:
[(none)]>select @@sync_binlog;

配置

vim /etc/my.cnf
server_id=6                                    ----->5.6中,单机可以不需要此参数              
log_bin=/data/binlog/mysql-bin
binlog_format=row
server_id=3306

主要是在主从复制过程中必须要加的,但是在5.7版本中,要用以下参数(log_bin),开启binlog日志,即使是单机也是必加的

log_bin=/data/binlog/mysql-bin

(1)开启二进制日志功能

(2)设置二进制日志目录及名称前缀

binlog_format=row 记录格式?

binlog记录什么

binlog是SQL层的功能。记录的是变更SQL语句,不记录查询语句。

DDL :原封不动的记录当前DDL(statement语句方式)。 create drop alter
DCL :原封不动的记录当前DCL(statement语句方式)。 insert update delete
DML :只记录已经提交的事务DML

DML的记录方式

binlog_format(binlog的记录格式)参数影响

(1)statement(5.6默认)SBR(statement based replication) :语句模式原封不动的记录当前DML。

(2)ROW(5.7 默认值) RBR(ROW based replication) :记录数据行的变化(用户看不懂,需要工具分析)

(3)mixed(混合)MBR(mixed based replication)模式 :以上两种模式的混合

SBR与RBR模式的对比

STATEMENT:可读性较高,日志量少,但是不够严谨

ROW :可读性很低,日志量大,足够严谨

event(事件)是什么

二进制日志的最小记录单元

对于DDL,DCL,一个语句就是一个event

对于DML语句来讲:只记录已提交的事务。

例如以下列子,就被分为了4个event

event的组成

三部分构成:
(1) 事件的开始标识

(2) 事件内容

(3) 事件的结束标识

Position:

开始标识: at 194

结束标识: end_log_pos 254

194? 254?
某个事件在binlog中的相对位置号
位置号的作用是什么?
为了方便我们截取事件

查看有多少binlog

show binary logs;

查看正在使用的binlog

show master status;

查看event

show binlog events in 'mysql-bin.000003';

Log_name:binlog文件名

Pos:开始的position *****

Event_type:事件类型

Format_desc:格式描述,每一个日志文件的第一个事件,多用户没有意义,MySQL识别binlog必要信息

Server_id:mysql服务号标识

End_log_pos:事件的结束位置号 *****

Info:事件内容*****

补充:

SHOW BINLOG EVENTS [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count]

binlog详细查看

mysqlbinlog /data/mysql/mysql-bin.000006
mysqlbinlog --base64-output=decode-rows -vvv /data/binlog/mysql-bin.000003
mysqlbinlog  -d binlog /data/binlog/mysql-bin.000003
根据时间截取binlog
[root@db01 binlog]# mysqlbinlog --start-datetime='2019-05-06 17:00:00' --stop-datetime='2019-05-06 17:01:00'  /data/binlog/mysql-bin.000004
根据event  开始结束时间截取binlog 
mysqlbinlog --start-position=219 --stop-position=1347 /data/binlog/mysql-bin.000003 >/tmp/bin.sql

GTID介绍

5.6版本新加的特性,5.7做了加强

5.6 中不开启,没有这个功能

5.7 中的GTID 即使不开也会自动生成

全局配置

vim /etc/my.cnf
gtid-mode=on
enforce-gtid-consistency=true

组成

GTID由server_uuid:transaction_id 组成

基于GTID进行查看binlog

--include-gtids   要查找的GTID
--exclude-gtids   需要跳过的GTID
mysqlbinlog --include-gtids='dff98809-55c3-11e9-a58b-000c2928f5dd:1-6' --exclude-gtids='dff98809-55c3-11e9-a58b-000c2928f5dd:4'  /data/binlog/mysql-bin.000004

GTID的幂等性

开启GTID后,MySQL恢复Binlog时,重复GTID的事务不会再执行了
就想恢复?怎么办?

--skip-gtids
mysqlbinlog --include-gtids='3ca79ab5-3e4d-11e9-a709-000c293b577e:4' /data/binlog/mysql-bin.000004 /data/binlog/mysql-bin.000004
set sql_log_bin=0;
source /tmp/binlog.sql
set sql_log_bin=1;

binlog的清理

自动清理

show variables like '%expire%';
expire_logs_days  0   
自动清理时间,是要按照全备周期+1
set global expire_logs_days=8;
永久生效:
my.cnf
expire_logs_days=15;
企业建议,至少保留两个全备周期+1的binlog

手动清理

PURGE BINARY LOGS BEFORE now() - INTERVAL 3 day;
PURGE BINARY LOGS TO 'mysql-bin.000010';

注意:不要手工 rm binlog文件

my.cnf binlog关闭掉,启动数据库

把数据库关闭,开启binlog,启动数据库

删除所有binlog,并从000001开始重新记录日志

二进制日志滚动

flush logs; 
重启mysql也会自动滚动一个新的
日志文件达到1G大小(max_binlog_size)
 max_binlog_size                           1073741824     
备份时,加入参数也可以自动滚动

3. Slowlog 慢日志

记录慢SQL语句的日志,定位低效SQL语句的工具日志

开启慢日志

开关:
slow_query_log=1 
文件位置及名字 
slow_query_log_file=/data/mysql/slow.log
设定慢查询时间:
long_query_time=0.1
没走索引的语句也记录:
log_queries_not_using_indexes
vim /etc/my.cnf
slow_query_log=1 
slow_query_log_file=/data/mysql/slow.log
long_query_time=0.1
log_queries_not_using_indexes
systemctl restart mysqld

分析慢日志

mysqldumpslow -s c -t 10 /data/mysql/slow.log 
http://www.percona.com/downloads/percona-toolkit/LATEST/
yum install perl-DBI perl-DBD-MySQL perl-Time-HiRes perl-IO-Socket-SSL perl-Digest-MD5
toolkit工具包中的命令: ./pt-query-diagest /data/mysql/slow.log
Anemometer基于pt-query-digest将MySQL慢查询可视化

Mysql日志管理
http://www.jcwit.com/article/25/
作者
Carlos
发布于
2019年6月12日
许可协议