陈德馨

Mysql或Mariadb产生大量的mysql-bin.xxx日志文件

1603人参与 |分类: 运维时间|时间:2016年05月28日 21:44

CentOS7下部署了Mysql的分支Mariadb。每天数据盘都增长100M左右的数据占用空间。进入系统查询Mariadb数据库每天才产生几十M的空间,于是找了半天才发现在其根目录下有很多mysql-bin.xxx的日志文件。这是由于启用mysql-bin日志记录的缘故。

    mysql> show global variables like '%bin%';

    +---------------------------------+----------------------+

    | Variable_name                   | Value                |

    +---------------------------------+----------------------+

    | binlog_cache_size               | 32768                |

    | innodb_locks_unsafe_for_binlog  | OFF                  |

    | log_bin                         | ON                   |

    | log_bin_trust_function_creators | OFF                  |

    | max_binlog_cache_size           | 18446744073709547520 |

    | max_binlog_size                 | 104857600            |

    | sync_binlog                     | 0                    |

    +---------------------------------+----------------------+

    7 rows in set (0.00 sec)

其中一个数据库,积累了大量的bin日志:

  mysql> show binary logs;

    +------------------+-----------+

    | Log_name         | File_size |

    +------------------+-----------+

    | mysql-bin.000064 |   3175623 |

    | mysql-bin.000065 | 104857696 |

    | mysql-bin.000066 |  30124812 |

    | mysql-bin.000067 | 104857882 |

    | mysql-bin.000068 | 104857829 |

    | mysql-bin.000069 | 104857910 |

    | mysql-bin.000070 |  29627738 | 

有三种解决方法:

1、关闭mysql主从,关闭binlog;

2、开启mysql主从,设置expire_logs_days;

3、手动清除binlog文件;

实现方法如下:

01、关闭mysql主从,关闭binlog

# vim /etc/my.cnf  //注释掉log-bin,binlog_format
# Replication Master Server (default)
# binary logging is required for replication
# log-bin=mysql-bin
# binary logging format - mixed recommended
# binlog_format=mixed

然后重启数据库

02、重启mysql,开启mysql主从,设置expire_logs_days

# vim /etc/my.cnf  //修改expire_logs_days,x是自动删除的天数,一般将x设置为短点,如10
expire_logs_days = x  //二进制日志自动删除的天数。默认值为0,表示“没有自动删除”

03、手动清除binlog文件

# /usr/local/mysql/bin/mysql -u root -p
> PURGE MASTER LOGS BEFORE DATE_SUB(CURRENT_DATE, INTERVAL 10 DAY);   //删除10天前的MySQL binlog日志,附录2有关于PURGE MASTER LOGS手动删除用法及示例
> purge binary logs to 'mysql.bin.000071'; //删除指定日志文件;
> reset master;  //这种清理法更狠,一键清除所有日志;
Query OK, 0 rows affected (0.06 sec)
> show master logs;

04、清除binlog时,对从mysql的影响

如果您有一个活性的从属服务器,该服务器当前正在读取您正在试图删除的日志之一,则本语句不会起作用,而是会失败,并伴随一个错误。不过,如果从属服务器是休止的,并且您碰巧清理了其想要读取的日志之一,则从属服务器启动后不能复制。当从属服务器正在复制时,本语句可以安全运行。您不需要停止它们。

常用的命令:

mysql>show slave hosts -- 查看所有连接到Master的Slave信息
mysql>show master status -- 查看Master状态信息
mysql>show slave status -- 查看Slave状态信息
mysql>show binary logs -- 查看所有二进制日志
mysql>show binlog events [IN log_file] -- 查看二进制日志中的事件

来源:陈德馨博客(微信/QQ号:35435164),转载请保留出处和链接!

地址:

必填

选填

选填

◎已有 0 人评论,请发表您的观点。