mysql二进制日志

mysql默认会开启二进制日志(Binary Log,简称 binlog,数据库级别的核心日志文件),生成类似于这样的日志文件

/www/server/data/mysql-bin.000001
...
/www/server/data/mysql-bin.000019

这里记录了所有“修改数据”的 SQL 操作,包括但不限于: INSERT、UPDATE、DELETE、ALTER、TABLE、DROP、TABLE、CREATE、TABLE。

通过二进制文件,可以实现恢复数据、主从复制、审计排错。

  • 恢复数据:比如昨天12:00有完整备份,今天 15:00 手滑删库。就可以先恢复昨天12:00的全量备份,再用 binlog 回放到 14:59
  • 主从复制:主库写入 binlog,从库读取并执行,实现主从同步。
  • 审计排错:比如排查异常写入,拍查是谁什么时候修改了数据…

对于小容量磁盘的服务器来说,比如30G容量,每天1万IP访问的网站,每日产生的二进制文件一般在1-2GB,几天就能把磁盘容量告急。

关闭二进制日志

宝塔面板,已安装软件,找到mysql,点击设置-二进制日志,关闭即可。

或者修改mysql配置文件,找到下面这两行,前面加#注释掉

#log-bin=mysql-bin
#binlog_format=mixed

不是很推荐完全关闭二进制日志文件,关闭后对网站访问速度几乎没有可感知提升,只会明显降低磁盘 IO 和磁盘占用。所以除非是钻石盘(磁盘IO非常垃圾),并且能接受一定时间的数据丢失(前提是有自动的全量备份),否则不建议关闭二进制文件。

设置自动过期时间(推荐)

如果你不想关闭二进制日志,可以设置自动过期时间,改小一点。默认的过期时间是10天,你可以改成1天或2天。

在mysql配置文件中,修改下面的配置,修改后别忘了重启mysql!

# mysql8以下版本,找到这一行,值只能是整数,单位为天
expire_logs_days = 1

# mysql8以上版本,找到这一行,这个单位是秒
binlog_expire_logs_seconds = 86400

这样只产生最近的日志文件,占用空间较小,还保留了二进制日志的功能,降低最近数据丢失的风险。