mysql中刪除binlog的方法?mysql中如何刪除binlog?


需求描述:

  在mysql中如何刪除binlog,因為隨着數據庫的運行,mysql中產生的binlog會越來越大,有可能把磁盤撐爆了,所以記錄下刪除

  binlog的方法.

操作過程:

1.通過系統參數控制保留多久的binlog

在my.cnf中,加入以下的參數,重啟實例

expire_logs_days = 3             #意思是保留3天的binlog;默認值是0,表示不自動刪除.

備注:設置完該參數之后,當重啟實例,或者刷新日志的時候,就會進行檢查,然后刪除3天之前的日志

2.測試在刷新日志的時候,觸發刪除

  2.1查看當前系統中的二進制文件

[root@testvm data]# ls -ltr mysql-bin.*
-rw-r----- 1 mysql mysql 177 Jul 25 11:58 mysql-bin.000001
-rw-r----- 1 mysql mysql 201 Jul 25 12:17 mysql-bin.000002
-rw-r----- 1 mysql mysql 201 Jul 25 12:17 mysql-bin.000003
-rw-r----- 1 mysql mysql 201 Jul 25 12:17 mysql-bin.000004
-rw-r----- 1 mysql mysql 201 Jul 25 12:17 mysql-bin.000005
-rw-r----- 1 mysql mysql 154 Jul 25 12:17 mysql-bin.000006
-rw-r----- 1 mysql mysql 114 Jul 25 12:17 mysql-bin.index

   2.2修改系統時間為3天之后

[root@testvm data]# date -s "2018-07-28 12:15:00"
Sat Jul 28 12:15:00 CST 2018
[root@testvm data]# clock -w

   2.3執行flush logs刷新日志

[root@testvm data]# ls -ltr mysql-bin.*
-rw-r----- 1 mysql mysql 201 Jul 25 12:17 mysql-bin.000002   #1這個日志已經被刪除了.
-rw-r----- 1 mysql mysql 201 Jul 25 12:17 mysql-bin.000003
-rw-r----- 1 mysql mysql 201 Jul 25 12:17 mysql-bin.000004
-rw-r----- 1 mysql mysql 201 Jul 25 12:17 mysql-bin.000005
-rw-r----- 1 mysql mysql 201 Jul 28 12:15 mysql-bin.000006
-rw-r----- 1 mysql mysql 154 Jul 28 12:15 mysql-bin.000007
-rw-r----- 1 mysql mysql 114 Jul 28 12:15 mysql-bin.index

   2.4查看文件時間,執行flush logs操作

[root@testvm data]# stat mysql-bin.000002
  File: `mysql-bin.000002'
  Size: 201       	Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d	Inode: 276736      Links: 1
Access: (0640/-rw-r-----)  Uid: (  502/   mysql)   Gid: (  502/   mysql)
Access: 2018-07-28 12:15:31.539000285 +0800
Modify: 2018-07-25 12:17:39.528999883 +0800
Change: 2018-07-25 12:17:39.528999883 +0800
[root@testvm data]# ls -ltr mysql-bin.*
-rw-r----- 1 mysql mysql 201 Jul 25 12:17 mysql-bin.000002
-rw-r----- 1 mysql mysql 201 Jul 25 12:17 mysql-bin.000003
-rw-r----- 1 mysql mysql 201 Jul 25 12:17 mysql-bin.000004
-rw-r----- 1 mysql mysql 201 Jul 25 12:17 mysql-bin.000005
-rw-r----- 1 mysql mysql 201 Jul 28 12:15 mysql-bin.000006
-rw-r----- 1 mysql mysql 201 Jul 28 12:17 mysql-bin.000007
-rw-r----- 1 mysql mysql 154 Jul 28 12:17 mysql-bin.000008   #這個生成時間減去標記為黃色的時間必須大於3天,黃色對應的文件才會被刪除.
-rw-r----- 1 mysql mysql 133 Jul 28 12:17 mysql-bin.index
[root@testvm data]# date
Sat Jul 28 12:18:08 CST 2018
[root@testvm data]# ls -ltr mysql-bin.*
-rw-r----- 1 mysql mysql 201 Jul 28 12:15 mysql-bin.000006
-rw-r----- 1 mysql mysql 201 Jul 28 12:17 mysql-bin.000007
-rw-r----- 1 mysql mysql 201 Jul 28 12:18 mysql-bin.000008
-rw-r----- 1 mysql mysql 154 Jul 28 12:18 mysql-bin.000009    #18分執行的時候,3天前的17分的文件就都被刪除了.
-rw-r----- 1 mysql mysql  76 Jul 28 12:18 mysql-bin.index

備注:經過測試,就是,當刷新日志時(寫滿日志文件或者手動執行flush logs操作),在這個時間3天之前的binlog文件都會被刪除.即執行刷新日志時,減去3天,binlog的時間小於這個的都會被刪除.同時呢,當系統啟動的時候也會執行flush logs操作,也會觸發這個刪除binlog的動作.

3.通過puge binary logs命令來進行刪除

  3.1查看當前binlog的信息

mysql> show binary logs;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000006 |       201 |
| mysql-bin.000007 |       201 |
| mysql-bin.000008 |       201 |
| mysql-bin.000009 |       201 |
| mysql-bin.000010 |       201 |
| mysql-bin.000011 |       201 |
| mysql-bin.000012 |       201 |
| mysql-bin.000013 |       201 |
| mysql-bin.000014 |       201 |
| mysql-bin.000015 |       201 |
| mysql-bin.000016 |       201 |
| mysql-bin.000017 |       201 |
| mysql-bin.000018 |       201 |
| mysql-bin.000019 |       201 |
| mysql-bin.000020 |       201 |
| mysql-bin.000021 |       154 |
+------------------+-----------+
16 rows in set (0.00 sec)

   3.2purge刪除binlog

mysql> purge binary logs to 'mysql-bin.000017';
Query OK, 0 rows affected (0.01 sec)

mysql> show binary logs;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000017 |       201 |
| mysql-bin.000018 |       201 |
| mysql-bin.000019 |       201 |
| mysql-bin.000020 |       201 |
| mysql-bin.000021 |       154 |
+------------------+-----------+
5 rows in set (0.00 sec)

備注:通過查詢結果可以知道,在17之前的日志都被清除了.不包括17本身.切記!

4.切記不能在操作系統上直接刪除binlog文件,雖然釋放了空間,但是在Index中,還是有記錄.

[root@testvm data]# ls -ltr mysql-bin.*
-rw-r----- 1 mysql mysql 201 Jul 28 12:42 mysql-bin.000017
-rw-r----- 1 mysql mysql 201 Jul 28 12:42 mysql-bin.000018
-rw-r----- 1 mysql mysql 201 Jul 28 12:42 mysql-bin.000019
-rw-r----- 1 mysql mysql 201 Jul 28 12:42 mysql-bin.000020
-rw-r----- 1 mysql mysql 201 Jul 28 12:45 mysql-bin.000021
-rw-r----- 1 mysql mysql 201 Jul 28 12:45 mysql-bin.000022
-rw-r----- 1 mysql mysql 201 Jul 28 12:45 mysql-bin.000023
-rw-r----- 1 mysql mysql 201 Jul 28 12:45 mysql-bin.000024
-rw-r----- 1 mysql mysql 201 Jul 28 12:45 mysql-bin.000025
-rw-r----- 1 mysql mysql 201 Jul 28 12:45 mysql-bin.000026
-rw-r----- 1 mysql mysql 201 Jul 28 12:45 mysql-bin.000027
-rw-r----- 1 mysql mysql 201 Jul 28 12:45 mysql-bin.000028
-rw-r----- 1 mysql mysql 201 Jul 28 12:45 mysql-bin.000029
-rw-r----- 1 mysql mysql 201 Jul 28 12:45 mysql-bin.000030
-rw-r----- 1 mysql mysql 201 Jul 28 12:45 mysql-bin.000031
-rw-r----- 1 mysql mysql 201 Jul 28 12:45 mysql-bin.000032
-rw-r----- 1 mysql mysql 154 Jul 28 12:45 mysql-bin.000033
-rw-r----- 1 mysql mysql 323 Jul 28 12:45 mysql-bin.index
[root@testvm data]# rm -f mysql-bin.000017 mysql-bin.000018 mysql-bin.000019 mysql-bin.000020
[root@testvm data]# ls -ltr mysql-bin.*
-rw-r----- 1 mysql mysql 201 Jul 28 12:45 mysql-bin.000021
-rw-r----- 1 mysql mysql 201 Jul 28 12:45 mysql-bin.000022
-rw-r----- 1 mysql mysql 201 Jul 28 12:45 mysql-bin.000023
-rw-r----- 1 mysql mysql 201 Jul 28 12:45 mysql-bin.000024
-rw-r----- 1 mysql mysql 201 Jul 28 12:45 mysql-bin.000025
-rw-r----- 1 mysql mysql 201 Jul 28 12:45 mysql-bin.000026
-rw-r----- 1 mysql mysql 201 Jul 28 12:45 mysql-bin.000027
-rw-r----- 1 mysql mysql 201 Jul 28 12:45 mysql-bin.000028
-rw-r----- 1 mysql mysql 201 Jul 28 12:45 mysql-bin.000029
-rw-r----- 1 mysql mysql 201 Jul 28 12:45 mysql-bin.000030
-rw-r----- 1 mysql mysql 201 Jul 28 12:45 mysql-bin.000031
-rw-r----- 1 mysql mysql 201 Jul 28 12:45 mysql-bin.000032
-rw-r----- 1 mysql mysql 154 Jul 28 12:45 mysql-bin.000033
-rw-r----- 1 mysql mysql 323 Jul 28 12:45 mysql-bin.index

 在mysql中查詢binlog信息

mysql> show binary logs;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000017 |         0 |
| mysql-bin.000018 |         0 |
| mysql-bin.000019 |         0 |
| mysql-bin.000020 |         0 |
| mysql-bin.000021 |       201 |
| mysql-bin.000022 |       201 |
| mysql-bin.000023 |       201 |
| mysql-bin.000024 |       201 |
| mysql-bin.000025 |       201 |
| mysql-bin.000026 |       201 |
| mysql-bin.000027 |       201 |
| mysql-bin.000028 |       201 |
| mysql-bin.000029 |       201 |
| mysql-bin.000030 |       201 |
| mysql-bin.000031 |       201 |
| mysql-bin.000032 |       201 |
| mysql-bin.000033 |       154 |
+------------------+-----------+
17 rows in set (0.00 sec)

備注:還記錄了文件的名字,但是文件的大小是0byte.

查看index中的記錄信息

[root@testvm data]# cat mysql-bin.index 
./mysql-bin.000017
./mysql-bin.000018
./mysql-bin.000019
./mysql-bin.000020
./mysql-bin.000021
./mysql-bin.000022
./mysql-bin.000023
./mysql-bin.000024
./mysql-bin.000025
./mysql-bin.000026
./mysql-bin.000027
./mysql-bin.000028
./mysql-bin.000029
./mysql-bin.000030
./mysql-bin.000031
./mysql-bin.000032
./mysql-bin.000033
[root@testvm data]# 

備注:index中還是記錄該信息,認為還是存在的.

重新啟動的時候,會檢查文件是否存在,如果不在會報錯:

mysqld: File './mysql-bin.000017' not found (Errcode: 2 - No such file or directory)
2018-07-28T04:49:02.619409Z 0 [ERROR] Failed to open log (file './mysql-bin.000017', errno 2)
2018-07-28T04:49:02.619416Z 0 [ERROR] Could not open log file
mysqld: File './mysql-bin.000018' not found (Errcode: 2 - No such file or directory)
2018-07-28T04:49:02.619426Z 0 [ERROR] Failed to open log (file './mysql-bin.000018', errno 2)
2018-07-28T04:49:02.619428Z 0 [ERROR] Could not open log file
mysqld: File './mysql-bin.000019' not found (Errcode: 2 - No such file or directory)
2018-07-28T04:49:02.619436Z 0 [ERROR] Failed to open log (file './mysql-bin.000019', errno 2)
2018-07-28T04:49:02.619438Z 0 [ERROR] Could not open log file
mysqld: File './mysql-bin.000020' not found (Errcode: 2 - No such file or directory)
2018-07-28T04:49:02.619445Z 0 [ERROR] Failed to open log (file './mysql-bin.000020', errno 2)
2018-07-28T04:49:02.619447Z 0 [ERROR] Could not open log file

備注:遇到這種問題,直接通過purge binary logs刪除就行了.同時也會更新index文件

 

切記!!不要從操作系統上直接刪除binlog!!!

 

文檔創建時間:2018年7月19日16:02:00


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM