溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

mysql數(shù)據(jù)庫日志binlog保存時(shí)效問題如何解決

發(fā)布時(shí)間:2023-03-09 11:14:55 來源:億速云 閱讀:137 作者:iii 欄目:MySQL數(shù)據(jù)庫

本篇內(nèi)容介紹了“mysql數(shù)據(jù)庫日志binlog保存時(shí)效問題如何解決”的有關(guān)知識,在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

一、設(shè)置語法

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ù)庫日志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),對于mysql binlog過期刪除策略,我們可以做出如下推測。

1. mysql是根據(jù)binlog文件的操作系統(tǒng)最近修改時(shí)間,來判斷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ù)庫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日志,序號從6到9,當(dāng)前正在使用的為序號為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號)
  • 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;

“mysql數(shù)據(jù)庫日志binlog保存時(shí)效問題如何解決”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI