




版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 海豐地基加固施工方案
- 防水的施工方案
- 自拌混凝土施工方案
- 河源頂管施工方案
- 泥漿護(hù)壁施工方案
- 軟件培訓(xùn)方案
- 二零二五年度果樹(shù)種植土地托管承包與農(nóng)村金融創(chuàng)新合作協(xié)議
- 2025年度汽車(chē)維修行業(yè)安全生產(chǎn)責(zé)任簡(jiǎn)易合同
- 二零二五年度高科技研發(fā)項(xiàng)目勞務(wù)合同風(fēng)險(xiǎn)評(píng)估書(shū)
- 二零二五年度健康醫(yī)療合伙投資公司股權(quán)合作協(xié)議
- 七年級(jí)數(shù)學(xué)新北師大版(2024)下冊(cè)第一章《整式的乘除》單元檢測(cè)習(xí)題(含簡(jiǎn)單答案)
- 《工程熱力學(xué)》課件-11 理想氣體熱力學(xué)能、焓和熵的計(jì)算
- 發(fā)票知識(shí)培訓(xùn)課件
- 《英國(guó)小說(shuō)家羅琳》課件
- 《綜合辦崗位職責(zé)》課件
- 學(xué)校與家庭在學(xué)生心理健康中的協(xié)同作用
- 大學(xué)英語(yǔ)翻譯課件
- 薄膜電容項(xiàng)目立項(xiàng)申請(qǐng)報(bào)告
- 《中醫(yī)望聞問(wèn)切》課件
- 教師師德師風(fēng)考核細(xì)則
- 聲帶腫物的護(hù)理教學(xué)查房
評(píng)論
0/150
提交評(píng)論