本篇內(nèi)容介紹了“MySQL數(shù)據(jù)庫日志binlog保存時效問題如何解決”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!
成都創(chuàng)新互聯(lián)主要從事網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務。立足成都服務琿春,十年網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務專業(yè),歡迎來電咨詢建站服務:18980820575
編輯/etc/my.cnf文件,在[mysqld]節(jié)點中增加如下兩行
max_binlog_size = 500M expire_logs_days = 15
max_binlog_size
:bin log日志每達到設(shè)定大小后,會使用新的bin log日志。如mysql-bin.000002達到500M后,創(chuàng)建并使用mysql-bin.000003文件作為日志記錄。
expire_logs_days
:保留指定日期范圍內(nèi)的bin log歷史日志,上示例設(shè)置的15天內(nèi)。
-- mysql8.0以下版本查看當前數(shù)據(jù)庫日志binlog保存時效 以天為單位,默認0 永不過期,最多只能設(shè)置99天 show variables like 'expire_logs_days'; set global expire_logs_days=60; -- mysql8.0以上版本通過設(shè)置全局參數(shù)binlog_expire_logs_seconds修改binlog保存時間 以秒為單位;默認2592000 30天 14400 4小時;86400 1天;259200 3天 show variables like '%binlog_expire_logs_seconds%'; set global binlog_expire_logs_seconds=259200;
總結(jié):
通過下面的實驗,對于mysql binlog過期刪除策略,我們可以做出如下推測。
1. mysql是根據(jù)binlog文件的操作系統(tǒng)最近修改時間,來判斷binlog是否過期(而不是根據(jù)binlog日志中事物發(fā)生的時間)。
2. 在觸發(fā)mysql過期刪除時,mysql先檢查*bin.index文件,找到目前最老的binlog,然后檢查該文件的系統(tǒng)時間,會有如下兩種情況:
1) 如果發(fā)現(xiàn)該文件未過期,則認為目前沒有binlog日志過期,不進行刪除,即使此時有其他binlog已過期。
2) 如果發(fā)現(xiàn)該文件已經(jīng)過期,則會找下一個binlog,判斷是否過期,同樣存在兩種情況(過期或者未過期),如此往復,直到找到第一個過期的binlog 即停止繼續(xù)查找,并刪除該binlog及所有該binlog之前的所有日志
1. 查看數(shù)據(jù)庫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個binlog日志,序號從6到9,當前正在使用的為序號為9的日志
2. 設(shè)定binlog過期時間
set global expire_logs_days=7; ##在第1步中我們可以看到3306-bin.000006,3306-bin.000007,3306-bin.000008 三個日志都是屬于過期的(因為3306-bin.000009是當前正在使用的日志,所以不是過期日志)
3. 修改3306-bin.000006文件系統(tǒng)時間
使用 vi 查看3306-bin.000006文件,不做任何修改保存退出。
4. 修改后查看binlog文件時間
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)變成當天時間
5. flush logs;
##我們知道flush logs;會觸發(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三個日志并沒有被刪除(此時3306-bin.000006文件系統(tǒng)時間為當天,3306-bin.000007和3306-bin.000008文件時間都是4號)
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 ##此時我們發(fā)現(xiàn)3306-bin.000007,3306-bin.000008日志已經(jīng)被自動刪除
9.獲取binlog文件列表
show binary logs;
查看指定binlog文件的內(nèi)容
show binlog events in 'mysql-bin.000002';
只查看第一個binlog文件的內(nèi)容
show binlog events;
“mysql數(shù)據(jù)庫日志binlog保存時效問題如何解決”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!