5.6 版本新加的特性,5.7中做了加强
5.6 中不开启,没有这个功能.
5.7+ 中的GTID,即使不开也会有自动生成
SET @@SESSION.GTID_NEXT= ‘ANONYMOUS’
是对于一个已提交事务的编号,并且是一个全局唯一的编号。
它的官方定义如下:
GTID = server_uuid :transaction_id
7E11FA47-31CA-19E1-9E56-C43AA21293967:1-1000
重要参数介绍:
vim /etc/my.cnf
gtid-mode=on ##开关
enforce-gtid-consistency=true ##强制一致性
log-slave-updates=1 ##从库强制写入GTID信息
systemctl restart mysqld ##重启生效
GTID应用:
具备GTID后,截取查看某些事务日志:
—include-gtids
—exclude-gtids
—skip-gtids
案例截取binlog4当中1-6GTID,跳过第4个:
mysqlbinlog —include-gtids=’dff98809-55c3-11e9-a58b-000c2928f5dd:1-6’ —
exclude-gtids=’dff98809-55c3-11e9-a58b-000c2928f5dd:4’ /data/binlog/mysql-
bin.000004 > /tmp/db.sql
开启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
8.0 变化默认使用:
binlog_expire_logs_seconds=2592000
手工清理:
PURGE BINARY LOGS BEFORE now() - INTERVAL 3 day;
PURGE BINARY LOGS TO ‘mysql-bin.000010’; 删除10号之前的所有
resert master ##清空所有binlog日志,主从会崩特别危险。
日志滚动:
flush logs; ##手动刷新一个binlog日志
重启mysql也会自动滚动一个新的
show variables like ‘%max_binlog_size%’; ##默认1GB大小,生产中建议设置256M一个切换出多个日志文件,保留少量的数据,方便分析日志,达到日志的大小会滚动一个新的理论上。
日志文件达到1G大小(max_binlog_size)
| max_binlog_size | 1073741824
备份时,加入参数也可以自动滚动
