MySQL數(shù)據(jù)庫(kù)備份守則和方法_第1頁(yè)
MySQL數(shù)據(jù)庫(kù)備份守則和方法_第2頁(yè)
MySQL數(shù)據(jù)庫(kù)備份守則和方法_第3頁(yè)
MySQL數(shù)據(jù)庫(kù)備份守則和方法_第4頁(yè)
MySQL數(shù)據(jù)庫(kù)備份守則和方法_第5頁(yè)
已閱讀5頁(yè),還剩5頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

MySQL數(shù)據(jù)庫(kù)備份守則和方法MySQL數(shù)據(jù)庫(kù)備份守則和方法

這篇文章主要介紹了MySql數(shù)據(jù)庫(kù)備份的幾種方式,文中通過(guò)示例代碼介紹的特別具體,對(duì)大家的學(xué)習(xí)或者工作具有肯定的參考學(xué)習(xí)價(jià)值,需要的伴侶們下面隨著來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。

MySQL數(shù)據(jù)庫(kù)備份守則和方法

在數(shù)據(jù)庫(kù)表丟失或損壞的狀況下,備份你的數(shù)據(jù)庫(kù)是很重要的。假如發(fā)生系統(tǒng)崩潰,你確定想能夠?qū)⒛愕谋肀M可能丟失最少的數(shù)據(jù)恢復(fù)到崩潰發(fā)生時(shí)的狀態(tài)。有時(shí),正是MySQL管理員造成破壞。管理員已經(jīng)知道表已破壞,用諸如vi或Emacs等編輯器試***直接編輯它們,這對(duì)表肯定不是件好事!備份數(shù)據(jù)庫(kù)兩個(gè)主要方法是用mysqldump程序或直接拷貝數(shù)據(jù)庫(kù)文件(如用cp、cpio或tar等)。每種方法都有其優(yōu)缺點(diǎn):;mysqldump與MySQL服務(wù)器協(xié)同操作。直接拷貝方法在服務(wù)器外部進(jìn)行,并且你必需實(shí)行措施保證沒(méi)有客戶(hù)正在修改你將拷貝的表。假如你想用文件系統(tǒng)備份來(lái)備份數(shù)據(jù)庫(kù),也會(huì)發(fā)生同樣的問(wèn)題:假如數(shù)據(jù)庫(kù)表在文件系統(tǒng)備份過(guò)程中被修改,進(jìn)入備份的表文件主語(yǔ)不全都的狀態(tài),而對(duì)以后的恢復(fù)表將失去意義。文件系統(tǒng)備份與直接拷貝文件的區(qū)分是對(duì)后者你完全掌握了備份過(guò)程,這樣你能實(shí)行措施確保服務(wù)器讓表不受干擾。mysqldump比直接拷貝要慢些。;mysqldump生成能夠移植到其它機(jī)器的文本文件,甚至那些有不同硬件結(jié)構(gòu)的機(jī)器上。直接拷貝文件不能移植到其它機(jī)器上,除非你正在拷貝的表使用MyISAM存儲(chǔ)格式。ISAM表只能在相像的硬件結(jié)構(gòu)的機(jī)器上拷貝。在MySQL;3.23中引入的MyISAM表存儲(chǔ)格式解決了該問(wèn)題,由于該格式是機(jī)器無(wú)關(guān)的,所以直接拷貝文件可以移植到具有不同硬件結(jié)構(gòu)的機(jī)器上。只要滿(mǎn)意兩個(gè)條件:另一臺(tái)機(jī)器必需也運(yùn)行MySQL;3.23或以后版本,而且文件必需以MyISAM格式表示,而不是ISAM格式。

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

定期實(shí)施備份,建立一個(gè)方案并嚴(yán)格遵守

讓服務(wù)器執(zhí)行更新日志。當(dāng)你在崩潰后需要恢復(fù)數(shù)據(jù)時(shí),更新日志將關(guān)心你。在你用備份文件恢復(fù)數(shù)據(jù)到備份時(shí)的狀態(tài)后,你可以通過(guò)運(yùn)行更新日志中的查詢(xún)?cè)俅芜\(yùn)用備份后面的修改,這將數(shù)據(jù)庫(kù)中的表恢復(fù)到崩潰發(fā)生時(shí)的狀態(tài)。;以文件系統(tǒng)備份的術(shù)語(yǔ)講,數(shù)據(jù)庫(kù)備份文件代表完全傾倒(full;dump),而更新日志代表漸進(jìn)傾倒(incremental;dump)。

使用一種統(tǒng)一的和易理解的備份文件命名機(jī)制

象backup1、buckup2等不是特殊有意義。當(dāng)實(shí)施你的恢復(fù)時(shí),你將鋪張時(shí)間找出文件里是什么東西。你可能發(fā)覺(jué)用數(shù)據(jù)庫(kù)名和日期構(gòu)成備份文件名會(huì)很有用。例如:;

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

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

你可能想在生成備份后壓縮它們。備份一般都很大!你也需要讓你的備份文件有過(guò)期期限以避開(kāi)它們填滿(mǎn)你的磁盤(pán),就象你讓你的日志文件過(guò)期那樣。用文件系統(tǒng)備份備份你的備份文件。假如遇上了一個(gè)徹底崩潰,不僅清除了你的數(shù)據(jù)名目,也清除了包含你的數(shù)據(jù)庫(kù)備份的磁盤(pán)驅(qū)動(dòng)器,你將真正遇上了麻煩。也要備份你的更新日志。將你的備份文件放在不同于用于你的數(shù)據(jù)庫(kù)的文件系統(tǒng)上。這將降低由于生成備份而填滿(mǎn)包含數(shù)據(jù)名目的文件系統(tǒng)的可能性。

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

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

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

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

輸出文件的開(kāi)頭看起來(lái)象這樣:;

#;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語(yǔ)句組成。;

假如你想壓縮備份,使用類(lèi)似如下的命令:

%mysqldump;samp_db;│;gzip;/usr/archives/mysql/samp_db.1999-10-02.gz;

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

%mysqldump;samp_db;student;score;event;absence;grapbook.sql;

%mysqldump;samp_db;member;president;hist-league.sql;

假如你生成預(yù)備用于定期刷新另一個(gè)數(shù)據(jù)庫(kù)內(nèi)容的備份文件,你可能想用--add-drop-table選項(xiàng)。這告知服務(wù)器將DROP;TABLE;IF;EXISTS語(yǔ)句寫(xiě)入備份文件,然后,當(dāng)你取出備份文件并把它裝載進(jìn)其次個(gè)數(shù)據(jù)庫(kù)時(shí),假如表已經(jīng)存在,你不會(huì)得到一個(gè)錯(cuò)誤。假如你倒出一個(gè)數(shù)據(jù)庫(kù)以便能把數(shù)據(jù)庫(kù)轉(zhuǎn)移到另一個(gè)服務(wù)器,你甚至不必創(chuàng)建備份文件。要保證數(shù)據(jù)庫(kù)存在于另一臺(tái)主機(jī),然后用管道傾倒數(shù)據(jù)庫(kù),這樣mysql能直接讀取mysqldump的輸出。例如:你想從主機(jī)拷貝數(shù)據(jù)庫(kù)samp_db到,可以這樣很簡(jiǎn)單做到:

%mysql***;-h;;create;samp_db;

%mysqldump;samp_db;│;mysql;-h;;samp_db;

以后,假如你想再次刷新上的數(shù)據(jù)庫(kù),跳過(guò)mysql***命令,但要對(duì)mysqldump加上--add-drop-table以避開(kāi)的得到表已存在的錯(cuò)誤:

%mysqldump;--add-drop-table;samp_db;│;mysql;-h;;samp_db;

mysqldump其它有用的選項(xiàng)包括:;

--flush-logs和--lock-tables組合將對(duì)你的數(shù)據(jù)庫(kù)檢查點(diǎn)有關(guān)心。

--lock-tables鎖定你正在傾倒的全部表

而--flush-logs關(guān)閉并重新打開(kāi)更新日志文件,新的更新日志將只包括從備份點(diǎn)起的修改數(shù)據(jù)庫(kù)的查詢(xún)。這將設(shè)置你的更新日志檢查點(diǎn)位備份時(shí)間。(然而假如你有需要執(zhí)行個(gè)更新的客戶(hù),鎖定全部表對(duì)備份期間的客戶(hù)訪(fǎng)問(wèn)不是件好事。)假如你使用--flush-logs設(shè)置檢查點(diǎn)到備份時(shí),有可能最好是傾倒整個(gè)數(shù)據(jù)庫(kù)。假如你傾倒單獨(dú)的文件,較難將更新日志檢查點(diǎn)與備份文件同步。在恢復(fù)期間,你通常按數(shù)據(jù)庫(kù)為基礎(chǔ)提取更新日志內(nèi)容,對(duì)單個(gè)表沒(méi)有提取更新的選擇,所以你必需自己提取它們。缺省地,mysqldump在寫(xiě)入前將一個(gè)表的整個(gè)內(nèi)容讀進(jìn)內(nèi)存。這通常的確不必要,并且實(shí)際上假如你有一個(gè)大表,幾乎是失敗的。你可用--quick選項(xiàng)告知mysqldump只要它檢索出一行就寫(xiě)出每一行。為了進(jìn)一步優(yōu)化傾倒過(guò)程,使用--opt而不是--quick。--opt選項(xiàng)打開(kāi)其它選項(xiàng),加速數(shù)據(jù)的傾倒和把它們讀回。用--opt實(shí)施備份可能是最常用的方法,由于備份速度上的優(yōu)勢(shì)。然而,要警告你,--opt選項(xiàng)的確有代價(jià),--opt優(yōu)化的是你的備份過(guò)程,不是其他客戶(hù)對(duì)數(shù)據(jù)庫(kù)的訪(fǎng)問(wèn)。--opt選項(xiàng)通過(guò)一次鎖定全部表阻擋任何人更新你正在傾倒的任何表。你可在一般數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)上很簡(jiǎn)單看到其效果。當(dāng)你的數(shù)據(jù)庫(kù)一般特別頻繁地使用,只是一天一次地調(diào)整備份。一個(gè)具有--opt的相反效果的選項(xiàng)是--dedayed。該選項(xiàng)使得mysqldump寫(xiě)出INSERT;DELAYED語(yǔ)句而不是INSERT語(yǔ)句。假如你將數(shù)據(jù)文件裝入另一個(gè)數(shù)據(jù)庫(kù)并且你想是這個(gè)操作對(duì)可能消失在該數(shù)據(jù)庫(kù)中的查詢(xún)的影響最小,--delayed對(duì)此很有關(guān)心。--press選項(xiàng)在你拷貝數(shù)據(jù)庫(kù)到另一臺(tái)機(jī)器上時(shí)很有關(guān)心,由于它削減網(wǎng)絡(luò)傳輸字節(jié)的數(shù)量。下面有一個(gè)例子,留意到--press對(duì)與遠(yuǎn)端主機(jī)上的服務(wù)器通信的程序才給出,而不是對(duì)與本地主機(jī)連接的程序:

%mysqldump;--opt;samp_db;│;mysql;--press;-h;;samp_db;

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

另一種不涉及mysqldump備份數(shù)據(jù)庫(kù)和表的方式是直接拷貝數(shù)據(jù)庫(kù)表文件。典型地,這用諸如cp、tar或cpio有用程序。本文的例子使用cp。;當(dāng)你使用一種直接備份方法時(shí),你必需保證表不在被使用。假如服務(wù)器在你則正在拷貝一個(gè)表時(shí)轉(zhuǎn)變它,拷貝就失去意義。保證你的拷貝完整性的最好方法是關(guān)閉服務(wù)器,拷貝文件,然后重啟服務(wù)器。假如你不想關(guān)閉服務(wù)器,要在執(zhí)行表檢查的同時(shí)鎖定服務(wù)器。假如服務(wù)器在運(yùn)行,相同的制約也適用于拷貝文件,而且你應(yīng)當(dāng)使用相同的鎖定協(xié)議讓服務(wù)器"寧?kù)o下來(lái)'。;假設(shè)服務(wù)器關(guān)閉或你已經(jīng)鎖定了你想拷貝的表,下列顯示如何將整個(gè)samp_db數(shù)據(jù)庫(kù)備份到一個(gè)備份名目(DATADIR表示服務(wù)器的數(shù)據(jù)名目):

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

單個(gè)表可以如下備份:

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

當(dāng)你完成了備份時(shí),你可以重啟服務(wù)器(假如關(guān)閉了它)或釋放加在表上的鎖定(假如你讓服務(wù)器運(yùn)行)。;要用直接拷貝文件把一個(gè)數(shù)據(jù)庫(kù)從一臺(tái)機(jī)器拷貝到另一臺(tái)機(jī)器上,只是將文件拷貝到另一臺(tái)服務(wù)器主機(jī)的適當(dāng)數(shù)據(jù)名目下即可。要確保文件是MyIA***格式或兩臺(tái)機(jī)器有相同的硬件結(jié)構(gòu),否則你的數(shù)據(jù)庫(kù)在另一臺(tái)主機(jī)上有驚奇的內(nèi)容。你也應(yīng)當(dāng)保證在另一臺(tái)機(jī)器上的服務(wù)器在你正在安裝數(shù)據(jù)庫(kù)表時(shí)不訪(fǎng)問(wèn)它們。

3.復(fù)制數(shù)據(jù)庫(kù)(Replicating;Database)

復(fù)制(Replication)類(lèi)似于拷貝數(shù)據(jù)庫(kù)到另一臺(tái)服務(wù)器上,但它的準(zhǔn)確含義是實(shí)時(shí)地保證兩個(gè)數(shù)據(jù)庫(kù)的完全同步。這個(gè)功能將在3.23版中消失,而且還不很成熟,因此本文不作具體介紹。

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

數(shù)據(jù)庫(kù)損壞的發(fā)生有許多緣由,程度也不同。假如你走運(yùn),你可能僅損壞一兩個(gè)表(如掉電),假如你倒霉,你可能必需替換整個(gè)數(shù)據(jù)名目(如磁盤(pán)損壞)。在某些狀況下也需要恢復(fù),比如用戶(hù)錯(cuò)誤地刪除了數(shù)據(jù)庫(kù)或表。不管這些倒霉大事的緣由,你將需要實(shí)施某種恢復(fù)。假如表?yè)p壞但沒(méi)丟失,嘗試用myisamchk或isamchk修復(fù)它們,假如這樣的損壞可有修復(fù)程序修復(fù),你可能根本不需要使用備份文件。關(guān)于表修復(fù)的過(guò)程,見(jiàn)《數(shù)據(jù)庫(kù)維護(hù)與修復(fù)》。恢復(fù)過(guò)程涉及兩種信息源:你的備份文件和個(gè)更新日志。備份文件將表恢復(fù)到實(shí)施備份時(shí)的狀態(tài),然而一般表在備份與發(fā)生問(wèn)題之間的時(shí)間內(nèi)已經(jīng)被修改,更新日志包含了用于進(jìn)行這些修改的查詢(xún)。你可以使用日志文件作為mysql的輸入來(lái)重復(fù)查詢(xún)。這已正是為什么要啟用更新日志的緣由?;謴?fù)過(guò)程視你必需恢復(fù)的信息多少而不同。實(shí)際上,恢復(fù)整個(gè)數(shù)據(jù)庫(kù)比單個(gè)表跟簡(jiǎn)單,由于對(duì)于數(shù)據(jù)庫(kù)運(yùn)用更新日志比單個(gè)表簡(jiǎn)單。

4.1;恢復(fù)整個(gè)數(shù)據(jù)庫(kù)

首先,假如你想恢復(fù)的數(shù)據(jù)庫(kù)是包含授權(quán)表的mysql數(shù)據(jù)庫(kù),你需要用--skip-grant-table選項(xiàng)運(yùn)行服務(wù)器。否則,它會(huì)埋怨不能找到授權(quán)表。在你已經(jīng)恢復(fù)表后,執(zhí)行mysql***;flush-privileges告知服務(wù)器裝載授權(quán)標(biāo)并使用它們。將數(shù)據(jù)庫(kù)名目?jī)?nèi)容拷貝到其它某個(gè)地方,假如你在以后需要它們。用最新的備份文件重裝數(shù)據(jù)庫(kù)。假如你用mysqldump產(chǎn)生的文件,將它作為mysql的輸入。假如你用直接從數(shù)據(jù)庫(kù)拷貝來(lái)的文件,將它們直接拷回?cái)?shù)據(jù)庫(kù)名目,然而,此時(shí)你需要在拷貝文件之前關(guān)閉數(shù)據(jù)庫(kù),然后重啟它。使用更新日志重復(fù)做備份以后的修改數(shù)據(jù)庫(kù)表的查詢(xún)。對(duì)于任何可適用的更新日志,將它們作為mysql的輸入。指定--one-database選項(xiàng)使得mysql只執(zhí)行你有愛(ài)好恢復(fù)的數(shù)據(jù)庫(kù)的查詢(xún)。假如你知道你需要運(yùn)用全部更新日志文件,你可以在包含日志的名目下使用這條命令:

%;ls;-t;-r;-1;update.*;│;xargs;cat;│;mysql;--one-database;db_name;

ls命令生成更新日志文件的一個(gè)單列列表,依據(jù)服務(wù)器產(chǎn)生它們的次序排序(辦法:假如你修改任何一個(gè)文件,你將轉(zhuǎn)變排序次序,這導(dǎo)致更新日志一錯(cuò)誤的次序被運(yùn)用。)很可能你會(huì)是運(yùn)用某幾個(gè)更新日志。例如,自從你備份以來(lái)產(chǎn)生的更新日志被命名為update.392、update.393等等,你可以這樣重新運(yùn)行:;

%mysql;--one-database;db_name;;update.392;

%mysql;--one-database;db_name;;update.393;

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

4.2;恢復(fù)單個(gè)表

恢復(fù)單個(gè)表較為簡(jiǎn)單。假如你用一個(gè)由mysqldump生成的備份文件,并且它不包含你感愛(ài)好的表的數(shù)據(jù),你需要從相關(guān)行中提取它們并將它們用作mysql的輸入。這是簡(jiǎn)單的部分。難的部分是從只運(yùn)用于該表的更新日志中拉出片斷。你會(huì)發(fā)覺(jué)mysql_find_rows有用程序?qū)Υ撕苡嘘P(guān)心,它從更新日志中提取多行查詢(xún)。另一個(gè)可能性是使用另一臺(tái)服務(wù)器恢復(fù)整個(gè)數(shù)據(jù)庫(kù),然后拷貝你想要的表文件到原數(shù)據(jù)庫(kù)中。這可能真的很簡(jiǎn)單!當(dāng)你將文件拷回?cái)?shù)據(jù)庫(kù)名目時(shí),要確保原數(shù)據(jù)庫(kù)的服務(wù)器關(guān)閉。

一臺(tái)主機(jī)上有驚奇的內(nèi)容。你也應(yīng)當(dāng)保證在另一臺(tái)機(jī)器上的服務(wù)器在你正在安裝數(shù)據(jù)庫(kù)表時(shí)不訪(fǎng)問(wèn)它們。

3.復(fù)制數(shù)據(jù)庫(kù)(Replicating;Database

復(fù)制(Replication)類(lèi)似于拷貝數(shù)據(jù)庫(kù)到另一臺(tái)服務(wù)器上,但它的準(zhǔn)確含義是實(shí)時(shí)地保證兩個(gè)數(shù)據(jù)庫(kù)的完全同步。這個(gè)功能將在3.23版中消失,而且還不很成熟,因此本文不作具體介紹。

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

數(shù)據(jù)庫(kù)損壞的發(fā)生有許多緣由,程度也不同。假如你走運(yùn),你可能僅損壞一兩個(gè)表(如掉電),假如你倒霉,你可能必需替換整個(gè)數(shù)據(jù)名目(如磁盤(pán)損壞)。在某些狀況下也需要恢復(fù),比如用戶(hù)錯(cuò)誤地刪除了數(shù)據(jù)庫(kù)或表。不管這些倒霉大事的緣由,你將需要實(shí)施某種恢復(fù)。假如表?yè)p壞但沒(méi)丟失,嘗試用myisamchk或isamchk修復(fù)它們,假如這樣的損壞可有修復(fù)程序修復(fù),你可能根本不需要使用備份文件。關(guān)于表修復(fù)的過(guò)程,見(jiàn)《數(shù)據(jù)庫(kù)維護(hù)與修復(fù)》?;謴?fù)過(guò)程涉及兩種信息源:你的備份文件和個(gè)更新日志。備份文件將表恢復(fù)到實(shí)施備份時(shí)的狀態(tài),然而一般表在備份與發(fā)生問(wèn)題之間的時(shí)間內(nèi)已經(jīng)被修改,更新日志包含了用于進(jìn)行這些修改的查詢(xún)。你可以使用日志文件作為mysql的輸入來(lái)重復(fù)查詢(xún)。這已正是為什么要啟用更新日志的緣由?;謴?fù)過(guò)程視你必需恢復(fù)的信息多少而不同。實(shí)際上,恢復(fù)整個(gè)數(shù)據(jù)庫(kù)比單個(gè)表跟簡(jiǎn)單,由于對(duì)于數(shù)據(jù)庫(kù)運(yùn)用更新日志比單個(gè)表簡(jiǎn)單。

PHP簡(jiǎn)直就是一個(gè)函數(shù)庫(kù),豐富的函數(shù)使PHP的某些地方相當(dāng)簡(jiǎn)潔。建議大家down一本PHP的函數(shù)手冊(cè),總用的到。

連接MYSQL數(shù)據(jù)庫(kù)的步驟

1、mysql_connect

打開(kāi)MySQL服務(wù)器連接。

語(yǔ)法:intmysql_connect(string,string,string);返回值:整數(shù)

本函數(shù)建立與MySQL服務(wù)器的連接。其中全部的參數(shù)都可省略。當(dāng)使用本函數(shù)卻不加任何參數(shù)時(shí),參數(shù)hostname的默認(rèn)值為localhost、參數(shù)username的默認(rèn)值為PHP執(zhí)行行程的擁有者、參數(shù)password則為空字符串(即沒(méi)有密碼)。而參數(shù)hostname后面可以加冒號(hào)與端口號(hào),代表使用哪個(gè)端口與MySQL連接。當(dāng)然在使用數(shù)據(jù)庫(kù)時(shí),早點(diǎn)使用mysql_close()將連接關(guān)掉可以節(jié)約資源。

2、mysql_select_db

選擇一個(gè)數(shù)據(jù)庫(kù)。

語(yǔ)法:intmysql_select_db(stringdatabase_name,int);返回值:整數(shù)

本函數(shù)選擇MySQL服務(wù)器中的數(shù)據(jù)庫(kù)以供之后的資料查詢(xún)作業(yè)(query)處理。勝利返回true,失敗則返回false。

最簡(jiǎn)潔的例子就是:

$conn=mysql_connect(,,);

mysql_select_db(shop);

連接機(jī)MYSQL數(shù)據(jù)庫(kù),打開(kāi)SHOP數(shù)據(jù)庫(kù)。在實(shí)際應(yīng)用中應(yīng)當(dāng)加強(qiáng)點(diǎn)錯(cuò)誤推斷。

常用的MySQL數(shù)據(jù)庫(kù)語(yǔ)句

連接:mysql-h主機(jī)地址-u用戶(hù)名-p用戶(hù)密碼(注:u與root可以不用加空格,其它也一樣)

斷開(kāi):exit(回車(chē))

創(chuàng)建授權(quán):grantselecton數(shù)據(jù)庫(kù).*to用戶(hù)名@登錄主機(jī)identifiedby密碼

修改密碼:mysql***-u用戶(hù)名-p舊密碼password新密碼

刪除授權(quán):revokeselect,,update,om*.*fromtest2@localhost;

顯示數(shù)據(jù)庫(kù):showdatabases;

顯示數(shù)據(jù)表:showtables;

顯示表結(jié)構(gòu):describe表名;

創(chuàng)建庫(kù):createdatabase庫(kù)名;

刪除庫(kù):dropdatabase庫(kù)名;

使用庫(kù)(選中庫(kù)):use庫(kù)名;

創(chuàng)建表:createtable表名(字段設(shè)定列表);

刪除表:表名;

修改表:altertablet1renamet2

查詢(xún)表:select*from表名;

清空表:from表名;

備份表:mysqlbinmysqldump-h(ip)-uroot-p(password)databasenametablenametablename.sql

恢復(fù)表:mysqlbinmysql-h(ip)-uroot-p(password)databasenametablenametablename.sql(操作前先把原來(lái)表刪除)

增加列:ALTERTABLEt2ADDcINTUNSIGNEDNOTNULLAUTO_INCREMENT,ADDINDEX(c);

修改列:ALTERTABLEt2MODIFYaTINYINTNOTNULL,CHANGEbcCHAR(20);

刪除列:ALTERTABLEt2DROPCOLUMNc;

備份數(shù)據(jù)庫(kù):mysqlbinmysqldump-h(ip)-uroot-p(password)databasenamedatabase.sql

恢復(fù)數(shù)據(jù)庫(kù):mysqlbinmysql-h(ip)-uroot-p(password)databasenamedatabase.sql

復(fù)制數(shù)據(jù)庫(kù):mysqlbinmysqldump--all-databasesall-databases.sql

修復(fù)數(shù)據(jù)庫(kù):mysqlcheck-A-o-uroot-p54safer

文本數(shù)據(jù)導(dǎo)入:loaddatalocalinfile文件名intotable表名;

數(shù)據(jù)導(dǎo)入導(dǎo)出:mysqlbinmysqlimportdatabasetables.txt

MYSQL數(shù)據(jù)庫(kù)的插入極限分析

1、假如同時(shí)從同一個(gè)客戶(hù)端插入許多行,使用含多個(gè)VALUE的INSERT語(yǔ)句同時(shí)插入幾行。這比使用單行INSERT語(yǔ)句快(在某些狀況下快幾倍)。假如你正向一個(gè)非空表添加數(shù)據(jù),可以調(diào)整bulk__buffer_size變量,使數(shù)據(jù)插入更快。參見(jiàn)5.3.3節(jié),"服務(wù)器系統(tǒng)變量'。

2、假如你從不同的客戶(hù)端插入許多行,能通過(guò)INSERTDELAYED語(yǔ)句加快速度。參見(jiàn)13.2.4節(jié),"INSERT語(yǔ)法'。

3、用MyISAM,假如在表中沒(méi)有刪除的行,能在SELECT語(yǔ)句正在運(yùn)行的同時(shí)插入行。

4、當(dāng)從一個(gè)文本文件裝載一個(gè)表時(shí),使用LOADDATAINFILE。這通常比使用許多INSERT語(yǔ)句快20倍。參見(jiàn)13.2.5節(jié),"LOADDATAINFILE語(yǔ)法'。

5、當(dāng)表有許多索引時(shí),有可能要多做些工作使得LOADDATAINFILE更快些。使用下列過(guò)程:

1).有選擇地用CREATETABLE創(chuàng)建表。

2).執(zhí)行FLUSHTABLES語(yǔ)句或命令mysql***flush-tables。

3).使用myisamchk--keys-used=0-rq/path/to/db/tbl_name。這將從表中取消全部索引的使用。

4).用LOADDATAINFILE把數(shù)據(jù)插入到表中,由于不更新任何索引,因此很快。

5).假如只想在以后讀取表,使用myisampack壓縮它。參見(jiàn)節(jié),"壓縮表特性'。

6).用myisamchk-r-q/path/to/db/tbl_name重新創(chuàng)建索引。這將在寫(xiě)入磁盤(pán)前在內(nèi)存中創(chuàng)建索引樹(shù),并且它更快,由于避開(kāi)了大量磁盤(pán)搜尋。結(jié)果索引樹(shù)也被完善地平衡。

7).執(zhí)行FLUSHTABLES語(yǔ)句或mysql***flush-tables命令。

6、鎖定表可以加速用多個(gè)語(yǔ)句執(zhí)行的INSERT操作:

*LOCKTABLESaWRITE;

*INSERTINTOaVALUES(1,23),(2,34),(4,33);

*INSERTINTOaVALUES(8,26),(6,29);

*UNLOCKTABLES;

這樣性能會(huì)提高,由于索引緩存區(qū)僅在全部INSERT語(yǔ)句完成后刷新到磁盤(pán)上一次。一般有多少I(mǎi)NSERT語(yǔ)句即有多少索引緩存區(qū)刷新。假如能用一個(gè)語(yǔ)句插入全部的行,就不需要鎖定。

對(duì)于事務(wù)表,應(yīng)使用BEGIN和MIT代替LOCKTABLES來(lái)加快插入。

MySQL數(shù)據(jù)庫(kù)出錯(cuò)代碼列表

MySQL出錯(cuò)代碼列表:

1005:創(chuàng)建表失敗

1006:創(chuàng)建數(shù)據(jù)庫(kù)失敗

1007:數(shù)據(jù)庫(kù)已存在,創(chuàng)建數(shù)據(jù)庫(kù)失敗

1008:數(shù)據(jù)庫(kù)不存在,刪除數(shù)據(jù)庫(kù)失敗

1009:不能刪除數(shù)據(jù)庫(kù)文件導(dǎo)致刪除數(shù)據(jù)庫(kù)失敗

1010:不能刪除數(shù)據(jù)名目導(dǎo)致刪除數(shù)據(jù)庫(kù)失敗

1011:刪除數(shù)據(jù)庫(kù)文件失敗

1012:不能讀取系統(tǒng)表中的記錄

1020:記錄已被其他用戶(hù)修改

1021:硬盤(pán)剩余空間不足,請(qǐng)加大硬盤(pán)可用空間

1022:關(guān)鍵字重復(fù),更改記錄失敗

1023:關(guān)閉時(shí)發(fā)生錯(cuò)誤

1024:讀文件錯(cuò)誤

1025:更改名字時(shí)發(fā)生錯(cuò)誤

1026:寫(xiě)文件錯(cuò)誤

1032:記錄不存在

1036:數(shù)據(jù)表是只讀的,不能對(duì)它進(jìn)行修改

1037:系統(tǒng)內(nèi)存不足,請(qǐng)重啟數(shù)據(jù)庫(kù)或重啟服務(wù)器

1038:用于排序的內(nèi)存不足,請(qǐng)?jiān)龃笈判蚓彌_區(qū)

1040:已到達(dá)數(shù)據(jù)庫(kù)的最大連接數(shù),請(qǐng)加大數(shù)據(jù)庫(kù)可用連接數(shù)

1041:系統(tǒng)內(nèi)存不足

1042:無(wú)效的主機(jī)名

1043:無(wú)效連接

1044:當(dāng)前用戶(hù)沒(méi)有訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)的權(quán)限

1045:不能連接數(shù)據(jù)庫(kù),用戶(hù)名或密碼錯(cuò)誤

1048:字段不能為空

1049:數(shù)據(jù)庫(kù)不存在

1050:數(shù)據(jù)表已存在

1051:數(shù)據(jù)表不存在

1054:字段不存在(SQLSTATE:42S22)

1065:無(wú)效的SQL語(yǔ)句,SQL語(yǔ)句為空

1081:不能建立Socket連接

1114:數(shù)據(jù)表已滿(mǎn),不能容納任何記錄

1116:打開(kāi)的數(shù)據(jù)表太多

1129:數(shù)據(jù)庫(kù)消失特別,請(qǐng)重啟數(shù)據(jù)庫(kù)

1130:連接數(shù)據(jù)庫(kù)失敗,沒(méi)有連接數(shù)據(jù)庫(kù)的權(quán)限

1133:數(shù)據(jù)庫(kù)用戶(hù)不存在

1141:當(dāng)前用戶(hù)無(wú)權(quán)訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)

1142:當(dāng)前用戶(hù)無(wú)權(quán)訪(fǎng)問(wèn)數(shù)據(jù)表

1143:當(dāng)前用戶(hù)無(wú)權(quán)訪(fǎng)問(wèn)數(shù)據(jù)表中的字段

1146:數(shù)據(jù)表不存在

1147:未定義用戶(hù)對(duì)數(shù)據(jù)表的訪(fǎng)問(wèn)權(quán)限

1149:SQL語(yǔ)句語(yǔ)法錯(cuò)誤

1158:網(wǎng)絡(luò)錯(cuò)誤,消失讀錯(cuò)誤,請(qǐng)檢查網(wǎng)絡(luò)連接狀況

1159:網(wǎng)絡(luò)錯(cuò)誤,讀超時(shí),請(qǐng)檢查網(wǎng)絡(luò)連接狀況

1160:網(wǎng)絡(luò)錯(cuò)誤,消失寫(xiě)錯(cuò)誤,請(qǐng)檢查網(wǎng)絡(luò)連接狀況

1161:網(wǎng)絡(luò)錯(cuò)誤,寫(xiě)超時(shí),請(qǐng)檢查網(wǎng)絡(luò)連接狀況

1062:字段值重復(fù),入庫(kù)失敗

1064:語(yǔ)法錯(cuò)誤,常見(jiàn)的比如解釋--后沒(méi)加空格

1169:字段值重復(fù),更新記錄失敗

1177:打開(kāi)數(shù)據(jù)表失敗

1180:提交事務(wù)失敗

1181:回滾事務(wù)失敗

1193:變量沒(méi)聲明,常在寫(xiě)存儲(chǔ)過(guò)程時(shí)發(fā)生

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論