binlog简介
二进制日志,也称为二进制日志。记录对数据发生或潜在发生更改的SQL语句,并以二进制的形式保存在磁盘中。
在 读>>写 的场景,binlog的启动大概会为mysql增加 1% 的负载。而在 写>>读 的场景,则大概增加 10% 的负载。因此在绝大多数情况下,binlog都不会成为mysql的性能瓶颈。
[TOC]
binlog启停
查看binglog是否开启
show variables like 'log_bin';
启用binlog
找到my.cnf 中 [mysqld] 配置如下参数,并重启mysql服务生效
[mysqld]
log-bin = mysql-bin
expire-logs-days = 14
server-id = 1393306
binlog清理
清理binlog
show binary logs; #.查看当前的log
purge binary logs to 'mysql-bin.000842'; #.清理指定binlog以前的日志
purge master logs before '2012-03-30 17:20:00'; #.删除指定日期以前的日志索引中binlog日志文件
purge master logs before DATE_SUB(NOW(), INTERVAL 3 DAY); #.删除3天以前的binlog日志
reset master; #.清空所有binlog文件
reset slave; #.删除slave的中继日志
从库清理relay_log
host=127.0.0.1
port=3306
user=dba_admin
password=***
/usr/bin/purge_relay_logs --user=$user --password=$password --port=$port --host=$host
调整binlog最长保存期限
- 修改binlog最长保存期限,再flush logs(改大则不需要flush),则会自动清理老的binlog文件。
#.改为最长保留2天
show variables like 'expire_logs_days';
set global expire_logs_days=2;
flush logs;
注:记得同时修改 my.cnf 设置 expire_logs_days=2
- MySQL 8.0 对于binlog日志的自动清理参数:binlog_expire_logs_seconds(默认为604800秒,即7天)的优先级高于expire_log_days(默认为0,即不自动清理)。修改过参数之后,需要执行
flush logs;
使参数生效
#.改为最长保留2天
show variables like 'binlog_expire_logs_seconds';
set global binlog_expire_logs_seconds=3600*24*2;
flush logs;
注:记得同时修改 my.cnf 设置 binlog_expire_logs_seconds=172800
binglog维护
调整max_binlog_cache_size大小
遇到的错误:
Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage; increase this mysqld variable and try again
调整 binlog cache size 大小,比如:binlog_cache_size改为8M、max_binlog_cache_size改为3GB:
set global binlog_cache_size=8388608;
set global max_binlog_cache_size=3221225472;
show global variables like '%binlog_cache%';
binlog分析
binlog不能直接用文本的方式打开,mysql提供了相应的查看工具:mysqlbinlog filename
查询binlog变动信息
show binlog events;
从指定位置查看binlog
show binlog events in 'mysql-bin.003425' from 2990 limit 10;