IT貓撲網(wǎng):您身邊最放心的安全下載站! 最新更新|軟件分類|軟件專題|手機(jī)版|論壇轉(zhuǎn)貼|軟件發(fā)布

您當(dāng)前所在位置:首頁數(shù)據(jù)庫MYSQL → 備份和拷貝MYSQL數(shù)據(jù)庫

備份和拷貝MYSQL數(shù)據(jù)庫

時間:2015/6/28來源:IT貓撲網(wǎng)作者:網(wǎng)管聯(lián)盟我要評論(0)

    重要的是在表丟失和毀壞時備份數(shù)據(jù)庫。如果系統(tǒng)發(fā)生崩潰,您就能夠?qū)⒈砘謴?fù)到崩潰時刻的狀態(tài),并盡可能不丟失數(shù)據(jù)。同樣,錯發(fā)DROP DATABASE 或DROP TABLE 命令的用戶可能會向您請求進(jìn)行數(shù)據(jù)恢復(fù)。有時,這是由mysql管理員引起的破壞,管理員試圖通過使用像vi 或emacs 這樣的編輯器直接編輯表文件而毀壞了它們。這樣做對表來說肯定是干了壞事。

    備份數(shù)據(jù)庫的兩種主要方法是使用mysqldump 程序或直接拷貝數(shù)據(jù)庫文件(如便用c p、tar 或c p i o)。每種方法都有自己的優(yōu)點(diǎn)和缺點(diǎn):

    mysqldump 與MySQL服務(wù)器聯(lián)合進(jìn)行操作。直接拷貝方法與服務(wù)器相脫離,因此必須采取措施確保在進(jìn)行拷貝時沒有客戶機(jī)在修改這些表。這個問題與利用文件系統(tǒng)備份來備份數(shù)據(jù)庫的問題相同:如果數(shù)據(jù)庫表在文件系統(tǒng)備份時進(jìn)行更新,則進(jìn)行備份的表文件處于非一致的狀態(tài),并且對于今后恢復(fù)該表沒有意義。文件系統(tǒng)備份和直接拷貝文件的區(qū)別是:對于后者,您具有控制備份進(jìn)度的權(quán)利,因此可以采取措施確保服務(wù)器使表處于靜止?fàn)顟B(tài)。

    mysqldump 比直接拷貝技術(shù)要慢

    mysqldump 產(chǎn)生可移植到其他機(jī)器、甚至具有不同硬件結(jié)構(gòu)的機(jī)器上的文本文件。直接拷貝文件不能夠移植到其他機(jī)器上,除非要拷貝的表使用MyISAM 存儲格式。ISAM 表只能在具有相同硬件結(jié)構(gòu)的機(jī)器之間進(jìn)行拷貝。例如,將文件從S PARC 的Solaris 機(jī)器拷貝到Intel 的Solaris 機(jī)器(或者相反)是行不通的。由MySQL3.23 引進(jìn)的MyISAM 表存儲格式可以解決這個問題,因?yàn)樵摳袷脚c機(jī)器獨(dú)立。因此,如果以下兩個條件都滿足的話,直接拷貝文件可以移植到具有不同硬件結(jié)構(gòu)的機(jī)器上:即另一臺機(jī)器上也必須運(yùn)行MySQL3.23 以上的版本,并且文件必須表示成MyISAM 表,而不是ISAM 表。

    不論選擇哪種備份方法,都有某些原則,您必須堅(jiān)持這些原則,才能確保在需要恢復(fù)數(shù)據(jù)庫內(nèi)容時得到最好的結(jié)果:

    定期執(zhí)行備份。設(shè)置一個時間表并堅(jiān)持使用它。

    告訴服務(wù)器運(yùn)行更新日志。更新日志在您需要恢復(fù)崩潰后的數(shù)據(jù)庫時給予幫助。在使用備份文件將數(shù)據(jù)庫恢復(fù)到備份時刻的狀態(tài)后,可以通過運(yùn)行更新日志中的查詢,重新運(yùn)行備份之后所做的改變。這個操作將數(shù)據(jù)庫中的表恢復(fù)到了崩潰時刻的狀態(tài)。在文件系統(tǒng)備份語言中,數(shù)據(jù)庫備份文件表示完全轉(zhuǎn)儲( full dump),而更新日志則表示增量轉(zhuǎn)儲。

    使用一致和可理解的備份文件命名模式。像b a c k up 1、backup2 等名字沒有特殊的含義。當(dāng)需要它執(zhí)行恢復(fù)時,還得浪費(fèi)時間去查看文件中的內(nèi)容。您會發(fā)現(xiàn)使用數(shù)據(jù)庫名和花時間去構(gòu)造備份文件名是有好處的。例如:

    % mysqldump samp_db> /usr/archives/mysql/samp_db. 1999-10-02

    % mysqldump menagerie> /usr/archives/mysql/menagerie.1999-10-02

    在產(chǎn)生備份文件后您可能需要將它們壓縮。畢竟備份文件都比較大,所以您可能還需要終止備份文件以避免它們填滿磁盤,這與終止日志文件類似。您可以用相同的技術(shù)終止備份文件:

    用文件系統(tǒng)備份來備份您的備份文件。如果您遭受了一個完全崩潰,不僅毀壞了數(shù)據(jù)目錄而且還破壞了包含數(shù)據(jù)庫備份的磁盤驅(qū)動器,那將造成真正的麻煩。您還應(yīng)該備份更新日志。

    將備份文件放在與您的數(shù)據(jù)庫不同的文件系統(tǒng)上。這將減少含有數(shù)據(jù)字典的文件系統(tǒng)被生成的備份文件填滿的可能性。

    創(chuàng)建備份的技術(shù)對于將數(shù)據(jù)庫拷貝到另一個服務(wù)器上也是很有幫助的。將數(shù)據(jù)庫轉(zhuǎn)移到運(yùn)行在另一個主機(jī)上的服務(wù)器是很平常的,但您還可以將數(shù)據(jù)轉(zhuǎn)移到運(yùn)行在相同主機(jī)上的另一個服務(wù)器。如果正為一個新版本的MySQL運(yùn)行服務(wù)器,并且想用成品服務(wù)器上的某些真實(shí)數(shù)據(jù)來測試它時,可能會這樣做。還有一種可能,那就是您得到了一臺新的機(jī)器并要將所有的數(shù)據(jù)庫移動到新機(jī)器上。

    用mysqldump 備份和拷貝數(shù)據(jù)庫

    當(dāng)使用mysqldump 程序產(chǎn)生數(shù)據(jù)庫備份文件時,缺省設(shè)置是該文件的內(nèi)容由C R E AT E TABLE 語句組成,這些語句創(chuàng)建被轉(zhuǎn)儲的表以及包含表中的行數(shù)據(jù)的INSERT 語句。換句話說,mysqldump 創(chuàng)建在今后可作為對mysql的輸入使用的輸出結(jié)果,以重建數(shù)據(jù)庫。

    可以將整個數(shù)據(jù)庫按以下命令轉(zhuǎn)儲到單獨(dú)的文本文件中:



    該文件的其余部分由更多的INSERT 和CREATE TABLE 語句組成。如果想在生成備份時進(jìn)行壓縮,可替換成類似下列的命令:

    % mysqldump samp_db | gzip > /usr/archives/mysql/samp_db.1999.10.02.gz

    如果您有一個超大數(shù)據(jù)庫,則該輸出文件也將是極大的且管理起來很困難。如果您喜歡的話,可以通過在mysqldump 命令的數(shù)據(jù)庫名之后命名單個的表來轉(zhuǎn)儲這些表的內(nèi)容。這個操作將該轉(zhuǎn)儲文件分成更小的、更多的可管理的文件。下面的例子將說明如何將samp_db 的一些表轉(zhuǎn)儲到單個文件中:

    % mysqldump samp_db student score event absence > gradebook.sql

    % mysqldump samp_db member president > hist-league.sql

    如果您正在生成備份文件并打算用這些備份文件來定期刷新另一個數(shù)據(jù)庫的內(nèi)容,則可能要使用--add-drop-table 選項(xiàng)。此選項(xiàng)告訴mysqldump 將DROP TABLE IF EXISTS 語句寫到備份文件中。然后,當(dāng)您取出該備份文件并將其加載到第二個數(shù)據(jù)庫時,如果表已經(jīng)存在將不會出現(xiàn)錯誤信息。如果您正在運(yùn)行第二個數(shù)據(jù)庫,可使用此技術(shù)利用從第一個數(shù)據(jù)庫中的數(shù)據(jù)拷貝來定期地加載它。

    如果您正在轉(zhuǎn)儲數(shù)據(jù)庫使該數(shù)據(jù)庫可以轉(zhuǎn)換到另一個服務(wù)器上,則無須創(chuàng)建備份文件。應(yīng)確保該數(shù)據(jù)庫存在于另一臺主機(jī)上,然后用一個管道使mysql直接讀取mysqldump 的輸出結(jié)果來轉(zhuǎn)儲數(shù)據(jù)庫。例如,如果想要將samp_db 數(shù)據(jù)庫從p i t _ v i per.snake.net 拷貝到b o a . s n a k e . n e t,操作如下:

    % mysqladmin -h boa.snake.netcreate samp_db

    % mysqldump samp_db | mysql-h boa.snake.net samp_db

    稍后,如果想要在boa.snake.net 中再次刷新該數(shù)據(jù)庫,可跳過mysqladmin 命令,但要將--add-drop-table 增加到mysqldump 中,以避免得到有關(guān)"表已經(jīng)存在"的錯誤:

    % mysqldump --add-drop-table samp_db | mysql-h boa-snake.net samp_db

    mysqldump 的其他選項(xiàng)包括如下所示的幾個:

    --flush-log 和--lock-tables 的結(jié)合有助于檢查數(shù)據(jù)庫。--lock-table 鎖定所有正在轉(zhuǎn)儲的表,而--flush-log 關(guān)閉并重新打開更新日志文件。如果正在產(chǎn)生后續(xù)的更新日志,則新的更新日志將只包含從備份的那一點(diǎn)開始修改數(shù)據(jù)庫的查詢。這時檢查對于該備份時間的更新日志的檢查點(diǎn)(然而,鎖定所有的表對于備份期間客戶機(jī)訪問來說不太好,如果您有需要執(zhí)行更新操作的客戶機(jī)的話)。

    如果用--flush-logs 檢查對于備份時間的更新日志檢查點(diǎn),最好轉(zhuǎn)儲整個數(shù)據(jù)庫。如果轉(zhuǎn)儲單個文件,則將更新日志的檢查點(diǎn)與備份文件同步是比較難的。在恢復(fù)操作中,您通常在總數(shù)據(jù)庫( per- d a t a b a s e)的基礎(chǔ)上抽取更新日志的內(nèi)容。對于抽取單個表的更新日志來說沒有選項(xiàng),因此您必須自己抽取它們。

    缺省設(shè)置時,mysqldump 將表的全部內(nèi)容在寫之前讀到內(nèi)存中。這實(shí)際上不是必須的,事實(shí)上,如果您真的有大型表的話,這幾乎是一個失敗的方法?梢杂--quick 選項(xiàng)告訴mysqldump 寫每一行(只要是被檢索的)。要想進(jìn)一步優(yōu)化該轉(zhuǎn)儲過程,可用- - o p t來代替- - q ui c k。-- opt 選項(xiàng)開啟其他的選項(xiàng),這些選項(xiàng)將加快轉(zhuǎn)儲數(shù)據(jù)和讀回數(shù)據(jù)的速度。

    由于快速備份的好處,使得用--opt 執(zhí)行備份成為最常用的方法。但是,要當(dāng)心, - - o p t 選項(xiàng)有一個代價: --opt 所優(yōu)化的是您的備份過程,而不是由其他客戶機(jī)對數(shù)據(jù)庫的訪問。--opt 選項(xiàng)可防止任何人更新被鎖定的正在轉(zhuǎn)儲的任何表。您會很容易地發(fā)現(xiàn)在常規(guī)數(shù)據(jù)庫訪問中在這一點(diǎn)上所做的努力。試著在一天中數(shù)據(jù)庫通常最繁忙的時刻運(yùn)行一個備份。這不會花費(fèi)太多的時間。

    與--opt 作用有點(diǎn)相反的選項(xiàng)是- d e l a y e d。該選項(xiàng)導(dǎo)致mysqldump 寫INSERT D E L AYED 語句而非INSERT 語句。如果您將一個數(shù)據(jù)文件加載到另一個數(shù)據(jù)庫中并且想要使該操作對其他查詢(這些查詢可能正在數(shù)據(jù)庫中發(fā)生)造成的影響最小,則- -d e l a y e d將有助于達(dá)到這個目的。

    --compress 選項(xiàng)有助于將數(shù)據(jù)庫拷貝到另一臺機(jī)器上,因?yàn)樗梢詼p少網(wǎng)絡(luò)傳輸中的字節(jié)數(shù)量。這里有一個例子,請注意,為了使程序與遠(yuǎn)程主機(jī)上的服務(wù)器進(jìn)行通信(而不是與本地主機(jī)通信),給出了--compress 選項(xiàng):

    % mysqldump --opt samp_db | mysql--compress -h boa.snake.net samp_db

    mysqldump 有許多選項(xiàng),詳細(xì)信息請參考附錄E。

    使用直接拷貝數(shù)據(jù)庫備份和拷貝方法

&nb

關(guān)鍵詞標(biāo)簽:數(shù)據(jù)庫,備份,文件,拷貝

相關(guān)閱讀

文章評論
發(fā)表評論

熱門文章 10款MySQL數(shù)據(jù)庫客戶端圖形界面管理工具推薦10款MySQL數(shù)據(jù)庫客戶端圖形界面管理工具推薦MySQL常用維護(hù)管理工具MySQL常用維護(hù)管理工具Linux VPS/服務(wù)器上輕松導(dǎo)入、導(dǎo)出MySQL數(shù)據(jù)Linux VPS/服務(wù)器上輕松導(dǎo)入、導(dǎo)出MySQL數(shù)據(jù)MySQL復(fù)制的概述、安裝、故障、技巧、工具MySQL復(fù)制的概述、安裝、故障、技巧、工具

相關(guān)下載

人氣排行 MySQL數(shù)據(jù)庫啟動失敗1067進(jìn)程意外終止的解決辦法總結(jié)10款MySQL數(shù)據(jù)庫客戶端圖形界面管理工具推薦Mysql 1045錯誤解決辦法MySQL服務(wù)器進(jìn)程CPU占用100%解決辦法MySQL導(dǎo)出導(dǎo)入命令的用例MySQL無法啟動、無法停止各種解決方法總結(jié)三種常用的MySQL建表語句Mysql清空表的實(shí)現(xiàn)方法