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

作者:hack1990 时间:16-01-05 阅读数:652人阅读

每天看着数据盘都增长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文件;


实现:1.关闭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


然后重启数据库


2.重启mysql,开启mysql主从,设置expire_logs_days

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

 3.手动清除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;

4.清除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] -- 查看二进制日志中的事件


发表评论