mysql运维-二进制日志BINARY LOG清理_ mysql-bin磁盘占用高处理办法

1.1 方法1:PURGE MASTER LOGS

语法:mysql

PURGE { BINARY | MASTER } LOGS
{ TO 'log_name' | BEFORE datetime_expr }sql

用于删除列于在指定的日志或日期以前的日志索引中的全部二进制日志。这些日志也会从记录在日志索引文件中的清单中被删除,这样被给定的日志成为第一个。安全

 

例子:服务器

PURGE BINARY LOGS TO 'mysql-bin.000002';    删除mysql-bin.000002以前的日志(不包括mysql-bin.000002)
PURGE BINARY LOGS BEFORE '2014-04-28 23:59:59';    删除2014-04-28 23:59:59时间点以前的日志     架构

    具体演示:删除某个时间点以前的日志测试

具体演示:删除某个日志以前的日志spa

  注意事项:.net

        在删除binlog日志同时,也会清理mysql-bin.index的文件记录,清理完后命令中指定的日志文件成为第一个。
        主从架构下,若是复制正在进行中,执行该命令是安全的,例如slave正在读取咱们要删除的log,该语句将什么也不会作,并返回一个错误;若是复制是中止的,咱们删除了一个slave还未读取的日志,则复制从新创建链接时将会失败。日志


    建议操做步骤:blog

        a 在每一个从属服务器上,使用SHOW SLAVE STATUS来检查它正在读取哪一个日志。
        b 使用SHOW MASTER LOGS得到主服务器上的一系列日志。
        c 在全部的从属服务器中断定最先的日志。这个是目标日志。若是全部的从属服务器是最新的,这是清单上的最后一个日志。
        d 备份您将要删除的全部日志。(这个步骤是自选的,可是建议采用。)
        e 清理除目标日志以外的全部日志。

 1.2 方法2:手动删除binlog日志文件

1.2.1 查看日志文件:

1.2.2 删除文件mysql-bin.000009

[root@localhost data]# rm -f mysql-bin.000009

1.2.3 编辑mysql-bin.index

删除掉一行./mysql-bin.000009

    1.3 方法3:指定过时天数(expire_logs_days)  删除日志后,配置此环境变量,防止后期mysql再次产生大量日志。

    该参数为全局可动态调整参数,默认值为0,即关闭,取值范围0-99。

1.3.1 参数的查看:

mysql> show variables like 'expire_logs_days';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| expire_logs_days | 0 |
+------------------+-------+

 

 1.3.2 参数调整:

    例如咱们设置过时为60天 (如无主从备份,建议设置为7天

设置完后红色标注的3个binlog日志将会被删除。

    设置参数:

mysql> set global expire_logs_days = 60;
Query OK, 0 rows affected (0.05 sec)

mysql> show variables like 'expire_logs_days';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| expire_logs_days | 60 |
+------------------+-------+

mysql> set global expire_logs_days = 60;
Query OK, 0 rows affected (0.05 sec)

mysql> show variables like 'expire_logs_days';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| expire_logs_days | 60 |
+------------------+-------+

mysql> flush logs;
Query OK, 0 rows affected (0.07 sec)

mysql> show master logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000013 | 4097 |
| mysql-bin.000014 | 54431 |
| mysql-bin.000015 | 729 |
| mysql-bin.000016 | 107 |
+------------------+-----------+

 

1.3.3 注意事项
    在双机复制环境下,应确保过时天数不该小于从机追赶主机binlog日志的时间。

    1.3.4 触发过时删除的条件

    每次进行 LOG flush的时候会自动删除过时的日志。
    触发log flush的条件为:
        1. 重启mysql;
     2. BINLOG文件大小达到参数max_binlog_size限制;
     3. 手工执行命令。

  1.4 方法4:重置binlog(reset master)

语法:

RESET MASTER;

 

解释:
    该方法能够删除列于索引文件中的全部二进制日志,把二进制日志索引文件从新设置为空,并建立一个以.000001为后缀新的二进制日志文件。

    该语法通常只用在主从环境下初次创建复制时。

    在主从复制进行过程当中,该语句是无效的。

    主从环境下的配置步骤:
    a. 启动master和slave,开启replication(即复制)
    b. 在master上运行一些测试的语句,看数据是否可以复制到 slave上面
    c. 当复制运行正常的话,就在从上stop slave 而后执行 reset slave,去掉不须要的数据 
    d. 在master上面执行reset master 清除测试产生的数据

 

2 使用到的命令列表

show master logs;
PURGE BINARY LOGS TO 'mysql-bin.000001';
PURGE BINARY LOGS BEFORE '2014-04-28 23:59:59';
show variables like 'expire_logs_days';
set global expire_logs_days = 60;
flush logs;
RESET MASTER;

 

 

引自:

https://blog.csdn.net/jesseyoung/article/details/40979129

相关文章
相关标签/搜索