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;