久久精品水蜜桃av综合天堂,久久精品丝袜高跟鞋,精品国产肉丝袜久久,国产一区二区三区色噜噜,黑人video粗暴亚裔

Discuz:MySQL備份、優(yōu)化與故障處理

來自站長百科
跳轉(zhuǎn)至: 導(dǎo)航、? 搜索

導(dǎo)航: 上一級 | Discuz | 首頁 | PhpWind | 動網(wǎng)論壇 | vBulletin | phpBB | MolyX | Discuz!NT

MySQL 是一種高效快速的中小型數(shù)據(jù)庫系統(tǒng),這套系統(tǒng)的讀寫速度,尤其是讀速度可以媲美和超過很多昂貴的商業(yè)數(shù)據(jù)庫系統(tǒng),同時其功能也完全可以滿足一般網(wǎng)絡(luò)應(yīng)用軟件的需要,適合為論壇等軟件構(gòu)建的數(shù)據(jù)庫支撐環(huán)境。Discuz! 的 MySQL 版本充分可以充分發(fā)揮該數(shù)據(jù)庫軟件的優(yōu)勢,更加優(yōu)化的進行數(shù)據(jù)庫操作,最大限度的保證了系統(tǒng)的穩(wěn)定。然而,在實際使用中,為了使得數(shù)據(jù)庫服務(wù)器運行在最佳狀態(tài),您可能仍然需要做一些優(yōu)化,或在故障時進行必要的維修操作。本文將對 MySQL 系統(tǒng)的日常使用、常規(guī)優(yōu)化方案和故障恢復(fù)作以簡要說明。

數(shù)據(jù)備份與恢復(fù)

  • 最快的備份方法:直接文件復(fù)制

MySQL 的數(shù)據(jù)庫文件支持直接復(fù)制(Hot-copy),您在任意類型操作系統(tǒng)的服務(wù)器中將數(shù)據(jù)文件復(fù)制下來,拷貝到另外的一臺服務(wù)器的 MySQL 數(shù)據(jù)目錄,只要數(shù)據(jù)庫軟件版本不相差太多(例如不是 3.22 和 3.23/4.0),您可以立即直接使用復(fù)制過來的完整數(shù)據(jù)文件?;谶@種特性您可以使用最短的時間完成數(shù)據(jù)備份。

按照常見的安裝習(xí)慣,Unix 版本的 MySQL 數(shù)據(jù)目錄通??赡転椋ú幌抻谙铝校?

                 /var/lib/mysql/ 
                /usr/local/mysql/data/ 
                /usr/local/mysql/var/ 

Windows 版本的 MySQL 數(shù)據(jù)目錄通??赡転椋ú幌抻谙铝校?

               c:\mysql\data\ 
               d:\mysql\data\ 
               x:\mysql\data\ 

在數(shù)據(jù)目錄下,可能有多個以數(shù)據(jù)庫名命名的子目錄,將建議您在直接復(fù)制(Hot-copy)的時候盡量把數(shù)據(jù)庫服務(wù)器停止,這樣備份的數(shù)據(jù)會較少出錯。如果不方便停止服務(wù)器,又恰好在某一文件的某一部分上,備份和數(shù)據(jù)庫服務(wù)器寫入同時進行,則可能造成拷貝下來的數(shù)據(jù)文件存在錯誤。但這種錯誤通常不致命,可以經(jīng)過修復(fù)而恢復(fù),修復(fù)的方法將在后面的部分作以說明。

如果需要恢復(fù)某些數(shù)據(jù)表,只需先把數(shù)據(jù)庫停止,把備份的文件拷貝到原有的目錄中覆蓋即可。注意在 Unix 系統(tǒng)中,需要檢查覆蓋后的文件屬性和屬主,以免無法被 MySQL 讀取而報錯。

本方法只適合擁有獨立服務(wù)器的用戶使用,虛擬主機用戶不在此列。

  • 較快而安全的備份方法:mysqldump

MySQL 軟件本身提供了將數(shù)據(jù)內(nèi)容導(dǎo)出為 SQL 文件的工具——mysqldump。通過這一方法備份和恢復(fù),較直接文件復(fù)制來說更為安全,但速度慢一些,數(shù)據(jù)表大則更是如此。您可以在 MySQL 程序文件目錄找到備份使用的工具 mysqldump 及恢復(fù)使用的工具 mysql。按照常見的安裝習(xí)慣,Unix 版本的 MySQL 程序文件目錄通??赡転椋ú幌抻谙铝校?/p>

                 /usr/bin/ 
                /usr/local/mysql/bin/ 

Windows 版本的 MySQL 程序文件目錄通??赡転椋ú幌抻谙铝校?

                c:\mysql\bin\ 
                d:\mysql\bin\ 
                x:\mysql\bin\ 

備份和恢復(fù)的命令分別為(其中斜體字表示需要替換相關(guān)的內(nèi)容):

      備份:mysqldump --force --add-drop-table --extended-insert -h"數(shù)據(jù)庫主機名" -u"用戶名" -p"密碼" "數(shù)據(jù)庫名" > 備份數(shù)據(jù)文件名 
      恢復(fù):mysql -h"數(shù)據(jù)庫主機名" -u"用戶名" -p"密碼" "數(shù)據(jù)庫名" < 備份數(shù)據(jù)文件名

Discuz! 在系統(tǒng)設(shè)置中已經(jīng)設(shè)計了此種備份模式(Shell 方式),速度與直接在服務(wù)器終端操作是完全一致的,但不需要記憶命令與參數(shù),只需通過 web 界面修改操作即可。此功能需要備份出,和恢復(fù)到的服務(wù)器上的 PHP 具有 Shell 權(quán)限,您可以嘗試一下即知。

  • 兼容性最好的備份方法:Discuz! 分卷備份

早在 Discuz! 的初期版本就率先在論壇軟件中內(nèi)置了支持大量數(shù)據(jù)備份與恢復(fù)的分卷備份功能,此種方法雖然速度最慢,但具有良好的兼容性,可以在幾乎所有服務(wù)器環(huán)境,包括虛擬主機環(huán)境成功的備份大量數(shù)據(jù)。

分卷備份的使用簡單,您只需在 Discuz! 系統(tǒng)設(shè)置中選擇分卷備份,按照提示進行即可。

在進行數(shù)據(jù)恢復(fù)時,尤其是將備份的數(shù)據(jù)恢復(fù)到另外的服務(wù)器、或另外的數(shù)據(jù)庫中時,您需要事先安裝一個與備份數(shù)據(jù)版本相同的空論壇,確保該空論壇使用和備份數(shù)據(jù)中相同的數(shù)據(jù)表前綴(即 config.inc.php 中的 $tablepre 設(shè)置),同時在設(shè)置管理員時,使用與備份數(shù)據(jù)中相同的一個管理員用戶名、密碼和安全提問,這樣才能保證分卷備份數(shù)據(jù)的導(dǎo)入連貫和成功。

導(dǎo)入前,把備份數(shù)據(jù)文件完整的上傳到服務(wù)器論壇目錄中的 ./forumdata 下,在 系統(tǒng)設(shè)置 的 數(shù)據(jù)庫恢復(fù) 功能中選擇第一卷的文件名,點導(dǎo)入鏈接,之后相關(guān)的分卷數(shù)據(jù)會被自動導(dǎo)入。

同時我們提供了一個數(shù)據(jù)庫恢復(fù)程序,詳情請見《Discuz!工具箱》里面的數(shù)據(jù)恢復(fù)工具。

常規(guī)優(yōu)化方案

  • 建議使用的版本

通常情況下,Unix 類操作系統(tǒng)用戶可以直接使用 MySQL 官方提供的已經(jīng)編譯好的軟件包,可以避免可能的兼容性問題。如果對一些特殊參數(shù)有要求,也可以自行編譯源碼,但僅建議有豐富經(jīng)驗的用戶使用,如果發(fā)現(xiàn)有不穩(wěn)定或不兼容現(xiàn)象,請檢查相關(guān)的編譯參數(shù)是否存在問題。

目前我們建議使用的 MySQL 版本為 4.0.x 版,相對 3.23 系列,4.0.x 同樣穩(wěn)定和安全,不僅提供了更多的功能、更好的兼容性,而且修復(fù)了很多 3.23 系列的 BUG。在 Windows 系統(tǒng)中,請使用 mysqld-nt(NT/2000/2003 系統(tǒng))作為服務(wù)器,mysqld-max-nt 只有在需要用到 bdb 等功能的時候才需要。

  • 數(shù)據(jù)庫的常規(guī)優(yōu)化

MySQL 本身的配置文件 my.cnf(或 my.ini)中的相關(guān)參數(shù),對整個數(shù)據(jù)庫系統(tǒng)來說尤為重要。針對不同的服務(wù)器內(nèi)存容量,MySQL 程序包中提供了 my-small.cnf、my-medium.cnf、my-large.cnf、my-huge.cnf 四個分別適用于服務(wù)器內(nèi)存不低于 64M、256M、512M、1G 情況下的參數(shù)設(shè)置,您可以根據(jù)自身機器的實際情況,數(shù)據(jù)庫應(yīng)用所占比重,在上述四個文件中提供的參數(shù)基礎(chǔ)上對配置文件進行修改。Unix 類系統(tǒng)用戶,建議將配置文件命名為 my.cnf 放置于 /etc 中。Windows 系統(tǒng)用戶直接在 Winmysqladmin.exe 中對 my.ini 進行修改即可。

除了以上默認(rèn)的配置文件提供的參數(shù)以外,通常情況您還需要在 [mysqld] 后修改或增加以下的參數(shù)以適應(yīng)大部分 web 應(yīng)用程序的需要:

     1. 最大連接數(shù)為 600,以滿足一般應(yīng)用對連接數(shù)的需要:增加 max_connections = 600。根據(jù)我們的經(jīng)驗,500~1000 是較為合適的數(shù)值,
        沒必要將其設(shè)置為超過 1000,那只會造成對資源的浪費。 
     2. 不使用 innodb 和 bdb:增加兩行內(nèi)容,分別是 skip-innodb 和 skip-bdb。Discuz! 和大部分 web 應(yīng)用程序不需要使用此兩項功能,
        因此將其關(guān)閉以節(jié)約內(nèi)存和磁盤空間,提高效率。 
     3. 連接超時時間 5,避免空閑進程過多的內(nèi)存占用:增加 wait_timeout = 5。通過減少超時時間,使得使用 pconnect(長期連接)的用戶在
        利用其不需反復(fù)驗證用戶名和密碼的同時,避免打開過多的空閑進程,減少內(nèi)存消耗。 
     4. 禁止端口連接:增加 skip-networking。如果使用 Unix 類操作系統(tǒng),數(shù)據(jù)庫和 httpd 在同一臺服務(wù)器,且不需要遠程讀取數(shù)據(jù)庫,可增
        設(shè)此項參數(shù),關(guān)閉默認(rèn)的 3306 端口,有效提禁止外部網(wǎng)絡(luò)未經(jīng)授權(quán)的訪問,避免端口被用以進行 DDoS 攻擊。Windows 系統(tǒng)不需要(不能)增加這個參數(shù)。

其他參數(shù)的配置在此不詳述,如果您對服務(wù)器及 MySQL 數(shù)據(jù)庫有相當(dāng)?shù)牧私猓梢酝ㄟ^數(shù)據(jù)庫的日常運行情況,有針對性的進行修改。

  • 數(shù)據(jù)表優(yōu)化(Optimize Table)

當(dāng)您的庫中刪除了大量的數(shù)據(jù)后,您可能會發(fā)現(xiàn)數(shù)據(jù)文件尺寸并沒有減小。這是因為刪除操作后在數(shù)據(jù)文件中留下碎片所致。Discuz! 在系統(tǒng)數(shù)設(shè)置界面提供了數(shù)據(jù)表優(yōu)化的功能,可以去除刪除操作后留下的數(shù)據(jù)文件碎片,減小文件尺寸,加快未來的讀寫操作。您只要在做完批量刪除,或定期(如每一兩個月)進行一次數(shù)據(jù)表優(yōu)化操作即可。

故障解決辦法

由于 MySQL 本身的讀寫及鎖定機制等方面的原因,與一些其他數(shù)據(jù)庫軟件一樣,在特殊情況下的極為頻繁讀寫時,或在服務(wù)器掉電、死機等情況下,相關(guān)的數(shù)據(jù)文件可能會發(fā)生被損壞的情況,通??梢圆捎靡韵碌姆绞郊右越鉀Q。

  • Discuz!修復(fù)工具

可以使用Discuz!工具箱里面修復(fù)數(shù)據(jù)表工具進行修復(fù),詳情請見《Discuz!工具箱》。

這個工具能修復(fù)大多數(shù)常見的數(shù)據(jù)庫錯誤,尤其是錯誤號為 126、127 的錯誤,對 145 錯誤也可修復(fù),同時能對數(shù)據(jù)表在修復(fù)之后進行優(yōu)化。如果一次修復(fù)不成功,可以嘗試多次,或?qū)?shù)據(jù)庫重啟后再試。

  • myisamchk 修復(fù)工具

MySQL 自帶了專門用戶數(shù)據(jù)表檢查和修復(fù)的工具——myisamchk,當(dāng) repair.php 多次修復(fù)均無法成功時,可以在服務(wù)器終端使用 myisamchk 進行修復(fù)。在 MySQL 的程序文件目錄(見《數(shù)據(jù)備份與恢復(fù)》中的說明)可以找到這個工具。

常用的修復(fù)命令為 myisamchk -r 數(shù)據(jù)文件目錄/數(shù)據(jù)表名.MYI,如果 -r 參數(shù)不能奏效,可以先把數(shù)據(jù)文件備份(備份可使用直接文件復(fù)制的方式,詳見《數(shù)據(jù)備份與恢復(fù)》中的說明)后使用 -o 參數(shù)。

另外 MySQL 官方文檔中還提供了針對上面操作均無法奏效時的特殊辦法,如先清空重建數(shù)據(jù)表,然后再用備份的數(shù)據(jù)文件覆蓋等,這種特別復(fù)雜的情況用戶通常不會碰到,因此這里不再做過于深入的研究。

  • 數(shù)據(jù)表經(jīng)常性損壞的解決方法

首先請確認(rèn)在服務(wù)器硬件不存在問題(如內(nèi)存工作不穩(wěn)定、散熱條件不好等),且使用中的操作系統(tǒng)版本也沒有相關(guān)的 BUG 報告或升級補丁。這種情況下,如果數(shù)據(jù)庫仍出現(xiàn)經(jīng)常性的損壞,請檢查是否 MySQL 的編譯方式或參數(shù)存在問題。通常情況下使用官方提供的編譯好的版本是比較穩(wěn)定的,可以長期使用。如果您鐘愛自行編譯相關(guān)程序,請確認(rèn)您的語言編譯器(如 gcc)和配置的相關(guān)參數(shù)沒有導(dǎo)致不穩(wěn)定的因素。同時,磁盤分區(qū)滿也可能是導(dǎo)致數(shù)據(jù)表經(jīng)常性損壞的原因。網(wǎng)上提供了一些問題的處理方法(英文),需要時可多參考,并針對您的具體服務(wù)器環(huán)境制定解決方案。