Mysql删除binlog⽇志⽅法
⽅法1 RESET MASTER;
解释:
该⽅法可以删除列于索引⽂件中的所有⼆进制⽇志,把⼆进制⽇志索引⽂件重新设置为空,并创建⼀个以.000001为后缀新的⼆进制⽇志⽂件。
该语法⼀般只⽤在主从环境下初次建⽴复制时。
在主从复制进⾏过程中,该语句是⽆效的。
主从环境下的配置步骤:
a. 启动master和slave,开启replication(即复制)
b. 在master上运⾏⼀些测试的语句,看数据是否能够复制到 slave上⾯
c. 当复制运⾏正常的话,就在从上stop slave 然后执⾏ reset slave,去掉不需要的数据
d. 在master上⾯执⾏reset master 清除测试产⽣的数据
mysql下载后的初次使用查看删除前⽇志
MariaDB [cndba]> system ls -ltr /data/mysql10.2.11/mysql-bin*
-rw-rw----. 1 mysql mysql 3543 Dec 15 11:41 /data/mysql10.2.11/mysql-bin.000001
-rw-rw----. 1 mysql mysql 342 Dec 15 11:41 /data/mysql10.2.11/mysql-bin.000002
-rw-rw----. 1 mysql mysql 38 Dec 15 11:41 /data/mysql10.2.11/mysql-bin.index
⽤RESET MASTER命令进⾏删除
MariaDB [cndba]> RESET MASTER;
查看删除后的⽇志
MariaDB [cndba]> system ls -ltr /data/mysql10.2.11/mysql-bin*
-rw-rw----. 1 mysql mysql 328 Dec 15 11:42 /data/mysql10.2.11/mysql-bin.000001
-rw-rw----. 1 mysql mysql 19 Dec 15 11:42 /data/mysql10.2.11/mysql-bin.index
⽅法2:PURGE MASTER LOGS
语法:
PURGE { BINARY | MASTER } LOGS
{ TO 'log_name' | BEFORE datetime_expr }
⽤于删除列于在指定的⽇志或⽇期之前的⽇志索引中的所有⼆进制⽇志。这些⽇志也会从记录在⽇志索引⽂件中的清单中被删除,这样被给定的⽇志成为第⼀个。
实例:
PURGE BINARY LOGS TO 'mysql-bin.000002';
PURGE BINARY LOGS BEFORE '2017-12-15 11:53:59';
分别表⽰:删除mysql-bin.000002之前的⽇志(不包括mysql-bin.000002)
删除2014-04-28 23:59:59时间点之前的⽇志
注意事项:
在删除binlog⽇志同时,也会清理mysql-bin.index的⽂件记录,清理完后命令中指定的⽇志⽂件成为第⼀个。
主从架构下,如果复制正在进⾏中,执⾏该命令是安全的,例如slave正在读取我们要删除的log,该语句将什么也不会做,并返回⼀个错误;如果复制是停⽌的,我们删除了⼀个slave还未读取的⽇志,则复制重新建⽴连接时将会失败。
建议操作步骤:
a 在每个从属服务器上,使⽤SHOW SLAVE STATUS来检查它正在读取哪个⽇志。
b 使⽤SHOW MASTER LOGS获得主服务器上的⼀系列⽇志。
c 在所有的从属服务器中判定最早的⽇志。这个是⽬标⽇志。如果所有的从属服务器是最新的,这是清单上的最后⼀个⽇志。
d 备份您将要删除的所有⽇志。(这个步骤是⾃选的,但是建议采⽤。)
e 清理除⽬标⽇志之外的所有⽇志。
⽅法3 ⼿动删除binlog⽇志⽂件
⼿动删除binlog⽇志⽂件
删除mysql-bin.000003 ⽇志
[root@maridb1 mysql10.2.11]# rm -rf mysql-bin.000003
[root@maridb1 mysql10.2.11]# vi mysql-bin.index
./mysql-bin.000003
./mysql-bin.000004
删除./mysql-bin.000003 这⼀⾏
查看删除后的⽇志
MariaDB [(none)]> system ls -ltr /data/mysql10.2.11/mysql-bin*
-rw-rw----. 1 mysql mysql 328 Dec 15 11:58 /data/mysql10.2.11/mysql-bin.000004 -rw-rw----. 1 mysql mysql 19 Dec 15 11:58 /data/mysql10.2.11/mysql-bin.index
⽅法4:指定过期天数(expire_logs_days)
MariaDB [(none)]> show variables like 'expire_logs_days';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| expire_logs_days | 0 |
+------------------+-------+
1 row in set (0.00 sec)
临时修改过期时间
MariaDB [(none)]> set global expire_logs_days = 60;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> show variables like 'expire_logs_days';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| expire_logs_days | 60 |
+------------------+-------+
1 row in set (0.00 sec)
修改/etc/myf 增加参数
expire_logs_days=60
重启mysql 服务⽣效
刷新⽇志查看,⽇志被清楚
MariaDB [(none)]> flush logs;
Query OK, 0 rows affected (0.03 sec)
MariaDB [(none)]> show master logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000006 | 371 |
+------------------+-----------+
3 rows in set (0.00 sec)
注意事项
在双机复制环境下,应确保过期天数不应⼩于从机追赶主机binlog⽇志的时间。
触发过期删除的条件
每次进⾏ LOG flush的时候会⾃动删除过期的⽇志。
触发log flush的条件为:
1. 重启mysql;
2. BINLOG⽂件⼤⼩达到参数max_binlog_size限制;
3. ⼿⼯执⾏命令。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论