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的變更修改都會被記錄到日誌文件中:

[plain] view plain copy
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';  

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

[sql] view plain copy
PURGE MASTER LOGS TO 'mysql-bin.010';  
PURGE MASTER LOGS BEFORE '2008-06-23 15:00:00';  

清除3天前的 binlog

[sql] view plain copy
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. 清理所有的日誌,但是不包括目標日誌,因爲從服務器還要跟它同步

建立一個數據庫表維護規範

在一個定期基礎而非等到問題出現才實施數據庫表的檢查是一個好主意。應該考慮到建立一個預防性維護的時間表,以協助自動問題,是你可以採取措施進行修正:執行常規的數據庫備份並允許更新日誌。安排定期的常規表檢查。通過檢查表,將減少使用備份的機會。這個工作,在Windows下使用計劃任務,Unix使用cron作業(一般從運行服務器所示用的該帳號的crontab文件中調用),並且很容易實現。例如,你作爲mysql用戶運行服務器,則可以從mysql的crontab文件中建立定期檢查。如果你不知道如何使用cron,應使用下列命令查看相關的Unix手冊頁:作爲服務器啓動前的系統引導期間檢查數據庫表。及其可能會因早期的崩潰而重新啓動。如果這樣的花,數據庫表可能已被毀壞,應該對它進行徹底檢查。

創建一個適用於定期維護的腳本

爲了運行自動的表檢查,可以編寫一個腳本,將目錄改變爲服務器數據目錄並對所有的數據庫表進行myisamchk和isamchk。如果你只有MyISAM表或者只有ISAM表,則只需要其中一個程序,可以將無關的那個程序從腳本中註釋掉。該教本可以被cron調用,或者在系統啓動期間被調用。爲維護目的,你能使用myisamchk -s檢查桌子。-s,–silent選項使myisamchk和isamchk以沉默模式運行,只有當錯誤出現時,才僅僅打印消息。另外myisamchk支持–fast選項,該選項允許程序跳過自上次檢查以來沒有被修改過的人和表。


超全面的測試IT技術課程,0元立即加入學習!有需要的朋友戳:


騰訊課堂測試技術學習地址

歡迎轉載,但未經作者同意請保留此段聲明,並在文章頁面明顯位置給出原文鏈接。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章