方法1 RESET MASTER;
解釋:
該方法可以刪除列於索引文件中的所有二進制日志,把二進制日志索引文件重新設置為空,並創建一個以.000001為后綴新的二進制日志文件。
該語法一般只用在主從環境下初次建立復制時。
在主從復制進行過程中,該語句是無效的。
主從環境下的配置步驟:
a. 啟動master和slave,開啟replication(即復制)
b. 在master上運行一些測試的語句,看數據是否能夠復制到 slave上面
c. 當復制運行正常的話,就在從上stop slave 然后執行 reset slave,去掉不需要的數據
d. 在master上面執行reset master 清除測試產生的數據
查看刪除前日志
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/my.cnf 增加參數
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. 手工執行命令。
總結
1、我們一般情況采取第三、第四種方式
2、每次執行命令不需重啟即可清楚超期日志