mysql數(shù)據(jù)庫(kù)日志binlog保存時(shí)效問題(expire_logs_days)
一、設(shè)置語(yǔ)法
1、方法一
編輯/etc/my.cnf文件,在[mysqld]節(jié)點(diǎn)中增加如下兩行
max_binlog_size = 500M expire_logs_days = 15
max_binlog_size
:bin log日志每達(dá)到設(shè)定大小后,會(huì)使用新的bin log日志。如mysql-bin.000002達(dá)到500M后,創(chuàng)建并使用mysql-bin.000003文件作為日志記錄。expire_logs_days
:保留指定日期范圍內(nèi)的bin log歷史日志,上示例設(shè)置的15天內(nèi)。
2、方法二
-- mysql8.0以下版本查看當(dāng)前數(shù)據(jù)庫(kù)日志binlog保存時(shí)效 以天為單位,默認(rèn)0 永不過期,最多只能設(shè)置99天 show variables like 'expire_logs_days'; set global expire_logs_days=60; -- mysql8.0以上版本通過設(shè)置全局參數(shù)binlog_expire_logs_seconds修改binlog保存時(shí)間 以秒為單位;默認(rèn)2592000 30天 ? 14400 ? 4小時(shí);86400 ?1天;259200 ?3天 show variables like '%binlog_expire_logs_seconds%'; set global binlog_expire_logs_seconds=259200;
二、過期刪除策略
總結(jié):
通過下面的實(shí)驗(yàn),對(duì)于mysql binlog過期刪除策略,我們可以做出如下推測(cè)。
1. mysql是根據(jù)binlog文件的操作系統(tǒng)最近修改時(shí)間,來(lái)判斷binlog是否過期(而不是根據(jù)binlog日志中事物發(fā)生的時(shí)間)。
2. 在觸發(fā)mysql過期刪除時(shí),mysql先檢查*bin.index文件,找到目前最老的binlog,然后檢查該文件的系統(tǒng)時(shí)間,會(huì)有如下兩種情況:
1) 如果發(fā)現(xiàn)該文件未過期,則認(rèn)為目前沒有binlog日志過期,不進(jìn)行刪除,即使此時(shí)有其他binlog已過期。
2) 如果發(fā)現(xiàn)該文件已經(jīng)過期,則會(huì)找下一個(gè)binlog,判斷是否過期,同樣存在兩種情況(過期或者未過期),如此往復(fù),直到找到第一個(gè)過期的binlog 即停止繼續(xù)查找,并刪除該binlog及所有該binlog之前的所有日志
- 1. 查看數(shù)據(jù)庫(kù)binlog列表
1) mysql> show binary logs; +-----------------+------------+ | Log_name ? ? ? ?| File_size ?| +-----------------+------------+ | 3306-bin.000006 | 1074742033 | | 3306-bin.000007 | 1074580678 | | 3306-bin.000008 | 1074739627 | | 3306-bin.000009 | ?250635228 | | 3306-bin.000010 | ? ? ? ?120 | +-----------------+------------+ 5 rows in set (0.00 sec) ? 2)? ls -lrt total 7402312 -rw-r--r-- 1 root ?root ? ? ? ?1747 Mar 25 10:06 test -rw-rw---- 1 mysql mysql 1074742032 May ?4 16:48 3306-bin.000006 -rw-rw---- 1 mysql mysql 1074580678 May ?4 16:54 3306-bin.000007 -rw-rw---- 1 mysql mysql 1074739627 May ?4 17:00 3306-bin.000008 -rw-rw---- 1 mysql mysql ? ? ? ?168 May ?4 17:00 3306-bin.index -rw-rw---- 1 mysql mysql ?250635182 May ?4 17:02 3306-bin.000009 -rw-rw---- 1 mysql mysql ? 10448198 May 27 05:04 slow3306.log -rw-r----- 1 mysql root ? ? 1096759 May 27 05:06 error3306.log -rw-rw---- 1 mysql mysql 4093675902 May 27 05:06 general3306.log ##我們看到mysql目前保留著4個(gè)binlog日志,序號(hào)從6到9,當(dāng)前正在使用的為序號(hào)為9的日志
- 2. 設(shè)定binlog過期時(shí)間
set global expire_logs_days=7; ##在第1步中我們可以看到3306-bin.000006,3306-bin.000007,3306-bin.000008 三個(gè)日志都是屬于過期的(因?yàn)?306-bin.000009是當(dāng)前正在使用的日志,所以不是過期日志)
- 3. 修改3306-bin.000006文件系統(tǒng)時(shí)間
- 使用 vi 查看3306-bin.000006文件,不做任何修改保存退出。
- 4. 修改后查看binlog文件時(shí)間
ls -lrt total 7402312 -rw-r--r-- 1 root ?root ? ? ? ?1747 Mar 25 10:06 test -rw-rw---- 1 mysql mysql 1074580678 May ?4 16:54 3306-bin.000007 -rw-rw---- 1 mysql mysql 1074739627 May ?4 17:00 3306-bin.000008 -rw-rw---- 1 mysql mysql ? ? ? ?168 May ?4 17:00 3306-bin.index -rw-rw---- 1 mysql mysql ?250635182 May ?4 17:02 3306-bin.000009 -rw-rw---- 1 mysql mysql ? 10448198 May 27 05:04 slow3306.log -rw-r----- 1 mysql root ? ? 1096759 May 27 05:06 error3306.log -rw-rw---- 1 mysql mysql 4093675902 May 27 05:06 general3306.log -rw-rw---- 1 mysql mysql 1074742033 May 27 10:13 3306-bin.000006 ##3306-bin.000006 日志文件已經(jīng)系統(tǒng)日志已經(jīng)變成當(dāng)天時(shí)間
- 5. flush logs;
##我們知道flush logs;會(huì)觸發(fā)過期日志清除操作
- 6. 查看現(xiàn)有binlog
1) ?mysql> show binary logs; +-----------------+------------+ | Log_name ? ? ? ?| File_size ?| +-----------------+------------+ | 3306-bin.000006 | 1074742033 | | 3306-bin.000007 | 1074580678 | | 3306-bin.000008 | 1074739627 | | 3306-bin.000009 | ?250635228 | | 3306-bin.000010 | ? ? ? ?120 | +-----------------+------------+ 5 rows in set (0.00 sec) ? 2) ?ls -lrt total 7402316 -rw-r--r-- 1 root ?root ? ? ? ?1747 Mar 25 10:06 test -rw-rw---- 1 mysql mysql 1074580678 May ?4 16:54 3306-bin.000007 -rw-rw---- 1 mysql mysql 1074739627 May ?4 17:00 3306-bin.000008 -rw-r----- 1 mysql root ? ? 1096759 May 27 05:06 error3306.log -rw-rw---- 1 mysql mysql 1074742033 May 27 10:13 3306-bin.000006 -rw-rw---- 1 mysql mysql ? 10448370 May 27 10:14 slow3306.log -rw-rw---- 1 mysql mysql 4093676334 May 27 10:14 general3306.log -rw-rw---- 1 mysql mysql ?250635228 May 27 10:14 3306-bin.000009 -rw-rw---- 1 mysql mysql ? ? ? ?120 May 27 10:14 3306-bin.000010 -rw-rw---- 1 mysql mysql ? ? ? ?210 May 27 10:14 3306-bin.index ##我們發(fā)現(xiàn)3306-bin.000006,3306-bin.000007,3306-bin.000008三個(gè)日志并沒有被刪除(此時(shí)3306-bin.000006文件系統(tǒng)時(shí)間為當(dāng)天,3306-bin.000007和3306-bin.000008文件時(shí)間都是4號(hào))
- 7. purge 最早的3306-bin.000006日志
1) ?mysql> purge master logs to '3306-bin.000007'; Query OK, 0 rows affected (0.31 sec) ? 2) ?mysql> show binary logs; +-----------------+------------+ | Log_name ? ? ? ?| File_size ?| +-----------------+------------+ | 3306-bin.000007 | 1074580678 | | 3306-bin.000008 | 1074739627 | | 3306-bin.000009 | ?250635228 | | 3306-bin.000010 | ? ? ? ?120 | +-----------------+------------+ 4 rows in set (0.01 sec) ? 3) ?ls -lrt total 6352756 -rw-r--r-- 1 root ?root ? ? ? ?1747 Mar 25 10:06 test -rw-rw---- 1 mysql mysql 1074580678 May ?4 16:54 3306-bin.000007 -rw-rw---- 1 mysql mysql 1074739627 May ?4 17:00 3306-bin.000008 -rw-r----- 1 mysql root ? ? 1096759 May 27 05:06 error3306.log -rw-rw---- 1 mysql mysql ? 10448370 May 27 10:14 slow3306.log -rw-rw---- 1 mysql mysql ?250635228 May 27 10:14 3306-bin.000009 -rw-rw---- 1 mysql mysql ? ? ? ?120 May 27 10:14 3306-bin.000010 -rw-rw---- 1 mysql mysql ? ? ? ?168 May 27 10:17 3306-bin.index -rw-rw---- 1 mysql mysql 4093676603 May 27 10:17 general3306.log ? ##3306-bin.000006日志已經(jīng)被刪除?
- 8. 再次flush logs;
1) flush logs; mysql> flush logs; Query OK, 0 rows affected (0.30 sec)? 2)查看 binlog mysql> show binary logs; +-----------------+-----------+ | Log_name ???????| File_size | +-----------------+-----------+ | 3306-bin.000009 | 250635228 | | 3306-bin.000010 | ??????166 | | 3306-bin.000011 | ??????120 | +-----------------+-----------+ 3 rows in set (0.00 sec) ? ls -lrt total 4253804 -rw-r--r-- 1 root ?root ???????1747 Mar 25 10:06 test -rw-r----- 1 mysql root ????1096759 May 27 05:06 error3306.log -rw-rw---- 1 mysql mysql ?250635228 May 27 10:14 3306-bin.000009 -rw-rw---- 1 mysql mysql ??10448542 May 27 10:17 slow3306.log -rw-rw---- 1 mysql mysql 4093676814 May 27 10:17 general3306.log -rw-rw---- 1 mysql mysql ???????166 May 27 10:17 3306-bin.000010 -rw-rw---- 1 mysql mysql ???????120 May 27 10:17 3306-bin.000011 -rw-rw---- 1 mysql mysql ???????126 May 27 10:17 3306-bin.index ? ##此時(shí)我們發(fā)現(xiàn)3306-bin.000007,3306-bin.000008日志已經(jīng)被自動(dòng)刪除
- 9.獲取binlog文件列表
show binary logs;
- 查看指定binlog文件的內(nèi)容
show binlog events in 'mysql-bin.000002';
- 只查看第一個(gè)binlog文件的內(nèi)容
show binlog events;
最后
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
windows下mysql?8.0.27?安裝配置方法圖文教程
這篇文章主要為大家詳細(xì)介紹了windows下mysql?8.0.27?安裝配置方法圖文教程,文中安裝步驟介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04Mysql InnoDB引擎的索引與存儲(chǔ)結(jié)構(gòu)詳解
這篇文章主要給大家介紹了Mysql InnoDB引擎的索引與存儲(chǔ)結(jié)構(gòu)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-01-01- 從這個(gè)基本語(yǔ)法可以看出,最簡(jiǎn)單的SELECT語(yǔ)句是SELECT select_list,實(shí)際上利用這個(gè)最簡(jiǎn)單的SELECT語(yǔ)句,你也可以完成許多你期待的功能,首先你能利用它進(jìn)行MySQL所支持的任何運(yùn)算,例如:SELECT 1+1,它將返回2;其次,你也能利用它給變量賦值,而在PHP中,運(yùn)用SELECT語(yǔ)句的這種功能,你就可以自由地運(yùn)用MySQL的函數(shù)為PHP程序進(jìn)行各種運(yùn)算,并賦值給變量。在很多的時(shí)候,你會(huì)發(fā)現(xiàn)MySQL擁有許多比PHP更為功能強(qiáng)大的函數(shù)。2008-04-04
DataGrip連接Mysql并創(chuàng)建數(shù)據(jù)庫(kù)的方法實(shí)現(xiàn)
本文主要介紹了DataGrip連接Mysql并創(chuàng)建數(shù)據(jù)庫(kù)的方法實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02