我在 mysql 中有 MM 复制,我想在框中挤出一些可用空间来删除不必要的文件,我在里面遇到了这些mysql-bin
文件/var/db/mysql/
有数百个这样的文件mysql-bin.000123
,mysql-bin.000223
等等。我已经通过做检查了 mysql 复制show master status
,show slave status
它们是在某些位置使用一些 mysql-bin 文件,但我猜所有其他 bin 文件都是剩余的,将不再使用。在这种情况下,除了复制当前指向的文件之外,删除所有这些 mysql-bin 文件是否安全?
如果删除是安全的,那么有什么办法可以在这些文件不使用时自动删除它们?
请不要只在操作系统中删除它们。
您需要让 mysqld 为您执行此操作。以下是 mysqld 的管理方式:
该文件
mysql-bin.[index]
保留了 mysqld 生成并自动轮换的所有二进制日志的列表。清除 binlogs 的机制mysql-bin.[index]
有:这些将清除您刚刚指定的二进制日志或时间戳之前的所有二进制日志。
例如,如果您运行
这将清除之前的所有二进制日志
mysql-bin.000223
。如果你跑
这将在 3 天前的午夜之前清除所有二进制日志。
如果您想让 binlog 自动轮换并保留 3 天,只需设置以下内容:
然后将其添加到
/etc/my.cnf
mysqld 会为你删除它们的日志
显示从属状态\G
这很关键。运行时
SHOW SLAVE STATUS\G
,您将看到来自 Master 的两个二进制日志:Master_Log_File
Relay_Master_Log_File
当复制很少或没有延迟时,这些通常是相同的值。当有很多复制滞后时,这些值是不同的。只是为了简单起见,选择任何东西
Relay_Master_Log_File
,然后回到 Master 并运行这样,复制就不会中断。
这实际上取决于您的备份策略。保留二进制日志的主要原因之一是将数据库恢复到“时间点”。如果您的数据库崩溃并需要恢复,您将恢复最新的完整备份,然后从完整备份的位置开始播放二进制日志。
因此,如果您每天进行一次完整备份,并且您有 7 天的二进制日志,那么您很可能可以删除过去 4-6 天的二进制日志。您可以使用该设置控制保留多少天的二进制日志
expire_logs_days
。您可以通过首先查看要保留的最旧日志来删除不需要的二进制日志:
然后在mysql中:
尝试这个:
正如文件所说:
这将删除所有相关的二进制日志文件,这可能不是您想要的。
是的,它是安全的。对于 mysql 8,您可以这样做。
我们也可以将其设置
binlog_expire_logs_seconds
为选项或系统变量或命令行参数,但我将展示如何将其用作配置选项。作为选项使用,您必须编辑配置文件。您可以在此处查找windows 和 linux 文件。对于linux,我去了
/etc/mysql/my.cnf
文件:让我们看看里面有什么
/etc/mysql/mysql.conf.d/
:例如,要仅保留 3 天的日志,您必须计算总秒数 (24 60 60*3)。现在,我们必须向一个部分添加
binlog_expire_logs_seconds
选项。mysqld
我的解决方案是创建一个包含以下内容的文件:由于该文件位于包含的目录中,
/etc/mysql/my.cnf
因此将随服务一起加载。然后,重新启动服务:
它将为您删除日志并将继续删除它们。
注意:仅供参考,
expire_logs_days
已弃用。