目录(?)[+]


1 几种方法

1.1 方法1:PURGE MASTER LOGS

语法:

[sql] view plain copy

  1. PURGE { BINARY | MASTER } LOGS
  2. { TO 'log_name' | BEFORE datetime_expr }


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

实例:

[sql] view plain copy

  1. PURGE BINARY LOGS TO 'mysql-bin.000002';
  2. PURGE BINARY LOGS BEFORE '2014-04-28 23:59:59';

分别表示:删除mysql-bin.000002之前的日志 (不包括mysql-bin.000002)

删除2014-04-28 23:59:59时间点之前的日志

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

mysql运维-二进制日志BINARY LOG清理_mysql

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

mysql运维-二进制日志BINARY LOG清理_二进制日志_02

注意事项:

        在删除binlog日志同时,也会清理mysql-bin.index的文件记录,清理完后命令中指定的日志文件成为第一个。

        主从架构下,如果复制正在进行中,执行该命令是安全的,例如slave正在读取我们要删除的log,该语句将什么也不会做,并返回一个错误;如果复制是停止的,我们删除了一个slave还未读取的日志,则复制重新建立连接时将会失败。

    建议操作步骤:

        a 在每个从属服务器上,使用SHOW SLAVE STATUS来检查它正在读取哪个日志。

        b 使用SHOW MASTER LOGS获得主服务器上的一系列日志。

        c 在所有的从属服务器中判定最早的日志。这个是目标日志。如果所有的从属服务器是最新的,这是清单上的最后一个日志。

        d 备份您将要删除的所有日志。(这个步骤是自选的,但是建议采用。)

        e 清理除目标日志之外的所有日志。

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

1.2.1 查看日志文件:

mysql运维-二进制日志BINARY LOG清理_sql_03

1.2.2 删除文件mysql-bin.000009

[sql] view plain copy

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

1.2.3 编辑mysql-bin.index

mysql运维-二进制日志BINARY LOG清理_mysql_04

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

1.3 方法3:指定过期天数(expire_logs_days)

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

mysql运维-二进制日志BINARY LOG清理_二进制日志_05

    1.3.1 参数的查看:

[sql] view plain copy

  1. mysql> show variables like 'expire_logs_days';
  2. +------------------+-------+
  3. | Variable_name | Value |
  4. +------------------+-------+
  5. | expire_logs_days | 0 |
  6. +------------------+-------+

1.3.2 参数调整:

例如我们设置过期为60天

mysql运维-二进制日志BINARY LOG清理_二进制日志_06

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

设置参数:

[sql] view plain copy

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

  3. mysql> show variables like 'expire_logs_days';
  4. +------------------+-------+
  5. | Variable_name | Value |
  6. +------------------+-------+
  7. | expire_logs_days | 60 |
  8. +------------------+-------+

刷新日志查看,上述三个日志被清除掉了。 [sql] view plain copy

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

  3. mysql> show master logs;
  4. +------------------+-----------+
  5. | Log_name | File_size |
  6. +------------------+-----------+
  7. | mysql-bin.000013 | 4097 |
  8. | mysql-bin.000014 | 54431 |
  9. | mysql-bin.000015 | 729 |
  10. | mysql-bin.000016 | 107 |
  11. +------------------+-----------+

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)

    语法:

[sql] view plain copy

  1. RESET MASTER;

解释:

该方法可以删除列于索引文件中的所有二进制日志,把二进制日志索引文件重新设置为空,并创建一个以.000001为后缀新的二进制日志文件。

该语法一般只用在主从环境下初次建立复制时。

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

    主从环境下的配置步骤:

    a. 启动master和slave,开启replication(即复制)

    b. 在master上运行一些测试的语句,看数据是否能够复制到 slave上面

    c. 当复制运行正常的话,就在从上stop slave 然后执行 reset slave,去掉不需要的数据 

    d. 在master上面执行reset master 清除测试产生的数据

2 使用到的命令列表

[sql] view plain copy

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


****************************************************************************************

****************************************************************************************


1 几种方法

1.1 方法1:PURGE MASTER LOGS

语法:

[sql] view plain copy

  1. PURGE { BINARY | MASTER } LOGS
  2. { TO 'log_name' | BEFORE datetime_expr }

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

实例:

[sql] view plain copy

  1. PURGE BINARY LOGS TO 'mysql-bin.000002';
  2. PURGE BINARY LOGS BEFORE '2014-04-28 23:59:59';

分别表示:删除mysql-bin.000002之前的日志 (不包括mysql-bin.000002)

删除2014-04-28 23:59:59时间点之前的日志

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

mysql运维-二进制日志BINARY LOG清理_mysql

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

mysql运维-二进制日志BINARY LOG清理_二进制日志_02

注意事项:

        在删除binlog日志同时,也会清理mysql-bin.index的文件记录,清理完后命令中指定的日志文件成为第一个。

        主从架构下,如果复制正在进行中,执行该命令是安全的,例如slave正在读取我们要删除的log,该语句将什么也不会做,并返回一个错误;如果复制是停止的,我们删除了一个slave还未读取的日志,则复制重新建立连接时将会失败。

    建议操作步骤:

        a 在每个从属服务器上,使用SHOW SLAVE STATUS来检查它正在读取哪个日志。

        b 使用SHOW MASTER LOGS获得主服务器上的一系列日志。

        c 在所有的从属服务器中判定最早的日志。这个是目标日志。如果所有的从属服务器是最新的,这是清单上的最后一个日志。

        d 备份您将要删除的所有日志。(这个步骤是自选的,但是建议采用。)

        e 清理除目标日志之外的所有日志。

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

1.2.1 查看日志文件:

mysql运维-二进制日志BINARY LOG清理_sql_03

1.2.2 删除文件mysql-bin.000009

[sql] view plain copy

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

1.2.3 编辑mysql-bin.index

mysql运维-二进制日志BINARY LOG清理_mysql_04

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

1.3 方法3:指定过期天数(expire_logs_days)

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

mysql运维-二进制日志BINARY LOG清理_二进制日志_05

    1.3.1 参数的查看:

[sql] view plain copy

  1. mysql> show variables like 'expire_logs_days';
  2. +------------------+-------+
  3. | Variable_name | Value |
  4. +------------------+-------+
  5. | expire_logs_days | 0 |
  6. +------------------+-------+

1.3.2 参数调整:

例如我们设置过期为60天

mysql运维-二进制日志BINARY LOG清理_二进制日志_06

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

设置参数:

[sql] view plain copy

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

  3. mysql> show variables like 'expire_logs_days';
  4. +------------------+-------+
  5. | Variable_name | Value |
  6. +------------------+-------+
  7. | expire_logs_days | 60 |
  8. +------------------+-------+

刷新日志查看,上述三个日志被清除掉了。

[sql] view plain copy

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

  3. mysql> show master logs;
  4. +------------------+-----------+
  5. | Log_name | File_size |
  6. +------------------+-----------+
  7. | mysql-bin.000013 | 4097 |
  8. | mysql-bin.000014 | 54431 |
  9. | mysql-bin.000015 | 729 |
  10. | mysql-bin.000016 | 107 |
  11. +------------------+-----------+

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)

    语法:

[sql] view plain copy

  1. RESET MASTER;

解释:

该方法可以删除列于索引文件中的所有二进制日志,把二进制日志索引文件重新设置为空,并创建一个以.000001为后缀新的二进制日志文件。

该语法一般只用在主从环境下初次建立复制时。

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

    主从环境下的配置步骤:

    a. 启动master和slave,开启replication(即复制)

    b. 在master上运行一些测试的语句,看数据是否能够复制到 slave上面

    c. 当复制运行正常的话,就在从上stop slave 然后执行 reset slave,去掉不需要的数据 

    d. 在master上面执行reset master 清除测试产生的数据

2 使用到的命令列表

[sql] view plain copy

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


****************************************************************************************

****************************************************************************************