安排預防性的維護MYSQL資料庫伺服器

來源:互聯網
上載者:User
mysql|伺服器|資料|資料庫     應該考慮建立一個預防性維護的時間表,以協助自動檢測問題,使得您可以採取措施進行修正:
    1) 執行常規的Database Backup並允許更新日誌。
    2) 安排週期性常規表檢查。通過檢查表,將減少使用備份的機會。這個工作使用cron 作業(一般從運行伺服器所使用的該帳號的crontab 檔案中調用)並且很容易實現。例如,如果您作為mysqladm 使用者運行伺服器,則可以從mysqladm 的crontab 檔案中建立定期檢查。如果您不知道如何使用c r o n,應使用下列命令查看相關的UNIX 人工頁:
    % man cron
    % man crontab
    3) 在伺服器啟動前的系統引導期間檢查資料庫表。機器可能會因早期的崩潰重新啟動。如果是這樣的話,資料庫表可能已被毀壞,應該對它進行檢查。
    為了運行自動的表檢查,可以編寫一個指令碼,將目錄改變為伺服器資料目錄並對所有資料庫表運行myisamchk 和i s a m c h k。我們將在下面討論的指令碼中同時使用這兩個程式。如果您只有MyISAM 表或只有ISAM 表,則只需其中一個程式,可以將無關的那個程式從指令碼中去除。
    myisamchk 和isamchk 都根據表檢查的方式產生某些輸出結果以便瞭解正在檢查哪些表,甚至在沒有問題時也是如此。對於crontab 的項,除非表中有錯誤,否則通常將禁止輸出結果(如果作業產生任何輸出, cron 作業通常產生一個郵件訊息,很少會收到沒有任何問題的表檢查作業的郵件)。如果用--silent 選項調用任一個公用程式,它僅當發現問題時才產生輸出。另外,myisamchk 支援--fast 選項,該選項允許程式跳過自上次檢查以來沒有被修改過的任何錶。
    在伺服器資料目錄中檢查所有表的一個簡單的指令碼如下( DATADIR 應該修改成對應您系統的值):

    實用此指令碼的一個潛在的問題是:如果有許多表,萬用字元模式‘ * / * . M Y I’或‘* / * . I S M’可能會由於“ too many arg um e n t s(過多的參數)”錯誤使外殼程式爆炸。另一個可選擇的指令碼如下(同樣,將DATADIR 改變為對應您系統的值):

    不論您選擇哪種形式的指令碼,筆者都假定您調用的是c h e c k _ mysql_ tables,應確保及時改變該方式使它可執行,然後您手工調用它以驗證它工作是否正常:
    % chmod +x check_mysql_tables
    % chmod_mysql_tables
    在理想情況下應該沒有輸出結果。如果系統不支援外部鎖定,有可能伺服器將在您檢查表時改變它。此時,指令碼可能會把實際沒問題的表報告成有問題的。這有點不幸,但比出現相反的問題要好:當出現某些故障時指令碼報告無問題。如果系統支援外部鎖定,則該問題就
不會出現。
    以下部分將說明如何建立指令碼,使它通過cron 並在系統啟動期間自動執行。在這些小節的例子中,筆者假定指令碼安裝在/usr/users/mysaladm/bin 中。您將需要調整適合自己系統的值。
    如果在您的系統上運行了多個伺服器,將需要修改該過程來檢查每個伺服器資料目錄中的表。您可以使用不同的check_mysql_tables 拷貝來進行,或通過修改它來接收一個命令列參數進行,該參數指定了想要檢查的資料目錄。

用cron 定期檢查表

    假定要想對mysqladm 使用者從crontab 檔案中呼叫指令碼c h e c k _ mysql_ tables。先以該使用者的身份進行註冊,然後用下列命令編輯crontab 檔案:
    % crontab -e
    該命令帶您進入帶有當前crontab 檔案拷貝的編輯器中(如果以前沒有編輯過,此檔案可能是空的)。增加一行到檔案中:
    0 3 * * 0 /usr/users/mysqladm/bin/check_mysql_tables
    它告訴cron 在每個星期日的上午3 時運行此選項。可以按要求改變時間或安排。有關這些選項的格式,請參閱crontab 人工頁。

在系統啟動期間檢查表

    如果您正在使用BSD 風格的系統,並且已經將伺服器的啟動命令增加到/etc/rc.local 或類似的其他檔案中,則可以在啟動伺服器前從對應的檔案中調用c h e c k _ mysql_ tables。
    如果正在使用System V 風格的啟動方法從/etc/rc.d 目錄之一中調用mysql. server,則過程稍有點複雜。這些目錄中的啟動指令碼應該理解start 和stop 參數的含義,以便對系統的啟動和關閉採取相應的操作。為了執行表的檢查,我們可以編寫這樣的指令碼:當參數為start 時調用c h e c k _ mysql_ tables,而當該參數為stop 時不做任何事情。讓我們來調用這樣的一個指令碼
mysql. c h e c k,其內容如下:

    現在,您已經可以使用一個過程來安裝mysql. c h e c k了,該過程類似於在第11章所介紹的安裝mysql.server 的過程。必須給mysql.check 一個運行級目錄中較低的首碼號,才能使得它在mysql.server 前運行。例如,如果在運行級目錄中以S99mysql.server 連結到mysql. server,則應該以S98mysql.check 連結到mysql.check 。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.