亚洲韩日午夜视频,欧美日韩在线精品一区二区三区,韩国超清无码一区二区三区,亚洲国产成人影院播放,久草新在线,在线看片AV色

您好,歡迎來到思海網(wǎng)絡(luò),我們將竭誠為您提供優(yōu)質(zhì)的服務(wù)! 誠征網(wǎng)絡(luò)推廣 | 網(wǎng)站備案 | 幫助中心 | 軟件下載 | 購買流程 | 付款方式 | 聯(lián)系我們 [ 會員登錄/注冊 ]
促銷推廣
客服中心
業(yè)務(wù)咨詢
有事點擊這里…  531199185
有事點擊這里…  61352289
點擊這里給我發(fā)消息  81721488
有事點擊這里…  376585780
有事點擊這里…  872642803
有事點擊這里…  459248018
有事點擊這里…  61352288
有事點擊這里…  380791050
技術(shù)支持
有事點擊這里…  714236853
有事點擊這里…  719304487
有事點擊這里…  1208894568
有事點擊這里…  61352289
在線客服
有事點擊這里…  531199185
有事點擊這里…  61352288
有事點擊這里…  983054746
有事點擊這里…  893984210
當(dāng)前位置:首頁 >> 技術(shù)文章 >> 文章瀏覽
技術(shù)文章

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

添加時間:2013-1-3 17:38:49  添加: 思海網(wǎng)絡(luò) 
 在數(shù)據(jù)庫表丟失或損壞的情況下,備份你的數(shù)據(jù)庫是很重要的。如果發(fā)生系統(tǒng)崩潰,你肯定想能夠?qū)⒛愕谋肀M可能丟失最少的數(shù)據(jù)恢復(fù)到崩潰發(fā)生時的狀態(tài)。有時,正是MySQL管理員造成破壞。管理員已經(jīng)知道表以破壞,用諸如vi或Emacs等編輯器試圖直接編輯它們,這對表絕對不是件好事! 

  備份數(shù)據(jù)庫兩個主要方法是用mysqldump程序或直接拷貝數(shù)據(jù)庫文件(如用cp、cpio或tar等)。每種方法都有其優(yōu)缺點: 

  mysqldump與MySQL服務(wù)器協(xié)同操作。直接拷貝方法在服務(wù)器外部進行,并且你必須采取措施保證沒有客戶正在修改你將拷貝的表。如果你想用文件系統(tǒng)備份來備份數(shù)據(jù)庫,也會發(fā)生同樣的問題:如果數(shù)據(jù)庫表在文件系統(tǒng)備份過程中被修改,進入備份的表文件主語不一致的狀態(tài),而對以后的恢復(fù)表將失去意義。文件系統(tǒng)備份與直接拷貝文件的區(qū)別是對后者你完全控制了備份過程,這樣你能采取措施確保服務(wù)器讓表不受干擾。 

  mysqldump比直接拷貝要慢些。 

  mysqldump生成能夠移植到其它機器的文本文件,甚至那些有不同硬件結(jié)構(gòu)的機器上。直接拷貝文件不能移植到其它機器上,除非你正在拷貝的表使用MyISAM存儲格式。ISAM表只能在相似的硬件結(jié)構(gòu)的機器上拷貝。在MySQL 3.23中引入的MyISAM表存儲格式解決了該問題,因為該格式是機器無關(guān)的,所以直接拷貝文件可以移植到具有不同硬件結(jié)構(gòu)的機器上。只要滿足兩個條件:另一臺機器必須也運行MySQL 3.23或以后版本,而且文件必須以MyISAM格式表示,而不是ISAM格式。

  不管你使用哪種備份方法,如果你需要恢復(fù)數(shù)據(jù)庫,有幾個原則應(yīng)該遵守,以確保最好的結(jié)果: 

  定期實施備份。建立一個計劃并嚴格遵守。 

  讓服務(wù)器執(zhí)行更新日志。當(dāng)你在崩潰后需要恢復(fù)數(shù)據(jù)時,更新日志將幫助你。在你用備份文件恢復(fù)數(shù)據(jù)到備份時的狀態(tài)后,你可以通過運行更新日志中的查詢再次運用備份后面的修改,這將數(shù)據(jù)庫中的表恢復(fù)到崩潰發(fā)生時的狀態(tài)。 

  以文件系統(tǒng)備份的術(shù)語講,數(shù)據(jù)庫備份文件代表完全傾倒(full dump),而更新日志代表漸進傾倒(incremental dump)。 

  使用一種統(tǒng)一的和易理解的備份文件命名機制。象backup1、buckup2等不是特別有意義。當(dāng)實施你的恢復(fù)時,你將浪費時間找出文件里是什么東西。你可能發(fā)覺用數(shù)據(jù)庫名和日期構(gòu)成備份文件名會很有用。例如:
 
  %mysqldump samp_db >/usr/archives/mysql/samp_db.1999-10-02 
  %mysqldump menagerie >/usr/archives/mysql/menagerie.1999-10-02 

  你可能想在生成備份后壓縮它們。備份一般都很大!你也需要讓你的備份文件有過期期限以避免它們填滿你的磁盤,就象你讓你的日志文件過期那樣。 

  用文件系統(tǒng)備份備份你的備份文件。如果遇上了一個徹底崩潰,不僅清除了你的數(shù)據(jù)目錄,也清除了包含你的數(shù)據(jù)庫備份的磁盤驅(qū)動器,你將真正遇上了麻煩。也要備份你的更新日志。

  將你的備份文件放在不同于用于你的數(shù)據(jù)庫的文件系統(tǒng)上。這將降低由于生成備份而填滿包含數(shù)據(jù)目錄的文件系統(tǒng)的可能性。 

  用于創(chuàng)建備份的技術(shù)同樣對拷貝數(shù)據(jù)庫到另一臺機器有用。最常見地,一個數(shù)據(jù)庫被轉(zhuǎn)移到了運行在另一臺主機上的服務(wù)器,但是你也可以將數(shù)據(jù)轉(zhuǎn)移到同一臺主機上的另一個服務(wù)器。

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

  當(dāng)你使用mysqldumo程序產(chǎn)生數(shù)據(jù)庫備份文件時,缺省地,文件內(nèi)容包含創(chuàng)建正在傾倒的表的CREATE語句和包含表中行數(shù)據(jù)的INSERT語句。換句話說,mysqldump產(chǎn)生的輸出可在以后用作mysql的輸入來重建數(shù)據(jù)庫。 
  你可以將整個數(shù)據(jù)庫傾倒進一個單獨的文本文件中,如下: 

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

  輸出文件的開頭看起來象這樣: 

  # MySQL Dump 6.0 
  # 
  # Host: localhost Database: samp_db 
  #--------------------------------------- 
  # Server version 3.23.2-alpha-log 
  # 
  # Table structure for table 'absence' 
  # 
  CREATE TABLE absence( 
  student_id int(10) unsigned DEFAULT '0' NOT NULL, 
  date date DEFAULT '0000-00-00' NOT NULL, 
  PRIMARY KEY (student_id,date) 
  ); 
  # 
  # Dumping data for table 'absence' 
  # 
  INSERT INTO absence VALUES (3,'1999-09-03'); 
  INSERT INTO absence VALUES (5,'1999-09-03'); 
  INSERT INTO absence VALUES (10,'1999-09-08'); 
  ......  

  文件剩下的部分有更多的INSERT和CREATE TABLE語句組成。 

  如果你想壓縮備份,使用類似如下的命令: 

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

  如果你要一個龐大的數(shù)據(jù)庫,輸出文件也將很龐大,可能難于管理。如果你愿意,你可以在mysqldump命令行的數(shù)據(jù)庫名后列出單獨的表名來傾到它們的內(nèi)容,這將傾倒文件分成較小、更易于管理的文件。下例顯示如何將samp_db數(shù)據(jù)庫的一些表傾到進分開的文件中: 

  %mysqldump samp_db student score event absence >grapbook.sql 
  %mysqldump samp_db member president >hist-league.sql 

  如果你生成準(zhǔn)備用于定期刷新另一個數(shù)據(jù)庫內(nèi)容的備份文件,你可能想用--add-drop-table選項。這告訴服務(wù)器將DROP TABLE IF EXISTS語句寫入備份文件,然后,當(dāng)你取出備份文件并把它裝載進第二個數(shù)據(jù)庫時,如果表已經(jīng)存在,你不會得到一個錯誤。 

  如果你倒出一個數(shù)據(jù)庫以便能把數(shù)據(jù)庫轉(zhuǎn)移到另一個服務(wù)器,你甚至不必創(chuàng)建備份文件。要保證數(shù)據(jù)庫存在于另一臺主機,然后用管道傾倒數(shù)據(jù)庫,這樣mysql能直接讀取mysqldump的輸出。例如:你想從主機pit-viper.snake.net拷貝數(shù)據(jù)庫samp_db到boa.snake.net,可以這樣很容易做到:

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

  以后,如果你想再次刷新boa.snake.net上的數(shù)據(jù)庫,跳過mysqladmin命令,但要對mysqldump加上--add-drop-table以避免的得到表已存在的錯誤: 
%mysqldump --add-drop-table samp_db | mysql -h boa.snake.net samp_db 
mysqldump其它有用的選項包括:

  --flush-logs和--lock-tables組合將對你的數(shù)據(jù)庫檢查點有幫助。--lock-tables鎖定你正在傾倒的所有表,而--flush-logs關(guān)閉并重新打開更新日志文件,新的更新日志將只包括從備份點起的修改數(shù)據(jù)庫的查詢。這將設(shè)置你的更新日志檢查點位備份時間。(然而如果你有需要執(zhí)行個更新的客戶,鎖定所有表對備份期間的客戶訪問不是件好事。)

  如果你使用--flush-logs設(shè)置檢查點到備份時,有可能最好是傾倒整個數(shù)據(jù)庫。如果你傾倒單獨的文件,較難將更新日志檢查點與備份文件同步。在恢復(fù)期間,你通常按數(shù)據(jù)庫為基礎(chǔ)提取更新日志內(nèi)容,對單個表沒有提取更新的選擇,所以你必須自己提取它們。

  缺省地,mysqldump在寫入前將一個表的整個內(nèi)容讀進內(nèi)存。這通常確實不必要,并且實際上如果你有一個大表,幾乎是失敗的。你可用--quick選項告訴mysqldump只要它檢索出一行就寫出每一行。為了進一步優(yōu)化傾倒過程,使用--opt而不是--quick。--opt選項打開其它選項,加速數(shù)據(jù)的傾倒和把它們讀回。

  用--opt實施備份可能是最常用的方法,因為備份速度上的優(yōu)勢。然而,要警告你,--opt選項確實有代價,--opt優(yōu)化的是你的備份過程,不是其他客戶對數(shù)據(jù)庫的訪問。--opt選項通過一次鎖定所有表阻止任何人更新你正在傾倒的任何表。你可在一般數(shù)據(jù)庫訪問上很容易看到其效果。當(dāng)你的數(shù)據(jù)庫一般非常頻繁地使用,只是一天一次地調(diào)節(jié)備份。 

  一個具有--opt的相反效果的選項是--dedayed。該選項使得mysqldump寫出INSERT DELAYED語句而不是INSERT語句。如果你將數(shù)據(jù)文件裝入另一個數(shù)據(jù)庫并且你想是這個操作對可能出現(xiàn)在該數(shù)據(jù)庫中的查詢的影響最小,--delayed對此很有幫助。 

  --compress選項在你拷貝數(shù)據(jù)庫到另一臺機器上時很有幫助,因為它減少網(wǎng)絡(luò)傳輸字節(jié)的數(shù)量。下面有一個例子,注意到--compress對與遠端主機上的服務(wù)器通信的程序才給出,而不是對與本地主機連接的程序:

  %mysqldump --opt samp_db | mysql --compress -h boa.snake.net samp_db 
  mysqldump有很多選項,詳見《MySQL參考手冊》。
 
  2、使用直接拷貝數(shù)據(jù)庫的備份和拷貝方法 

  另一種不涉及mysqldump備份數(shù)據(jù)庫和表的方式是直接拷貝數(shù)據(jù)庫表文件。典型地,這用諸如cp、tar或cpio實用程序。本文的例子使用cp。

  當(dāng)你使用一種直接備份方法時,你必須保證表不在被使用。如果服務(wù)器在你則正在拷貝一個表時改變它,拷貝就失去意義。

  保證你的拷貝完整性的最好方法是關(guān)閉服務(wù)器,拷貝文件,然后重啟服務(wù)器。如果你不想關(guān)閉服務(wù)器,要在執(zhí)行表檢查的同時鎖定服務(wù)器。如果服務(wù)器在運行,相同的制約也適用于拷貝文件,而且你應(yīng)該使用相同的鎖定協(xié)議讓服務(wù)器“安靜下來”。

  假設(shè)服務(wù)器關(guān)閉或你已經(jīng)鎖定了你想拷貝的表,下列顯示如何將整個samp_db數(shù)據(jù)庫備份到一個備份目錄(DATADIR表示服務(wù)器的數(shù)據(jù)目錄): 

  %cd DATADIR 
  %cp -r samp_db /usr/archive/mysql 

  單個表可以如下備份: 

  %cd DATADIR/samp_db 
  %cp member.* /usr/archive/mysql/samp_db 
  %cp score.* /usr/archive/mysql/samp_db 
  .... 

  當(dāng)你完成了備份時,你可以重啟服務(wù)器(如果關(guān)閉了它)或釋放加在表上的鎖定(如果你讓服務(wù)器運行)。 

  要用直接拷貝文件把一個數(shù)據(jù)庫從一臺機器拷貝到另一臺機器上,只是將文件拷貝到另一臺服務(wù)器主機的適當(dāng)數(shù)據(jù)目錄下即可。要確保文件是MyIASM格式或兩臺機器有相同的硬件結(jié)構(gòu),否則你的數(shù)據(jù)庫在另一臺主機上有奇怪的內(nèi)容。你也應(yīng)該保證在另一臺機器上的服務(wù)器在你正在安裝數(shù)據(jù)庫表時不訪問它們。 

  3、復(fù)制數(shù)據(jù)庫(Replicating Database) 

  復(fù)制(Replication)類似于拷貝數(shù)據(jù)庫到另一臺服務(wù)器上,但它的確切含義是實時地保證兩個數(shù)據(jù)庫的完全同步。這個功能將在3.23版中出現(xiàn),而且還不很成熟,因此本文不作詳細介紹。

  4、用備份恢復(fù)數(shù)據(jù) 

  數(shù)據(jù)庫損壞的發(fā)生有很多原因,程度也不同。如果你走運,你可能僅損壞一兩個表(如掉電),如果你倒霉,你可能必須替換整個數(shù)據(jù)目錄(如磁盤損壞)。在某些情況下也需要恢復(fù),比如用戶錯誤地刪除了數(shù)據(jù)庫或表。不管這些倒霉事件的原因,你將需要實施某種恢復(fù)。 

  如果表損壞但沒丟失,嘗試用myisamchk或isamchk修復(fù)它們,如果這樣的損壞可有修復(fù)程序修復(fù),你可能根本不需要使用備份文件。關(guān)于表修復(fù)的過程,見《數(shù)據(jù)庫維護與修復(fù)》。 

  恢復(fù)過程涉及兩種信息源:你的備份文件和個更新日志。備份文件將表恢復(fù)到實施備份時的狀態(tài),然而一般表在備份與發(fā)生問題之間的時間內(nèi)已經(jīng)被修改,更新日志包含了用于進行這些修改的查詢。你可以使用日志文件作為mysql的輸入來重復(fù)查詢。這已正是為什么要啟用更新日志的原因。 

  恢復(fù)過程視你必須恢復(fù)的信息多少而不同。實際上,恢復(fù)整個數(shù)據(jù)庫比單個表跟容易,因為對于數(shù)據(jù)庫運用更新日志比單個表容易。 

  4.1 恢復(fù)整個數(shù)據(jù)庫 

  首先,如果你想恢復(fù)的數(shù)據(jù)庫是包含授權(quán)表的mysql數(shù)據(jù)庫,你需要用--skip-grant-table選項運行服務(wù)器。否則,它會抱怨不能找到授權(quán)表。在你已經(jīng)恢復(fù)表后,執(zhí)行mysqladmin flush-privileges告訴服務(wù)器裝載授權(quán)標(biāo)并使用它們。 

  將數(shù)據(jù)庫目錄內(nèi)容拷貝到其它某個地方,如果你在以后需要它們。
 
  用最新的備份文件重裝數(shù)據(jù)庫。如果你用mysqldump產(chǎn)生的文件,將它作為mysql的輸入。如果你用直接從數(shù)據(jù)庫拷貝來的文件,將它們直接拷回數(shù)據(jù)庫目錄,然而,此時你需要在拷貝文件之前關(guān)閉數(shù)據(jù)庫,然后重啟它。 

  使用更新日志重復(fù)做備份以后的修改數(shù)據(jù)庫表的查詢。對于任何可適用的更新日志,將它們作為mysql的輸入。指定--one-database選項使得mysql只執(zhí)行你有興趣恢復(fù)的數(shù)據(jù)庫的查詢。如果你知道你需要運用所有更新日志文件,你可以在包含日志的目錄下使用這條命令: 

  % ls -t -r -1 update.[0-9]* | xargs cat | mysql --one-database db_name 

  ls命令生成更新日志文件的一個單列列表,根據(jù)服務(wù)器產(chǎn)生它們的次序排序(主意:如果你修改任何一個文件,你將改變排序次序,這導(dǎo)致更新日志一錯誤的次序被運用。) 

  很可能你會是運用某幾個更新日志。例如,自從你備份以來產(chǎn)生的更新日志被命名為update.392、update.393等等,你可以這樣重新運行: 

  %mysql --one-database db_name < update.392 
  %mysql --one-database db_name < update.393 
  ..... 

  如果你正在實施恢復(fù)且使用更新日志恢復(fù)由于一個錯誤建議的DROP DATABASE、DROP TABLE或DELETE語句造成丟失的信息,在運用更新日志之前,要保證從其中刪除這些語句。 

  4.2 恢復(fù)單個表

  恢復(fù)單個表較為復(fù)雜。如果你用一個由mysqldump生成的備份文件,并且它不包含你感興趣的表的數(shù)據(jù),你需要從相關(guān)行中提取它們并將它們用作mysql的輸入。這是容易的部分。難的部分是從只運用于該表的更新日志中拉出片斷。你會發(fā)覺mysql_find_rows實用程序?qū)Υ撕苡袔椭鼜母氯罩局刑崛《嘈胁樵儭?BR> 
  另一個可能性是使用另一臺服務(wù)器恢復(fù)整個數(shù)據(jù)庫,然后拷貝你想要的表文件到原數(shù)據(jù)庫中。這可能真的很容易!當(dāng)你將文件拷回數(shù)據(jù)庫目錄時,要確保原數(shù)據(jù)庫的服務(wù)器關(guān)閉。
關(guān)鍵字:MySQL數(shù)據(jù)庫、備份與恢復(fù)、服務(wù)器

分享到:

頂部 】 【 關(guān)閉
版權(quán)所有:佛山思海電腦網(wǎng)絡(luò)有限公司 ©1998-2024 All Rights Reserved.
聯(lián)系電話:(0757)22630313、22633833
中華人民共和國增值電信業(yè)務(wù)經(jīng)營許可證: 粵B1.B2-20030321 備案號:粵B2-20030321-1
網(wǎng)站公安備案編號:44060602000007 交互式欄目專項備案編號:200303DD003  
察察 工商 網(wǎng)安 舉報有獎  警警  手機打開網(wǎng)站