mysql主从binlog日志自动清理及手动删除

问题反馈:

mysql主从,在没有设置自动清理binlog日志的情况下,会产生庞大的同步日志文件,占用磁盘空间。

1 手动清理binlog日志,purge master logs

1.1 删除在“指定日期前”或“指定日志前”的所有二进制binlog日志文件

  PURGE {MASTER | BINARY} LOGS TO ‘log_name‘  
  PURGE {MASTER | BINARY} LOGS BEFORE ‘date‘

实例:

PURGE MASTER LOGS TO ‘MySQL-bin.010‘;  
PURGE MASTER LOGS BEFORE ‘2003-04-02 22:46:26‘; 
    ##BEFORE变量的date格式为‘YYYY-MM-DD hh:mm:ss‘。MASTER/BINARY是同义词。

1.2 主从master-slave集群环境中,删除binlog日志注意问题

1.2.1 从服务器slave正在读取试图删除的binlog,则purge删除操作失败,并返回错误

1.2.2 从服务器slave stop后,master上purge删除的binlog日志,并未被slave读取,则slave启动后不能复制同步主

1.3 清理binlog日志,正确操作步骤

1.3.1 主服务器master上,show master status;获取主服务器上的binlog日志

1.3.2 所有从服务器slave上,show slave status\G;检查正在读取的binlog日志

1.3.3 判定所有从服务器上已同步完成的,最早的日志文件的位置。purge删除的binlog日志必须早于该日志文件。

1.3.4 将要删除的binlog日志备份(建议步骤)

1.3.5 清理判定之前的日志文件

2 自动定期清理binlog日志,设置expire_logs_days参数

2.1 重启mysql,停机修改my.cnf配置文件

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

2.2 不重启mysql,线上修改mysql的exipre_logs_days参数

> show binary logs;
> show variables like ‘%log%‘;
> set global expire_logs_days = 10;

附录:

1.expire_logs_days英文说明

Where X is the number of days you’d like to keep them around. I would recommend 10, but this depends on how busy your MySQL server is and how fast these log files grow. Just make sure it is longer than the slowest slave takes to replicate the data from your master.

Just a side note: You know that you should do this anyway, but make sure you back up your mysql database. The binary log can be used to recover the database in certain situations; so having a backup ensures that if your database server does crash, you will be able to recover the data.

时间: 2024-07-30 11:01:15

mysql主从binlog日志自动清理及手动删除的相关文章

【转载】mysql binlog日志自动清理及手动删除

说明:当开启mysql数据库主从时,会产生大量如mysql-bin.00000* log的文件,这会大量耗费您的硬盘空间.mysql-bin.000001mysql-bin.000002mysql-bin.000003mysql-bin.000004mysql-bin.000005…有三种解决方法:1.关闭mysql主从,关闭binlog:2.开启mysql主从,设置expire_logs_days:3.手动清除binlog文件,> PURGE MASTER LOGS TO ‘MySQL-bin

mysql binlog日志自动清理及手动删除

说明:当开启mysql数据库主从时,会产生大量如mysql-bin.00000* log的文件,这会大量耗费您的硬盘空间.mysql-bin.000001mysql-bin.000002mysql-bin.000003mysql-bin.000004mysql-bin.000005-有三种解决方法:1.关闭mysql主从,关闭binlog:2.开启mysql主从,设置expire_logs_days:3.手动清除binlog文件,> PURGE MASTER LOGS TO 'MySQL-bin

06 : mysql 的 binlog 日志 和slow慢日志 详解

mysql 的 binlog 日志 和slow慢日志 详解 mysql一般常用的日志有三种:1:error错误日志2: binlog日志3:slow日志 下面将详细解释这三种日志: 1.错误日志记录MySQL启动或工作过程中,数据库状态信息,默认就是开启的,数据路径下$hostname.err.也可以指定错误路径:log_error=/var/log/mysql3306.log 2.二进制binlog日志(1)他记录了什么?记录了所有的数据库修改类的命令:DDLDCLDML (2)二进制日志记录

Mysql的binlog日志与mysqlbinlog命令

binlog相关 MySQL 的二进制日志 binlog 可以说是 MySQL 最重要的日志,它记录了所有的 DDL 和 DML 语句(除了数据查询语句select.show等),以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务安全型的.binlog 的主要目的是复制和恢复. Binlog日志的两个最重要的使用场景MySQL主从复制:MySQL Replication在Master端开启binlog,Master把它的二进制日志传递给slaves来达到master-sl

mysql清理binlog日志

mysql的binlog日志过多过大,清理过程. 1.查看binlog日志 mysql> show binary logs; +------------------+-----------+ | Log_name | File_size | +------------------+-----------+ | mysql-bin.000001 | 13255920 | | mysql-bin.000002 | 143716 | | mysql-bin.000003 | 524288119 | |

mysql通过binlog日志来恢复数据

简介 在生产的过程中有这么一个业务场景:比如我在2016-11-19 09:30:00 通过mysqldump的方式备份了数据库,但是在2016-11-19 10:30:00的时候数据库崩溃了,如果通过我们的备份文件来恢复,也只能恢复到 2016-11-19 09:30:00 这个时间点,而9.30分到10:30分这一个小时的数据恢复不了,这时候我们可以通过mysql的binlog日志来恢复没有备份到的这一小时的数据. 1.开启mysql的binlog日志(默认情况下没有开启) #vim /et

MySQL抑制binlog日志中的BINLOG部分

MySQL通过binlog来记录整个数据的变更过程,因此我们只要有MySQL的binlog日志即可完整的还原数据库.MySQL binlog日志记录有3种不同的方式,即:STATEMENT,MIXED,ROW.对于不同的日志模式,生成的binlog有不同的记录方式.对于MIXED(部分SQL语句)和ROW模式是以base-64方式记录,会以BINLOG开头,是一段伪SQL,我们可以用使用base64-output参数来抑制其显示.本文对此给出了描述及演示. 有关mysqlbinlog的用法,请参

mysql将bin-log日志文件转为sql文件

查看mysqlbinlog版本 mysqlbinlog -V [--version] 查看binlog日志开启状态 show variables like '%log_bin%'; mysql打开bin-log日志后,mysql数据库的非查询操作会将记录保存到bin-log文件中.一般bin-log日志文件不能打开查看的,需要用到mysql的工具进行.假设/mysql/data/目录中存放着二进制文件mysql-bin.000011.需要将日志文件mysql-bin.000011中关于数据库ti

自动打包mysql下binlog日志

一.需求 线上一台机器做了rsync,从5台mysql机器拉取binlog日志到本地,之前是手动打包,现在写了个脚本,放到crontab定期执行打包,并删除打包后的的文件. 二.脚本如下 #!/bin/sh # usage:  # nohup sh /tmp/backup_binlog_tar.sh > nohup.out  2>/dev/null  & dir_backup_tar="/data0/backup_log-bin_tar"_`date +%Y-%m-