使用MariaDB集群运维可能涉及的细节之binarylog

浏览MariaDB官网看到的一些内容,觉得可能有用就总结一下在此,可能并不全面。看官酌情采纳。

1.binarylog问题。数据库的log时间久了也是占用很大空间的,在本人以前做第三方支付的经历来看,生产环境中由于数据库log把硬盘写满造成业务失败,程序异常。这样的情形在运维人员意识不到这种情况的时候是很容易出现的。那么就需要对binarylog来进行清理。在集群的时候,清理并不是说很随意的删除就可以,因为master和slave直接的数据的同步需要依靠binarylog。那么下面我将搬运一下如何做binarylog的清理,基本是自己翻译的英文官网的内容。

binarylog记录着对数据库记录有影响的操作,诸如update insert delete语句,但是它并不记录select等不影响数据库记录的语句。

清理日志文件

想删除在服务器上的所有binarylog日志文件, 执行 RESET MASTER 命令。 想删除在指定的时间点之前的所有binarylog日志文件, 或者是一个指定的数字之前, 执行 PURGE BINARY LOGS

如果一个从属机器是活跃状态,并且尚未读取你想要删除的binarylog日志文件,那么语句将会报错失败。然而,如果一个从属机器并没有连接,且尚未读取你想要删除的binarylog文件,那么文件会被删除掉;但是这台从属机器再次连接的时候将不能够继续进行数据复制。

日志文件也能够通过使用 expire_logs_days 系统变量进行自动删除。 此变量默认值为0(不删除),但是此值我们可以将其设置为一个时间或者是某日。在此时间节点之后binarylog日志文件将被自动删除。请将此值设置的高于任何一个从属机器。

如果binarylog日志索引文件被删除了,或者是被手动错误编辑了,那么上面所有的binarylog日志清理将会失败,这个.index文件是一个特定内容的文本文件,是可以手动编辑或重建的,它只是以数字或者年龄来列出现在存在的binarylog文件。

例子

PURGE BINARY LOGS TO 'mariadb-bin.000063';
PURGE BINARY LOGS BEFORE '2013-04-22 09:55:22';

在复制时安全清理binarylog日志文件

想在删除日志文件时确保复制不被破坏,参照下列步骤来执行:

  • 通过在主机器上运行SHOW BINARY LOGS 来获取binarylog日志文件列表。
  • 在每一台从属机器上运行 SHOW SLAVE STATUS 来检查每一个从属机器正在读取哪个日志文件。
  • 找到正在被从属机器所使用的最早的那个日志文件,比它更早的日志文件都是不再被需要的。
  • 如果你想的话,你可以在删除它们之前进行一下备份。
  • 清理上述在这个日志文件之前(不包含它本身)的所有日志文件。

参考网址: https://mariadb.com/kb/en/mariadb/documentation/log-files/binary-log/using-and-maintaining-the-binary-log/