linux怎么下安全删除mysql二进制日志?

发布时间:2020-12-11编辑:脚本学堂
在linux下安全删除mysql二进制日志文件的方法,mysql二进制日志文件存储了重要的数据库操作信息,删除时务必慎重,可以参考下这里提供的方法。

切记:删除mysqlerjinzhirizhi/ target=_blank class=infotextkey>mysql二进制日志文件前,先停止mysqld服务。

如果只有一台mysql服务器则登录mysql后:
 

复制代码 代码示例:
#删除某个日志之前的日志
PURGE BINARY LOGS TO 'mysql-bin.110';
#或删除某个时间点以前的日志
PURGE BINARY LOGS BEFORE '2011-05-05 00:30:00';
#--或:
flush logs;reset master;

如果是主从数据库,则登录mysql后:
 

复制代码 代码示例:
#在所有从库上检查它正在读取哪个日志,执行SHOW SLAVE STATUS;#清理日志PURGE MASTER LOGS BEFORE '2011-05-05 00:30:00';#然后在主服务器上执行PURGE BINARY LOGS BEFORE '2011-05-05 00:30:00';

自动清理mysql二进制日志:
 

复制代码 代码示例:
#配置my.cnf
#增加expire_logs_days = 天数
#例如保留5天
expire_logs_days = 5


mysql bin-log日志清理

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是同义词。
如果您有一个活性的从属服务器,该服务器当前正在读取您正在试图删除的日志之一,则本语句不会起作用,而是会失败,并伴随一个错误。

不过,如果从属服务器是休止的,并且您碰巧清理了其想要读取的日志之一,则从属服务器启动后不能复制。当从属服务器正在复制时,本语句可以安全运行。不需要停止它们。

清理mysql日志的步骤:
1. 在每个从属服务器上,使用SHOW SLAVE STATUS来检查它正在读取哪个日志。
2. 使用SHOW MASTER LOGS获得主服务器上的一系列日志。
3. 在所有的从属服务器中判定最早的日志。这个是目标日志。如果所有的从属服务器是更新的,这是清单上的最后一个日志。
4. 制作您将要删除的所有日志的备份。(这个步骤是自选的,但是建议采用。)
5. 清理所有的日志,但是不包括目标日志。
用ports安装了mysql以后,过一段时间发现/var空间不足了,查一下,会发现是mysql-bin.000001、mysql-bin.000002等文件占用了空间,那么这些文件是干吗的?这是数据库的操作日志,例如UPDATE一个表,或者DELETE一些数据,即使该语句没有匹配的数据,这个命令也会存储到日志文件中,还包括每个语句执行的时间,也会记录进去的。

两个目的:
1:数据恢复
如果你的数据库出问题了,而你之前有过备份,那么可以看日志文件,找出是哪个命令导致你的数据库出问题了,想办法挽回损失。

2:主从服务器之间同步数据
主服务器上所有的操作都在记录日志中,从服务器可以根据该日志来进行,以确保两个同步。

处理方法分两种情况:
1:只有一个mysql服务器,那么可以简单的注释掉这个选项就行了。
vi /etc/my.cnf把里面的log-bin这一行注释掉,重启mysql服务即可。
2:如果你的环境是主从服务器,那么就需要做以下操作了。
A:在每个从属服务器上,使用SHOW SLAVE STATUS来检查它正在读取哪个日志。
B:使用SHOW MASTER LOGS获得主服务器上的一系列日志。
C:在所有的从属服务器中判定最早的日志,这个是目标日志,如果所有的从属服务器是更新的,就是清单上的最后一个日志。
D:清理所有的日志,但是不包括目标日志,因为从服务器还要跟它同步。

清理日志方法为:
 

PURGE MASTER LOGS TO 'mysql-bin.010';
PURGE MASTER LOGS BEFORE '2008-12-19 21:00:00';

如果确定从服务器已经同步过了,跟主服务器一样了,那么可以直接RESET MASTER将这些文件删除。