一尘不染

删除 mysql-bin 文件是否安全?

mysql

我在 mysql 中有 MM 复制,我想在框中压缩一些可用空间来删除不必要的文件,我在里面遇到了这些mysql-bin文件/var/db/mysql/有数百个这样的文件mysql-bin.000123mysql-bin.000223等等。我已经通过执行检查了 mysql 复制show master statusshow slave status它们是在某些位置使用一些 mysql-bin 文件,但我猜所有其他 bin 文件都是剩余的,将不再使用。在这种情况下,除了复制当前指向的文件之外,删除所有这些 mysql-bin 文件是否安全?

如果删除是安全的,那么有什么办法可以在这些文件不使用时自动删除它们?


阅读 72

收藏
2022-10-10

共1个答案

一尘不染

请不要只在操作系统中删除它们。

您需要让 mysqld 为您执行此操作。以下是 mysqld 的管理方式:

该文件mysql-bin.[index]保留了 mysqld 生成并自动轮换的所有二进制日志的列表。清除 binlogs 的机制mysql-bin.[index]有:

PURGE BINARY LOGS TO 'binlogname';
PURGE BINARY LOGS BEFORE 'datetimestamp';

这些将清除您刚刚指定的二进制日志或时间戳之前的所有二进制日志。

例如,如果您运行

PURGE BINARY LOGS TO 'mysql-bin.000223';

这将清除之前的所有二进制日志mysql-bin.000223

如果你跑

PURGE BINARY LOGS BEFORE DATE(NOW() - INTERVAL 3 DAY) + INTERVAL 0 SECOND;

这将在 3 天前的午夜之前清除所有二进制日志。

如果您想让 binlog 自动轮换并保留 3 天,只需设置以下内容:

mysql> SET GLOBAL expire_logs_days = 3;

然后将其添加到/etc/my.cnf

[mysqld]
expire_logs_days=3

mysqld 会为你删除它们的日志

显示从属状态\G

这很关键。运行时SHOW SLAVE STATUS\G,您将看到来自 Master 的两个二进制日志:

  • Master_Log_File
  • Relay_Master_Log_File

当复制很少或没有延迟时,这些通常是相同的值。当有很多复制滞后时,这些值是不同的。只是为了简单起见,选择任何东西Relay_Master_Log_File,然后回到 Master 并运行

PURGE BINARY LOGS TO 'Whatever Relay_Master_Log_File Is';

这样,复制就不会中断。

2022-10-10