- 日志管理
1.1 配置方式
vim /etc/my.cnf
log_error=/data/mysql/data/mysql.log #MySQL错误日志
log_bin=/data/binlog/mysql-bin #二进制日志
server_id=6
1.2 查看配置
show variables like '%log_bin%'; # 查看二进制日志位置
show master status; #查看当前使用binlog得日志名字
show binlog events in '日志名字'; #查看#日志得内容还有Position号、gtid号
show binary logs; #查看日志大小
查看二进制日志内容
[root@db01 /data/binlog]# mysqlbinlog mysql-bin.000002 |grep -v "SET" >/tmp/aa.txt
[root@db01 /data/binlog]# mysqlbinlog --base64-output=decode-rows -vvv mysql-bin.000002
1.3 关于记录格式:
ROW :RBR 行记录模式,记录的是行的变化
STATEMENT :SBR 语句记录模式,记录操作语句
MIXED :MBR 混合记录模式
RBR,逐行记录日志,日志量很大,可读性差。但是够严谨,不会出现记录错误
SBR,只记录语句本身,日志量很少,可读性较强。对于函数类的操作,将来恢复时会造错误。
5.7 版本 默认是RBR,是企业建议模式
查看:
mysql> select @@binlog_format;
1.4 基于position号截取二进制日志
截取二进制日志核心在于,找起点和终点(无gtiid)
[root@db01 ~]# mysqlbinlog --start-position=219 --stop-position=322 /data/binlog/mysql-bin.000002 >/tmp/bin.sql
恢复日志
mysql> set sql_log_bin=0;
mysql> source /tmp/bak.sql
- 开启GTID功能的二进制日志管理
2.1 什么是GTID (全局事务编号)
5.6 版本新加的特性,5.7中做了加强
5.6 中不开启,没有这个功能.
5.7 中的GTID,即使不开也会有自动生成
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'
2.2 开启GTID
vim /etc/my.cnf
gtid-mode=on
enforce-gtid-consistency=true
2.3 基于GTID截取二进制日志
正确的截取方法是:
[root@db01 ~]# mysqlbinlog --skip-gtids --include-gtids='ee956c61-9653-11e9-8518-000c29099eb6:1-5' /data/binlog/mysql-bin.000003 >/tmp/gtids.sql
跳过某些gtid不截取
mysqlbinlog --skip-gtids --include-gtids='ee956c61-9653-11e9-8518-000c29099eb6:1-5' --exclude-gtids='ee956c61-9653-11e9-8518-000c29099eb6:2,ee956c61-9653-11e9-8518-000c29099eb6:4' /data/binlog/mysql-bin.000003 >/tmp/gtids.sql
2.4 自动清理二进制文件
参数
select @@expire_logs_days;
设置依据?
至少是一个全备周期+1,企业建议至少2个全备周期+1
2..4.1设置
临时设置,重启失效
mysql> set global expire_logs_days=8;
永久设置,重启生效
vim /etc/my.cnf
expire_logs_days=8
手工清理
PURGE BINARY LOGS BEFORE now() - INTERVAL 3 day;
PURGE BINARY LOGS TO 'mysql-bin.000003';
删除所有binlog,并从000001开始重新记录日志(主从复制情况下不建议此操作)
reset master;
2.5 日志滚动
重启数据库
flush logs
mysqladmin -uroot -p flush-logs
show variables like '%max_binlog_size%';
- 优化相关日志-slowlog 慢日志(记录语句慢)
3.1 开启慢日志(默认没开启)
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 #没走索引的语句也记录:
3.2mysqldumpslow 分析慢日志
mysqldumpslow -s c -t 10 /data/mysql/data/slow.log
3.3 第三方工具(自己扩展)
https://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慢查询可视化