binlog日志的GTID新特性
GTID 介绍
对于binlog中的每个事物都会生成一个GTID的号码
DDL,DCL一个event就是一个事物,就会有一个GTID号
从begin到commit就会分配一个GTID号
5.7 中的GTID,即使不开也会有自动生成SET @@SESSION.GTID_NEXT='ANONYMOUS'
由server_uuid:TID组成
TID是一个自增长的数据
GTID的幂等性
如果拿有gtid的日志恢复时,检查系统中是否有相同的gtid号,有相同的就自动跳过
会影响binlog的恢复和主从复制
配置gtid
vim/etc/my.cnfgtid-mode=on
enforce-gtid-consistency=true
systemctl restart mysqld
基于gtid的恢复
[root@localhost binlog]# mysqlbinlog --include-gtids='5b65d91d-5bb1-11ea-b30e-000c291bec8a:1-3' mysql-bin.000004 >/tmp/gtid.sql
mysql>set sql_log_bin=0;
msyql>source /tmp/gtid.sql
mysql>set sql_log_bin=1;
报错Unknown database 'gtid'
为什么报错?
因为幂等性的检查 1-3的事物已经做过了 gtid不做重复的事物
处理方法就是跳过gtid1-3
[root@localhost binlog]# mysqlbinlog --skip-gtids --include-gtids='5b65d91d-5bb1-11ea-b30e-000c291bec8a:1-3' mysql-bin.000004 >/tmp/gtid.sql
mysql>set sql_log_bin=0;
msyql>source /tmp/gtid.sql
mysql>set sql_log_bin=1;
--skip-gtids 作用:导出时忽略原有的gtid的信息,恢复时生成新的gtid
具备GTID后,截取查看某些事务日志:
--include-gtids
--exclude-gtids
mysqlbinlog--include-gtids='dff98809-55c3-11e9-a58b-000c2928f5dd:1-6'
--exclude-gtids='dff98809-55c3-11e9-a58b-000c2928f5dd:4'/data/binlog/mysql-bin.000004
慢日志
作用
记录运行比较慢的语句,优化的过程中常用的日志工具
如何配置
开关
开关: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 分析慢日志
模拟慢查询
需要优化语句的排序
次数
时间
mysqldumpslow-s c-t10/data/mysql/slow.log
# 第三方工具(自己扩展)
https://www.percona.com/downloads/percona-toolkit/LATEST/
yum install perl-DBI perl-DBD-MySQL perl-Time-HiRes perl-IO-Socket-SSL perl-Digest-MD5toolkit
工具包中的命令:.
/pt-query-diagest
/data/mysql/slow.logAnemometer基于pt-query-digest将MySQL慢查询可视化
补充说明
show variables like 'gtid%'
二进制日志清理
show variables like'%expire%';
expire_logs_days0
自动清理时间,
是要按照全备周期+1setglobalexpire_logs_days=8;
永久生效:my.cnfexpire_logs_days=15;企业建议,
至少保留两个全备周期+1的binlog
手工清理
PURGEBINARYLOGSBEFOREnow()-INTERVAL3day;
PURGEBINARYLOGSTO'mysql-bin.000010';
注意:不要手工 rm binlog文件
1.my.cnf binlog关闭掉,启动数据库
2.把数据库关闭,开启binlog,启动数据库
删除所有binlog,并从000001开始重新记录日志
reset master 日志清零 慎用! 主做从蹦
show variables like 'slow_query_log%'
show variables like 'long%'