mysql - my.cnf 中忽略了 expire_logs_days

标签 mysql database-replication

我有一对为主从复制设置的 MySQL 数据库。奴隶做得很好。

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

我正在尝试在 MySQL 的 my.cnf 文件中设置“expire_logs_days”变量,但由于某种原因,它似乎被忽略了。我的 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]
...

但是当我在 MySQL 中运行 SHOW VARIABLES WHERE Variable_Name='expire_logs_days' 时,它返回的值是 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 中工作,但并不能真正解决我的问题

这就是我能想到的所有事情。我已经运行了手动 PURGE 命令,它工作得很好,但我更喜欢(虽然,如果没有办法解决它,我还是会这样做)不使用 cron 运行 PURGE 命令。

有人有什么想法吗?我即将被窃听。

谢谢。

最佳答案

你问题的事实

  • 二进制日志不能轮转出
  • 你说你可以运行 PURGE BINARY LOGS

这是我的工作理论

由于您可以使用PURGE BINARY LOGS; 清除二进制日志,所以我有两个地方供您查看,您没有提到

地方#1:mysql-bin.index

此文件包含所有二进制日志的位置。设置 expire_logs_days 后,mysqld 将打开此文本文件,检查每个文件中的日期时间戳,直到遇到时间戳小于 NOW() - INTERVAL expire_logs_days DAY) 的二进制日志。

mysql-bin.index 中的二进制日志应该是数字连续的。如果二进制日志在数字上不连续,则禁用日志轮换。

PLACE #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 知道的日志轮换机制。

建议

如果其中一种或两种情况,您可以按如下方式清理:

mysql -ANe"RESET MASTER"
service mysql stop
cd /var/log/mysql
rm -f mysql-bin.*
cd
service mysql start

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

试一试!!!

关于mysql - my.cnf 中忽略了 expire_logs_days,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15437908/

相关文章:

php - 制作 PHP/MySQL 搜索引擎

mysql - 在两个数据库中拥有表是否会造成性能损失

php - 使MySQL自增id(re)从1开始

sql-server-2008 - 不太了解SQL Server事务日志

两次锁定相同行的 MySQL 5.6 死锁?

javascript - 如何(SELECT *)node.js 中的两个 mysql 表(express)

database-design - 事务数据库中快照的设计以及引用数据的版本控制

sql-server - 索引 View 的 SQL Server 事务复制

php - 如何打印mysql报告并导出到excel

Mysql从slave向master发送信息