mysqldump
bitsCN.com
根據(jù)mysql 5.5第6.4章節(jié)理解和自己翻譯水平有限如有紕漏請指教,原文如下.http://dev.mysql.com/doc/refman/5.5/en/using-mysqldump.html 6.4 使用mysqldump備份(Using mysqldump for Backups)首先多余的不用說了備份用來干什么大家都清楚。mysqldump備份分兩種輸出形式:1. 無--tab選項,輸出標(biāo)準(zhǔn)的SQL格式。輸出包含CREATE語句(databases,tables,stored routines,and so forth),INSERT語句插入數(shù)據(jù)到表。輸出可以保存成一個文件,之后可以用mysql再次創(chuàng)建。選項可以控制輸出SQL語句格式,文件類型。2. 含--tab選項,每個表對應(yīng)兩個備份文件。一個文件為由tab分割的文本,一行對應(yīng)一條數(shù)據(jù)記錄,在目錄中這個文件輸出名為tb1_name.txt。同樣會創(chuàng)建一個含有CREATE TABLE語句,名為tb1_name.sql的文件。 6.4.1 使用mysqldump備份SQL數(shù)據(jù)(Dumping Data in SQL Format with mysqldump)默認(rèn)語法
shell>mysqldump [arguments] > file_name
備份所有數(shù)據(jù)庫
shell>mysqldump --all-databases > dump.sql
如果你數(shù)據(jù)庫有密碼上面那樣當(dāng)然是不行的加上用用戶密碼選項
shell>mysqldump -uroot -p --all-databases > dump.sql
選擇性的備份數(shù)據(jù)庫
shell>mysqldump --databases db1 db2 db3 > dump.sql
--databases選項會把后面幾個名稱作為數(shù)據(jù)庫名。沒有這個選項mysqldump會把第一個當(dāng)成數(shù)據(jù)庫名,后面的當(dāng)成表名。 --all-databases或--databases,mysqldump會為每一個數(shù)據(jù)庫寫入CREATE DATABASE和USE。以確保當(dāng)備份文件被再次載入的時候,如果數(shù)據(jù)庫不存在則創(chuàng)建數(shù)據(jù)庫,然后設(shè)置為當(dāng)前數(shù)據(jù)庫(USE DATABASES),當(dāng)INSERT的時候數(shù)據(jù)庫的內(nèi)容均會加載到同一個數(shù)據(jù)庫中。 如果想要備份文件載入時強(qiáng)制刪除數(shù)據(jù)庫,可以使用--add-drop-database。這樣mysqldump會在CREATE DATABASE前寫入DROP DATABASE。 備份單個數(shù)據(jù)庫
shell>mysqldump --databases test > dump.sql
在單個數(shù)據(jù)庫時可以這樣簡寫
shell>mysqldump test > dump.sql
省略--databases時備份文件沒有CREATE DATABASE,USE。有下面幾方面含義。1.當(dāng)你導(dǎo)入備份文件時,你必須選擇一個默認(rèn)數(shù)據(jù)庫名這樣程序才知道要導(dǎo)入到哪個數(shù)據(jù)庫。2.當(dāng)導(dǎo)入到時候你可以選擇一個不同的數(shù)據(jù)庫名。3.如果要導(dǎo)入到數(shù)據(jù)庫不存在,你必須提前創(chuàng)建。4.因為輸出文件沒有CREATE DATABASE,所以--add-drop-database選項沒有效果,如果你使用也沒有DROP DATABASE。 選擇表備份,表名跟在數(shù)據(jù)庫名之后
shell>mysqldump test t1 t3 t7 > dump.sql
6.4.2 導(dǎo)入SQL備份文件(Reloading SQL-Format Backups)導(dǎo)入由mysqldump備份的文件,如果使用了--all-databases或--databases選項,包含CREATE DATABASE和USE。且不需要導(dǎo)入到不同的數(shù)據(jù)庫中,可以這樣寫。
另外在mysql內(nèi)部你可以這樣寫
如果是簡寫單個數(shù)據(jù)庫導(dǎo)出沒有CREATE DATABASE和USE,如果需要則先創(chuàng)建數(shù)據(jù)庫。
shell>mysqladmin create db1
接著選擇具體的數(shù)據(jù)庫
shell>mysql db1 < dump.sql
另外在mysql內(nèi)部創(chuàng)建數(shù)據(jù)庫,選擇數(shù)據(jù)庫,導(dǎo)入備份:
mysql>CREATE DATABASE IF NOT EXISTS db1;
mysql>USE db1;
mysql>source dump.sql
6.4.3 使用mysqldump以分割文本方式備份(Dumping Data in Delimited-Text Format with mysqldump)mysqldump備份時使用--tab=dir_name,使用dir_name作為備份文件輸出目錄,每一個表對應(yīng)兩個文件,文件名為表名。例如表名為t1,文件名則為t1.sql和t1.txt。.sql文件含表的CREATE TABLE語句。.txt文件含表的數(shù)據(jù),一行對應(yīng)一條數(shù)據(jù)記錄。例如備份數(shù)據(jù)庫db1到/tmp目錄
shell>mysqldump --tab=/tmp db1
.txt文件被服務(wù)器創(chuàng)建其中包含表數(shù)據(jù),為系統(tǒng)用戶所有。當(dāng)程序運(yùn)行SELECT ... INTO OUTFILE寫入文件時你必須擁有相應(yīng)權(quán)限,.txt存在時會發(fā)生錯誤。 服務(wù)器發(fā)送創(chuàng)建CREATE備份表命令給mysqldump寫入.sql,因此文件是mysqldump所有。 --tab最好的用法是本地備份。如果你用來備份遠(yuǎn)程服務(wù)器,--tab的目錄必須本地和遠(yuǎn)程服務(wù)器都存在,.txt文件將會寫入到遠(yuǎn)程服務(wù)器(on the server host)目錄中,.sql文件將會寫入到本地目錄中(on the client host)。 對于mysql --tab,默認(rèn)情況下服務(wù)器將表數(shù)據(jù)寫入.txt一行一條記錄兩個值之間tab分割,沒有引號,新的一行在行的末尾。(這些都為相同的默認(rèn)值SELECT ... INTO OUTFILE) 通過選項輸出不同的格式,mysqldump支持如下:--fields-terminated-by=str字段值之間的分隔符默認(rèn)為tab --fields-enclosed-by=char字段值兩邊的分隔符默認(rèn)為空(PS這個翻譯過來真不知道說的對不對.效果可以參考INSERT INTO中如果VALUE是字符型就要加上雙引號中的雙引號) --fields-optionally-enclosed-by=char這個效果同上但只有字符型的字段值才會加默認(rèn)值為空 --fields-escaped-by=char轉(zhuǎn)義特殊字符的字符默認(rèn)值無 --lines-terminated-by=str記錄之間的分隔符默認(rèn)值是換行 根據(jù)這些選項你可以指定任何值,可能需要在命令行中對值進(jìn)行適當(dāng)?shù)囊没蜣D(zhuǎn)義。另外可以使用16進(jìn)制表示值,假設(shè)想要mysqldump輸出的值引用雙引號。可以添加 --fields-enclosed-by 選項指定值為雙引號。但是這個值往往是特殊的轉(zhuǎn)義字符需要處理一下。例如在unix上可以這樣使用雙引號:--fields-enclosed-by='"'在其他的平臺可以使用16進(jìn)制表示:--fields-enclosed-by=0x22 這是幾個選項的同時使用的例子,記錄以逗號分隔多條記錄之間用換行/回車:
shell> mysqldump --tab=/tmp --fields-terminated-by=, --fields-enclosed-by='"' --lines-terminated-by=0x0d0adb1
(windows平臺--fields-enclosed-by要等于0x22。換行符也沒有出來變成了亂碼,這個可能也需要改)當(dāng)設(shè)置了數(shù)據(jù)輸出格式,在導(dǎo)入備份數(shù)據(jù)的時候同樣也要設(shè)置相同的格式,以保證內(nèi)容正確導(dǎo)入。 6.4.4 導(dǎo)入以分割文本方式的備份(Reloading Delimited-Text Format Backups)使用mysqldump --tab文件備份,每一個表都被存儲成包含CREATE TABLE語句的.sql文件和保護(hù)表數(shù)據(jù)的.txt文件。導(dǎo)入表之前先定位到備份文件的目錄。這樣.sql文件先創(chuàng)建空的表,然后.txt文件導(dǎo)入數(shù)據(jù):
1 shell> mysql db1 < t1.sql
2 shell> mysqlimport db1 t1.txt
另外在mysql端導(dǎo)入需要使用LOAD DATA INFILE:
1 mysql> USE db1;
2 mysql> LOAD DATA INFILE 't1.txt' INTO TABLE t1;
(PS:范例中t1.txt的路徑為當(dāng)前選中數(shù)據(jù)庫的路徑,可以修改為絕對路徑'C:/t1.txt') 如果在備份文件時使用了控制數(shù)據(jù)格式的選項,在使用mysqlimport或LOAD DATA INFILE導(dǎo)入時也需設(shè)置相同的選項:
1 shell>mysqlimport --fields-terminated-by=, --fields-enclosed-by='"' --lines-terminated-by=0x0d0a db1 t1.txt
或
1 mysql>USE db1;
2 mysql>LOAD DATA INFILE 't1.txt' INTO TABLE t1
3 ->FIELDS TERMINATED BY ',' FIELDS ENCLOSED BY '"'
4 ->LINES TERMINATED BY '/r/n';
6.4.5 mysqldump技巧(mysqldump Tips)這一章解決些常見問題所需的技術(shù)如何創(chuàng)建備份數(shù)據(jù)庫如何從一個服務(wù)器將數(shù)據(jù)庫拷貝到另一個服務(wù)器如何備份一個存儲程序(存儲過程函數(shù),觸發(fā)器,日志)如何備份數(shù)據(jù)和創(chuàng)建分離 6.4.5.1 創(chuàng)建數(shù)據(jù)庫備份文件(Making a Copy of a Database)
1 shell> mysqldump db1 > dump.sql
2 shell> mysqladmin create db2
3 shell> mysql db2 < dump.sql
在使用db1備份文件覆蓋db2時不要使用--databases選項因為那樣會在備份文件中寫入USE db1. 6.4.5.2 從一個服務(wù)器復(fù)制數(shù)據(jù)庫到另一個服務(wù)器(Copy a Database from one Server to Another)服務(wù)器1:
1 shell>mysqldump --databases db1 > dump.sql
將備份文件復(fù)制到服務(wù)器2 服務(wù)器2:
使用mysqldump時添加--database選項備份文件會包含CREATE DATABASE和USE語句,如果不存在則會創(chuàng)建同時設(shè)為默認(rèn)數(shù)據(jù)庫在導(dǎo)入數(shù)據(jù)。 你可以忽略--database選項,但在導(dǎo)入數(shù)據(jù)庫的時候需要創(chuàng)建一個數(shù)據(jù)庫(如果需要)然后設(shè)置為當(dāng)前數(shù)據(jù)庫。 服務(wù)器1:
1 shell>mysqldump db1 > dump.sql
服務(wù)器2:
1 shell> mysqladmin create db1
2 shell> mysql db1 < dump.sql
所以忽略--database選項就可以選擇不同的數(shù)據(jù)庫導(dǎo)入。 6.4.5.3 備份存儲程序(Dumping Stored Programs)以下是存儲程序幾個可選選項(存儲過程函數(shù),觸發(fā)器,日志)--events:調(diào)度事件--routines:存儲過程和函數(shù)--triggers:觸發(fā)器 triggers默認(rèn)是備份的routines,events需要選擇性備份默認(rèn)是不備份的可以選擇跳過--skip-events, --skip-routines, --skip-triggers。 6.4.5.4 備份表定義和內(nèi)容分開(Dumping Table Definitions and Content Separately)--no-data選項告訴mysqldump不備份表數(shù)據(jù),備份文件僅包括創(chuàng)建表。相對的--no-create-info選項告訴mysqldump備份僅包含數(shù)據(jù)。示例:
1 shell> mysqldump --no-data test > dump-defs.sql
2 shell> mysqldump --no-create-info test > dump-data.sql
一個只備份CREATE存儲和事件的例子:
shell> mysqldump --no-data --routines --event stest > dump-defs.sql
6.4.5.5 用備份來測試mysql升級后兼容的問題(Using mysqldump to test for Upgrade Incompatibilities)當(dāng)考慮mysql升級時需要謹(jǐn)慎的考慮安裝新的版本,獨(dú)立于現(xiàn)有的版本。這時可以備份現(xiàn)有數(shù)據(jù)庫導(dǎo)入到新的版本中。(這是一個測試新版本經(jīng)常使用的方法)在現(xiàn)有服務(wù)器:
shell> mysqldump --all-databases --no-data --routines --events > dump-defs.sql
在新服務(wù)器:
shell> mysql < dump-defs.sql
因為備份文件沒有表數(shù)據(jù)庫,所以可以處理的很快。這可以發(fā)現(xiàn)潛在的不兼容,而不需要長時間的數(shù)據(jù)加載操作。查看備份文件處理時發(fā)生的警告或錯誤。在驗證了沒有兼容性問題后備份表數(shù)據(jù)導(dǎo)入到新服務(wù)器在現(xiàn)有服務(wù)器:
shell> mysqldump --all-databases --no-create-info > dump-data.sql
在新服務(wù)器:
shell> mysql < dump-data.sql
現(xiàn)在檢查表內(nèi)容運(yùn)行一些測試查詢bitsCN.com
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com