程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL數據庫日志的管理與維護

MySQL數據庫日志的管理與維護

編輯:MySQL綜合教程

MySQL數據庫主要有5種類型的日志,分別為慢查詢日志(log-slow-queries),二進制日志(log-bin),錯誤日志(log-error),查詢日志(log),更新日志(log-update)。在新的MySQL版本中,已取消了更新日志,可以用二進制日志來替代這個功能。文章側重講解慢查詢日志和二進制日志。

慢查詢日志(log-slow-queries)

MySQL慢查詢,指的是查詢消耗時間較多,或者沒有使用索引的查詢,MySQL可以同時記錄這兩種情況:

# 慢日志保存路徑
log-slow-queries = slow.log

# 超過2秒的查詢
long_query_time = 2

# 沒有使用索引的查詢
log-queries-not-using-indexes二進制日志(log-bin)

在MySQL中,如果啟用二進制日志記錄,則MySQL的變更修改都會被記錄到日志文件中:
mysql> show variables like 'log_bin'; 
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin       | ON    |
+---------------+-------+
1 row in set

如果想關閉bin日志的記錄,可以修改配置文件my.ini,把裡面的log-bin這一行注釋掉,重啟mysql服務。

查看的數據庫的bin日志:
mysql> show binary logs;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000001 |    946525 |
+------------------+-----------+
1 row in set

如果沒有主從復制,可以通過以下方式,重置數據庫日志,清除之前的日志文件:
mysql> reset master;
Query OK, 0 rows affected 

但是如果存在復制關系,應當通過PURGE的方式來清理bin日志:
語法如下:
PURGE MASTER LOGS TO 'log_name';
PURGE MASTER LOGS BEFORE 'date';

用於刪除列於在指定的日志或日期之前的日志索引中的所有二進制日志。這些日志也會從記錄在日志索引文件中的清單中被刪除。

例如:
PURGE MASTER LOGS TO 'mysql-bin.010';
PURGE MASTER LOGS BEFORE '2008-06-23 15:00:00';

清除3天前的 binlog
PURGE MASTER LOGS BEFORE DATE_SUB( NOW( ), INTERVAL 3 DAY);BEFORE變量的date自變量可以為’YYYY-MM-DD hh:mm:ss’格式。

如果有主從復制,則注意以下幾個問題:

1、從服務器是活動的,並且剛好在讀取你正在試圖刪除的日志之一,那麼執行這個命令不會起作用,而是觸發一個錯誤。

2、從服務器是停止的,你碰巧清理了其想要讀取的日志之一,則從服務器啟動後不能復制。

3、從服務器是活動的,沒有讀取你試圖刪除的日志,那個這個命令是安全的,而且執行這個命令時從服務器不需要停止工作。

要清理日志,需按照以下步驟:

1. 在每個從屬服務器上,使用SHOW SLAVE STATUS來檢查它正在讀取哪個日志。

2. 使用SHOW MASTER LOGS獲得主服務器上的一系列日志。

3. 在所有的從屬服務器中判定最早的日志。這個是目標日志。如果所有的從屬服務器是更新的,這是清單上的最後一個日志。

4. 備份你將要刪除的所有日志。(這個步驟是自選的,但是建議采用。)

5. 清理所有的日志,但是不包括目標日志,因為從服務器還要跟它同步

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved