Mysqlbinlog⽇志⽂件过⼤的解决
⽬录
1、相关binlog配置
2、binlog相关⾼级设置
2.1 改变binlog模式
2.2 相关SQL操作binlog
磁盘突然报错使⽤率过⼤,排查原因,发现mysql的binlog⽂件占⽤过⼤
命令
ls -l -h
mysql-binlog是MySQL数据库的⼆进制⽇志,⽤于记录⽤户对数据库操作的SQL语句((除了数据查询语句)信息。可以使⽤mysqlbin命令查看⼆进制⽇志的内容。
可以通过设置my.cof配置⽂件的⽅式限制binlog⽂件的输出。
1、相关binlog配置
vim /f
[mysqld]
expire_logs_days = 3
#设置binlog清理时间
max_binlog_size = 100m
#binlog每个⽇志⽂件⼤⼩
binlog_cache_size = 4m
#binlog缓存⼤⼩
max_binlog_cache_size = 512m
#最⼤binlog缓存⼤⼩
重启mysql,看到只保留了前三天的⽇志
2、binlog相关⾼级设置
2.1 改变binlog模式
binlog的模式也有三种:STATEMENT、ROW、MIXED 。下⾯对这三种格式分别加以说明:
STATMENT模式
基于SQL语句的复制(statement-based replication, SBR),每⼀条会修改数据的sql语句会记录到binlog中。
优点:不需要记录每⼀条SQL语句与每⾏的数据变化,这样⼦binlog的⽇志也会⽐较少,减少了磁盘IO,提⾼性能。
缺点:在某些情况下会导致master-slave中的数据不⼀致(如sleep()函数, last_insert_id(),以及user-defined functions(udf)等会出现问题)
ROW模式
不记录每⼀条SQL语句的上下⽂信息,仅需记录哪条数据被修改了,修改成了什么样⼦了。
mysql数据库迁移命令优点:不会出现某些特定情况下的存储过程、或function、或trigger的调⽤和触发⽆法被正确复制的问题。
缺点:会产⽣⼤量的⽇志,尤其是alter table的时候会让⽇志暴涨。
MIXED模式
混合模式复制(mixed-based replication, MBR):以上两种模式的混合使⽤,⼀般的复制使⽤STATEMENT模式保存binlog,对于STATEMENT模式⽆法复制的操作使⽤ROW模式保存binlog,MySQL会根据执⾏的SQL语句选择⽇志保存⽅式。
修改配置⽂件
[mysqld]
binlog_format = mixed
#设置⽇志格式
2.2 相关SQL操作binlog
show binary logs;
# 查看binlog现有详情
show variables like '%log%';
# 查看log变量的相关配置
set global expire_logs_days = 3;
# 设置binlog的保存时间
reset master;
# 重置所有的binlog,相当于删除所有的binlog,这个操作对主从集影响⾮常⼤,因为主从赋值是基于binlog⽇志来实现的
PURGE {MASTER | BINARY} LOGS TO 'log_name'
PURGE {MASTER | BINARY} LOGS BEFORE 'date'
# 删除指定的⽇志或⽇期之前的⽇志索引中的所有⼆进制⽇志。MASTER和BINARY是同义词
PURGE MASTER LOGS TO 'binlog.000013';
#清除binlog.000013⽇志
PURGE MASTER LOGS BEFORE '2020-01-08 10:00:00';
#清除2020-01-08 10:00:00前binlog⽇志
PURGE MASTER LOGS BEFORE DATE_SUB( NOW( ), INTERVAL 3 DAY);
# 清除3天前binlog⽇志BEFORE,变量的date⾃变量可以为'YYYY-MM-DD hh:mm:ss'格式。
到此这篇关于Mysql binlog⽇志⽂件过⼤的解决的⽂章就介绍到这了,更多相关Mysql binlog⽇志过⼤内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。