首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >expire_logs_days在my.cnf中被忽略

问expire_logs_days在my.cnf中被忽略
EN

Stack Overflow用户
提问于 2013-03-15 16:49:31
回答 4查看 37.7K关注 0票数 15

我有一对MySQL数据库,它们都是为主从复制设置的。奴隶过得很好。

另一方面,尽管我尽了最大的努力(自动化的),主人还是一直在囤积二进制日志。

我试图在MySQL的expire_logs_days文件中设置‘my.cnf’变量,但由于某种原因,它似乎被忽略了。我的my.cnf文件看起来类似于:

代码语言:javascript
复制
[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的值。

我试过:

  • 重新启动MySQL
  • 使用这一行:expire_logs_days='3'
  • 检查其他my.cnf文件:
    • mysqld --help --verbose | grep cnf
    • 找到了行:/etc/mysql/my.cnf /etc/my.cnf ~/.my.cnf order of preference
    • 我的my.cnf文件位于/etc/my.cnf
    • 在其他位置没有名为my.cnf的文件

​

  • SET GLOBAL expire_logs_days=3确实在MySQL中工作,但它本身并没有真正解决我的问题

这就是我所能想到的。我已经运行了手动清除命令,它运行得很好,但我更希望(尽管,如果没有办法绕过它,我还是会这么做)不使用cron运行PURGE命令。

有人有什么想法吗?我就快被窃听了。

谢谢。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 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,该文件夹保存所有二进制日志。

以下是两个问题:

  1. /var/log/mysql中是否有数字不连续的二进制日志?
  2. /var/log/mysql中是否有而不是 mysql-bin.index中的二进制日志?

为什么会出现这种情况?

有时,人们删除操作系统中的二进制日志。这可以抛出mysqld,因为mysqld使用mysql-bin.index在内部跟踪二进制日志的存在。只要使用rm -f删除二进制日志,就可以逻辑地破坏mysqld所知道的日志旋转机制。

建议

如果两者兼而有之,您可以如下所示进行清理:

代码语言:javascript
复制
mysql -ANe"RESET MASTER"
service mysql stop
cd /var/log/mysql
rm -f mysql-bin.*
cd
service mysql start

在此之后,您应该有一个全新的二进制日志设置。

试试看!!

票数 12
EN

Stack Overflow用户

发布于 2019-10-05 08:15:39

Mysql (社区)版本8.0.17-1.sles12-OpenSUSE卷草2019.10.02

代码语言:javascript
复制
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)

。。

票数 1
EN

Stack Overflow用户

发布于 2013-03-18 21:58:42

我不知道您的my.cnf发生了什么,但更大的问题是,您似乎有几个选择:

  1. 运行mysqldump并指定要刷新/清除文件。
  2. 运行“清除”(就像你曾经的那样)
  3. 设置max_binlog_size。根据医生的说法:

可能的删除发生在启动和二进制日志被刷新时。

和

此外,当二进制日志的大小达到max_binlog_size系统变量的值时,它会被刷新。

听起来#3在进行刷新/清除时会执行expire_logs_days。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15437908

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档