我有一对MySQL数据库,它们都是为主从复制设置的。奴隶过得很好。
另一方面,尽管我尽了最大的努力(自动化的),主人还是一直在囤积二进制日志。
我试图在MySQL的expire_logs_days文件中设置‘my.cnf’变量,但由于某种原因,它似乎被忽略了。我的my.cnf文件看起来类似于:
[mysqld]
...
log-bin=/var/log/mysql/mysql-bin.log
server-id=1
expire_logs_days=3
log_bin_trust_function_creators=TRUE
sync_binlog=1
[mysqld_safe]
...但是当我在SHOW VARIABLES WHERE Variable_Name='expire_logs_days'中运行MySQL时,它会返回一个0的值。
我试过:
expire_logs_days='3'mysqld --help --verbose | grep cnf/etc/mysql/my.cnf /etc/my.cnf ~/.my.cnf order of preferencemy.cnf文件位于/etc/my.cnf
SET GLOBAL expire_logs_days=3确实在MySQL中工作,但它本身并没有真正解决我的问题这就是我所能想到的。我已经运行了手动清除命令,它运行得很好,但我更希望(尽管,如果没有办法绕过它,我还是会这么做)不使用cron运行PURGE命令。
有人有什么想法吗?我就快被窃听了。
谢谢。
发布于 2013-03-19 22:06:14
你问题的事实
这是我的工作理论
由于您可以使用PURGE BINARY LOGS;擦除二进制日志,所以我有两个地方可以供您查看,您还没有提到过。
地点1:mysql-bin.index
此文件包含所有二进制日志的位置。设置expire_logs_days时,mysqld将打开这个文本文件,检查每个文件中的日期时间戳,直到遇到一个时间戳小于NOW() - INTERVAL expire_logs_days DAY)的二进制日志为止。
mysql-bin.index中的二进制日志在数字上是连续的。如果二进制日志不是数字连续的,则禁用日志旋转。
地点2:/var/log/mysql文件夹
根据您的my.cnf,该文件夹保存所有二进制日志。
以下是两个问题:
/var/log/mysql中是否有数字不连续的二进制日志?/var/log/mysql中是否有而不是 mysql-bin.index中的二进制日志?为什么会出现这种情况?
有时,人们删除操作系统中的二进制日志。这可以抛出mysqld,因为mysqld使用mysql-bin.index在内部跟踪二进制日志的存在。只要使用rm -f删除二进制日志,就可以逻辑地破坏mysqld所知道的日志旋转机制。
建议
如果两者兼而有之,您可以如下所示进行清理:
mysql -ANe"RESET MASTER"
service mysql stop
cd /var/log/mysql
rm -f mysql-bin.*
cd
service mysql start在此之后,您应该有一个全新的二进制日志设置。
试试看!!
发布于 2019-10-05 08:15:39
Mysql (社区)版本8.0.17-1.sles12-OpenSUSE卷草2019.10.02
mysql> SET GLOBAL expire_logs_days = 4;
ERROR 3683 (HY000): The option expire_logs_days and binlog_expire_logs_seconds
cannot be used together. Please use binlog_expire_logs_seconds to set the expire
time (expire_logs_days is deprecated)。。
发布于 2013-03-18 21:58:42
我不知道您的my.cnf发生了什么,但更大的问题是,您似乎有几个选择:
max_binlog_size。根据医生的说法:可能的删除发生在启动和二进制日志被刷新时。
和
此外,当二进制日志的大小达到max_binlog_size系统变量的值时,它会被刷新。
听起来#3在进行刷新/清除时会执行expire_logs_days。
https://stackoverflow.com/questions/15437908
复制相似问题