MYSQL教程:檢查資料表和修複資料表

來源:互聯網
上載者:User

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

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

以下是幾點防範的措施:

制定一份Database Backup/恢複計劃,並對計划進行仔細測試。

啟動資料庫伺服器的二進位變更日誌,該功能的系統開銷很小(約為1%),我們沒有理由不這樣做。

定期檢查資料表,防範於未燃。

定期對備份檔案進行備份,以防備份檔案失效。

把MySQL的資料目錄和備份檔案分別放到兩個不同的磁碟機中,以平衡磁碟I/O和增加資料的安全。

檢查/修複資料表

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

也可用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;

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.