程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> 更多數據庫知識 >> MYSQL教程:檢查數據表和修復數據表

MYSQL教程:檢查數據表和修復數據表

編輯:更多數據庫知識

數據庫在運行中,會因為人為因素或一些不可抗力因素造成數據損壞。所以為了保護數據的安全和最小停機時間,我們需制定詳細的備份/恢復計劃,並定期對計劃的有效性進行測試。

本章結合MySQL服務器的運行機制和所提供的工具,介紹如何進行數據庫的備份、維護和修復。

以下是幾點防范的措施:

  • 制定一份數據庫備份/恢復計劃,並對計劃進行仔細測試。

  • 啟動數據庫服務器的二進制變更日志,該功能的系統開銷很小(約為1%),我們沒有理由不這樣做。

  • 定期檢查數據表,防范於未燃。

  • 定期對備份文件進行備份,以防備份文件失效。

  • 把MySQL的數據目錄和備份文件分別放到兩個不同的驅動器中,以平衡磁盤I/O和增加數據的安全。

檢查/修復數據表

對數據表進行維護最好通過發出CHECK TABLE(檢查數據表)或REPAIRE TABLE(修復數據表)命令來做,這樣MySQL服務器自動進行表鎖定以協調數據表中數據的讀寫一致性問題。

本文由網頁教學網(http://www.webjx.com)整理發布!轉載請注明出處,謝謝!

也可用myisamchk工具來做數據表的維護,但它直接訪問有關的數據表文件,不通過服務器,所以需人為地協調數據表數據的讀寫一致性問題。使用myisamchk檢查數據表的具體操作步驟如下:

  • 以mysql客戶端程序連接服務器,並發出LOCK TABLE命令,以只讀方式鎖住數據表。

    % mysql
    mysql> use db
    mysql> LOCK TABLE table_name READ;     #以只讀方式鎖定表
    mysql> FLUSH TABLE table_name;        #關閉數據表文件,並把內存中的信息寫入磁盤
    
  • 保持上面的狀態不退出,另開一個shell窗口,用以下命令維護(檢查)數據表。

    % myisamchk table_name
    
        如果不保持上面狀態,退出mysql會話,則表鎖定會自動取消。
  • 維護完成,切換回mysql狀態的shell窗口,發出以下命令解除表鎖定。

    mysql> UNLOCK TABLES;
    

使用myisamchk修復數據表的具體操作步驟如下:

  • 進行修復操作需以讀/寫方式鎖定數據表,命令如下:

    % mysql
    mysql> use db
    mysql> LOCK TABLE table_name WRITE;     #以讀/寫方式鎖定數據表
    mysql> FLUSH TABLE table_name;
    
  • 保持mysql客戶端連接狀態,切換到第二個shell窗口,運行修復命令:

    % myisamchk --recover table_name
    
        運行修復命令前最好先備份一下數據文件。
  • 修復完成後,切換回mysql客戶端連接窗口,運行以下命令解除數據表鎖定:

    mysql> FLUSH TABLE table_name;     #使服務器覺察新產生的索引文件
    mysql> UNLOCK TABLE;
    

還可用以下命令鎖定所有表,鎖定後,所有用戶就只能讀不能寫數據,這樣就可使我們能安全地拷貝數據文件。

mysql> FLUSH TABLES WITH READ LOCK;
下面是解除鎖語句:
mysql> UNLOCK TABLES;
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved