mysql的binlog日志删除与限制大小

现象:网站访问越来越慢,最后无法访问了,经过检查发现磁盘满了。仔细查询下来确认是由于mysql的binlog太多太大占用了空间。

分析过程及解决方案:通常出现这种问题都应该登录服务器检查磁盘、内存和进程使用的情况,通过top、df –h和free –m来检查,发现磁盘空间满了。再进一步通过du –sh对可以的目录进行检查,发现是mysql的binlog占用空间过大。清理binlog的方法如下:

1) 设置日志保留时长expire_logs_days自动删除
查看当前日志保存天数:

 代码如下 复制代码

show variables like '%expire_logs_days%';

这个默认是0,也就是logs不过期,可通过设置全局的参数,使他临时生效:
set global expire_logs_days=7;
设置了只保留7天BINLOG, 下次重启mysql这个参数默认会失败,所以需在my.cnf中设置
expire_logs_days = 7

2) 手动删除BINLOG (purge binary logs)

用于删除列于在指定的日志或日期之前的日志索引中的所有二进制日志。这些日志也会从记录在日志索引文件

 代码如下 复制代码

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

例如:

 代码如下 复制代码

PURGE MASTER LOGS TO 'mysql-bin.010';
PURGE MASTER LOGS BEFORE '2008-06-22 13:00:00';
PURGE MASTER LOGS BEFORE DATE_SUB( NOW( ), INTERVAL 3 DAY);

补充

清理日志步骤

1.查找日志档案

 代码如下 复制代码
mysql> show binary logs;
+----------------+-----------+
| Log_name       | File_size |
+----------------+-----------+
| ablelee.000001 | 150462942 |
| ablelee.000002 |       125 |
| ablelee.000003 |       106 |
+----------------+-----------+

2.删除bin-log(删除ablelee.000003之前的而没有包含ablelee.000003)

 代码如下 复制代码

mysql> purge binary logs to 'ablelee.000003';
Query OK, 0 rows affected (0.16 sec)

3.  查询结果(现在只有一条记录了.)

 代码如下 复制代码

mysql> show binlog eventsG
*************************** 1. row ***************************
   Log_name: ablelee.000003
        Pos: 4
 Event_type: Format_desc
  Server_id: 1
End_log_pos: 106
       Info: Server ver: 5.1.26-rc-log, Binlog ver: 4
1 row in set (0.01 sec)
(ablelee.000001和ablelee.000002已被删除)
mysql> show binary logs;
+----------------+-----------+
| Log_name       | File_size |
+----------------+-----------+
| ablelee.000003 |       106 |
+----------------+-----------+
1 row in set (0.00 sec)

 
(删除的其它格式运用!)

 代码如下 复制代码
PURGE {MASTER | BINARY} LOGS TO 'log_name'
PURGE {MASTER | BINARY} LOGS BEFORE 'date'

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

 代码如下 复制代码
PURGE MASTER LOGS TO 'mysql-bin.010';
PURGE MASTER LOGS BEFORE '2008-06-22 13:00:00';

清除3天前的 binlog

 代码如下 复制代码
PURGE MASTER LOGS BEFORE DATE_SUB( NOW( ), INTERVAL 3 DAY);

BEFORE变量的date自变量可以为'YYYY-MM-DD hh:mm:ss'格式。MASTER和BINARY是同义词。
如果您有一个活性的从属服务器,该服务器当前正在读取您正在试图删除的日志之一,则本语句不会起作用,而是会失败,并伴随一个错误。不过,如果从属服务器是休止的,并且您碰巧清理了其想要读取的日志之一,则从属服务器启动后不能复制。当从属服务器正在复制时,本语句可以安全运行。您不需要停止它们。
要清理日志,需按照以下步骤:

1. 在每个从属服务器上,使用SHOW SLAVE STATUS来检查它正在读取哪个日志。
2. 使用SHOW MASTER LOGS获得主服务器上的一系列日志。
3. 在所有的从属服务器中判定最早的日志。这个是目标日志。如果所有的从属服务器是更新的,这是清单上的最后一个日志。

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

5. 清理所有的日志,但是不包括目标日志

时间: 2024-09-09 12:20:39

mysql的binlog日志删除与限制大小的相关文章

mysql利用binlog日志恢复数据库的例子

binlog日志用于记录所有更新了数据或者已经潜在更新了数据的所有语句.语句以"事件"的形式保存,它描述数据更改.当我们因为某种原因导致数据库出现故障时,就可以利用binlog日志来挽回(前提是已经配置好了binlog),接下来我们来配置 一.开启mysql-binlog日志 在mysql配置文件my.cnf加上如下配置  代码如下 复制代码 [mysqld] log-bin=mysql-bin 重启mysql  代码如下 复制代码   service mysqld restart 二

mysql中bin-log日志操作命令

查看日志是否开启 1).可以通过Mysql配置文件my.cnf来确认(Mysql默认开启二进制日志记录): # Replication Master Server (default) # binary logging is required for replication log-bin=mysql-bin 刷新日志 flush logs; 查看当前日志位置 show master status; 查看当前所有日志 show master logs; 清空所有的bin-log日志 reset m

MySQL的binlog日志

binlog 基本认识 MySQL的二进制日志可以说是MySQL最重要的日志了,它记录了所有的DDL和DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务安全型的. 一般来说开启二进制日志大概会有1%的性能损耗(参见MySQL官方中文手册 5.1.24版).二进制有两个最重要的使用场景: 其一:MySQL Replication在Master端开启binlog,Mster把它的二进制日志传递给slaves来达到master-slave数据一致

安全删除mysql的binlog日志文件

1. 删除某个时间点以前的binlog  代码如下 复制代码 PURGE MASTER LOGS BEFORE '2013-06-22 22:46:26′; 2. 删除某文件以前的binlog  代码如下 复制代码 PURGE MASTER LOGS TO 'mysql-bin.010′;

pdo,mysql 中binlog日志记录的一个 bug

最近发现数据库同步总是出问题,最诡异的时,主从数据库写入的数据不一样,我勒个去.程浩同学看了半天终于找到原因,原来是PDO的一个大坑,加上binlog的一个大坑. 首先声明,这篇文章有很强的攻击性,如果你利用这里面写的东西攻击,所造成的一切后果,自负!        起因:       2010/12/15 我的领导,突然要求我们开始折腾一下机器.主要的目的是,没做备份的,做一下备份,单个的数据库做主从,线上的机器要做一个能快速恢复的热备份.经过检查发现机器若干台需要整理,于是开始一一处理,其他

MySQL设置binlog日志的有效期自动回收

设置日志保留天数,到期后自动删除 查看当前日志保存天数: show variables like '%expire_logs_days%'; 默认是0,即永不过期.  通过设置全局参数修改: set global expire_logs_days=30; 设置为保存30天 或者修改 my.cnf 或 my.ini 中的 expire_logs_days = 30 若没有则添加上 重启后生效!

MySQL 自动清理binlog日志的方法_Mysql

说明: 开启MySQL binlog日志的服务器,如果不设置自动清理日志,默认binlog日志一直保留着,时间一长,服务器磁盘空间被binlog日志占满,导致MySQL数据库出错. 使用下面方法可以安全清理binlog日志 一.没有主从同步的情况下清理日志 mysql -uroot -p123456 -e 'PURGE MASTER LOGS BEFORE DATE_SUB( NOW( ),INTERVAL 5 DAY)'; #mysql 定时清理5天前的binlog mysql -u root

学习mysql的binlog配置

1.基础知识 日志是把数据库的每一个变化都记载到一个专用的文件里,这种文件就叫做日志文件.mysql默认只开启错误日志,因为过多的日志将会影响系统的处理性能. 在mysql5.0以前版本支持文本格式和二进制格式的日志,但是在mysql5.0后版本就只支持二进制格式的日志.因为二进制日志在性能.信息处理等方面有更多的优点. 2.启用mysql二进制日志 mysql二进制日志由配置文件my.cnf的log-bin选项负责启用的. mysql服务器默认会在数据根目录创建两个新文件:XXX-bin.00

mysql关闭与删除bin-log日志详解

关闭bin-log日志 当开启bin-log日志时,会生成很多mysql-bin.0000*类似的文件,而且可能会占用很大的硬盘空间.对于自己的测试机器或硬盘比较紧张的vps,而又不需要做master,slave的配置,完全可以关闭日志功能. 关闭操作很简单,找到配置文件my.cnf,对于linux,一般默认在/etc目录下,打开此文件,使用井号(#)注释掉如下两个配置项目即可.  代码如下 复制代码 log-bin=mysql-bin binlog_format=mixed 例 vi /etc