更新expire_logs_days参数并重新启动sql之后多久会删除旧的binlog?


16

MySQL 5.1.x | InnoDB | 视窗

我的mysql数据目录开始充满bin日志。

我目前在Windows mysql服务器中配置了以下设置:

[mysqld]
log-bin
server-id=1
binlog-do-db=foodb1
binlog-do-db=foodb2
expire_logs_days=25

我打算将expire_logs_days设置更改为expire_logs_days=10并跳出mysql服务。进行此更改后,我可以期望多长时间后清除旧的bin日志。

这是否仅作为每晚计划任务的一部分进行?还是应该立即进行?

Answers:


29

它将在mysql启动时立即处理。

您不必等待mysql重新启动。

首先,expire_logs_days在/etc/my.cnf 中将其设置为10

[mysqld]
log-bin
server-id=1
binlog-do-db=foodb1
binlog-do-db=foodb2
expire_logs_days=10

接下来,登录到mysql并运行它

PURGE BINARY LOGS BEFORE (date(now()) + interval 0 second - interval 10 day);

注意查询的日期和时间

mysql> select date(now()) + interval 0 second - interval 10 day;
+---------------------------------------------------+
| date(now()) + interval 0 second - interval 10 day |
+---------------------------------------------------+
| 2012-12-11 00:00:00                               |
+---------------------------------------------------+
1 row in set (0.00 sec)

mysql>

因此,PURGE BINARY LOGS命令将删除日期时间戳记为predate的所有二进制日志2012-12-11 00:00:00

最后,运行此命令

SET GLOBAL expire_logs_days = 10;

而已。无需重新启动即可安装expire_logs_days

至于复制参数,是,需要重新启动。


出色的反应。谢谢。我很欣赏细节。
Mike B

请刷新,我纠正了一个错字。
RolandoMySQLDBA 2012年

1
只需注意,MySQL 8.0现在不推荐使用expire_logs_days(根据@RolandoMySQLDBA提供的链接中的详细信息)。请改用binlog_expire_logs_seconds。
约翰·里克斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.