mysql清理和關(guān)閉binlog日志

MySQL 8.0關(guān)閉binlog默認(rèn)開啟binlog,即使在my.ini或my.cnf的[mysqld]部分沒有。

MySQL中的binlog日志記錄了數(shù)據(jù)庫(kù)中數(shù)據(jù)的變動(dòng),便于對(duì)數(shù)據(jù)的基于時(shí)間點(diǎn)和基于位置的恢復(fù),但是binlog也會(huì)日漸增大,占用很大的磁盤空間,因此,要對(duì)binlog使用正確安全的方法清理掉一部分沒用的日志。

windows


1.登錄mysql數(shù)據(jù)庫(kù),mysql -uroot –p
2.查看binlog是否開啟,log_bin的狀態(tài)未ON,表明binlog日志開啟

mysql> show variables like 'log_%';
+----------------------------------------+---------------------------------------------------------------+
| Variable_name                          | Value                                                         |
+----------------------------------------+---------------------------------------------------------------+
| log_bin                                | ON                                                            |
| log_bin_basename                       | C:\Program Files\mysql-8.0.15-winx64\data\binlog              |
| log_bin_index                          | C:\Program Files\mysql-8.0.15-winx64\data\binlog.index        |
| log_bin_trust_function_creators        | OFF                                                           |
| log_bin_use_v1_row_events              | OFF                                                           |
| log_error                              | C:\Program Files\mysql-8.0.15-winx64\data\DESKTOP-SK4KOON.err |
| log_error_services                     | log_filter_internal; log_sink_internal                        |
| log_error_suppression_list             |                                                               |
| log_error_verbosity                    | 2                                                             |
| log_output                             | FILE                                                          |
| log_queries_not_using_indexes          | OFF                                                           |
| log_slave_updates                      | ON                                                            |
| log_slow_admin_statements              | OFF                                                           |
| log_slow_extra                         | OFF                                                           |
| log_slow_slave_statements              | OFF                                                           |
| log_statements_unsafe_for_binlog       | ON                                                            |
| log_throttle_queries_not_using_indexes | 0                                                             |
| log_timestamps                         | UTC                                                           |
+----------------------------------------+---------------------------------------------------------------+
18 rows in set, 1 warning (0.00 sec)

3.查看binary log(我這個(gè)之前已經(jīng)清理過了)

mysql> show binary logs;
+---------------+-----------+-----------+
| Log_name      | File_size | Encrypted |
+---------------+-----------+-----------+
| binlog.000007 |       199 | No        |
| binlog.000008 |       155 | No        |
+---------------+-----------+-----------+
2 rows in set (0.00 sec)

4.刪除binlog日志文件,切勿刪除正在使用的binlog?。。ㄋ詣h除老年的即可,不要全刪)

不要輕易手動(dòng)去刪除binlog,會(huì)導(dǎo)致binlog.index和真實(shí)存在的binlog不匹配,使用PURGE,根據(jù)自己需求改寫下面命令

mysql> PURGE MASTER LOGS BEFORE DATE_SUB(CURRENT_DATE, INTERVAL 1 DAY);//刪除1天前的binlog日志文件
或者
mysql>purge binary logs before '2019-11-25 13:09:51';  //將指定時(shí)間之前的binlog清掉:
或者
mysql>purge binary logs to 'bin.000055';  //將bin.000055之前的binlog清掉:

5.設(shè)置binlog的過期時(shí)間,binlog失效日期參數(shù)為 binlog_expire_logs_seconds,默認(rèn)2592000(30天)過期,可以設(shè)置 604800(7天)

mysql> show variables like '%expire%';
+--------------------------------+---------+
| Variable_name                  | Value   |
+--------------------------------+---------+
| binlog_expire_logs_seconds     | 2592000 |
| disconnect_on_expired_password | ON      |
| expire_logs_days               | 0       |
+--------------------------------+---------+
3 rows in set (0.00 sec)


mysql> set global  binlog_expire_logs_seconds=60*60*24;
Query OK, 0 rows affected (0.00 sec)


mysql> show variables like '%expire%';
+--------------------------------+---------+
| Variable_name                  | Value   |
+--------------------------------+---------+
| binlog_expire_logs_seconds     | 604800  |
| disconnect_on_expired_password | ON      |
| expire_logs_days               | 0       |
+--------------------------------+---------+
3 rows in set (0.00 sec)


mysql> flush logs;
Query OK, 0 rows affected, 64 warnings (0.16 sec)

binlog_expire_logs_seconds設(shè)置之后不會(huì)立即清除過期的,觸發(fā)條件是:

  • binlog大小超過max_binlog_size
  • 手動(dòng)執(zhí)行flush logs
  • 重新啟動(dòng)時(shí)(MySQL將會(huì)new一個(gè)新文件用于記錄binlog)

如果binlog非常多,不要輕易設(shè)置改參數(shù),有可能導(dǎo)致io爭(zhēng)用,所以我先使用purge命令清除老年的binlog。
過期時(shí)間設(shè)置的要適當(dāng),對(duì)于主從復(fù)制,要看從庫(kù)的延遲決定過期時(shí)間,避免主庫(kù)binlog還未傳到從庫(kù)便因過期而刪除,導(dǎo)致主從不一致!??!

5.5設(shè)置過期時(shí)間也可以直接修改my.ini配置文件,關(guān)閉修改再重啟

expire_logs_days = 7 #自動(dòng)刪除15天前的日志。默認(rèn)值為0,表示從不刪除。

6.如果你希望關(guān)閉binlog
8.0版本情況下,關(guān)閉mysql服務(wù),找到my.ini, 在[mysqld] 下添加 skip-log-bin,然后重啟MySQL,不可以不關(guān)閉的情況下,修改重啟。
在關(guān)閉后,可以下使用reset master把現(xiàn)有的binlog都刪除掉,因?yàn)閎inlog關(guān)閉了,不會(huì)有正在使用的binlog,所以沒問題。

 [mysqld] 
...
...
skip-log-bin

也有說想要關(guān)閉binlog,只將這兩條注釋(添加#),不知道哪個(gè)對(duì),可能都對(duì),或者是版本原因,我沒試

#log-bin=mysql-bin #注釋掉之后,會(huì)關(guān)閉binlog日志
#binlog_format=mixed #注釋掉之后,會(huì)關(guān)閉binlog日志

如果找不到my.ini,可以手動(dòng)打開顯示C盤的隱藏文件選項(xiàng)(不會(huì)百度),就會(huì)出現(xiàn)ProgramData文件夾,找到mysql文件夾,就可以找到my.ini文件




使用RESET MASTER可以刪除任何二進(jìn)制日志文件及其相關(guān)的二進(jìn)制日志索引文件,從而使主數(shù)據(jù)庫(kù)恢復(fù)到開始二進(jìn)制日志記錄之前的狀態(tài)

mysql>RESET MASTER;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容