第81讲:清理MySQL Binlog二进制日志的方式
作者:mmseoamin日期:2023-12-27

文章目录

    • 1.清理Binlog二进制日志的依据
    • 2.临时关闭Binlog的方法
    • 3.自动清理Binlog
    • 4.手动清理Binlog日志

      1.清理Binlog二进制日志的依据

      Binlog日志非常重要,但是占用的磁盘空间也很大,我们也需要定期的去清理二进制日志,在MySQL数据库中,提供了自动清理Binlog日志的参数,根据指定的天数,保留n天内的Binlog日志,也可以手动人为删除。

      在手动删除Binlog日志时,要切记不要使用rm -rf直接删除Binlog,会导致主从集群异常,如果的确使用rm -rf删除了Binlog文件,那么也有补救办法,去MySQL的主配置文件中关闭Binlog日志,然后重启数据库,再开启Binlog日志,并且给Binlog日志改一个名字,然后在重启即可。

      Binlog日志不能盲目删除,是由策略依据的,Binlog日志的保留天数,一般都是2个全库备份保留天数+1天,例如全库备份保留7天,那么Binlog日志的保留天数就应该是15天,确保数据都能被恢复。

      还可以通过Binlog来进行增量备份。

      2.临时关闭Binlog的方法

      退出当前会话失效。

      #临时关闭Binlog,主要用于通过Binlog恢复数据时使用
      mysql> set sql_log_bin=0;
      #临时开启Binlog
      mysql> set sql_log_bin=1;
      

      3.自动清理Binlog

      设置Binlog日志保留15天。

      [root@mysql ~]# vim /etc/my.cnf 
      [mysqld]
      expire_logs_days=15
      [root@mysql ~]# systemctl restart mysqld
      mysql> select @@expire_logs_days;
      +--------------------+
      | @@expire_logs_days |
      +--------------------+
      |                 15 |
      +--------------------+
      1 row in set (0.00 sec)
      

      4.手动清理Binlog日志

      手动清理Binlog的命令都是在数据库中执行的。

      1)删除当前时间之前多少天的Binlog日志

      PURGE BINARY LOGS BEFORE now() - INTERVAL 3 day;
      

      2)删除某个Binlog之前的所有Binlog日志

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

      3)删除所有的Binlog

      使用这个方式删除完Binlog后,新的Binlog从000001开始

      reset master
      

      4)查看数据库中有那些Binlog

      mysql> show binary logs;
      +------------------+-----------+
      | Log_name         | File_size |
      +------------------+-----------+
      | mysql-bin.000001 |      3058 |
      | mysql-bin.000002 |       177 |
      | mysql-bin.000003 |      5363 |
      | mysql-bin.000004 |      1949 |
      | mysql-bin.000005 |       402 |
      | mysql-bin.000006 |      3347 |
      | mysql-bin.000007 |       217 |
      | mysql-bin.000008 |       194 |
      +------------------+-----------+
      8 rows in set (0.00 sec)