mysqldump命令導(dǎo)入導(dǎo)出數(shù)據(jù)庫(kù)方法與實(shí)例匯總
這篇文章主要介紹了mysqldump命令導(dǎo)入導(dǎo)出數(shù)據(jù)庫(kù)方法與實(shí)例匯總的相關(guān)資料,需要的朋友可以參考下
mysqldump命令的用法
1、導(dǎo)出所有庫(kù)
系統(tǒng)命令行
mysqldump -uusername -ppassword --all-databases > all.sql
2、導(dǎo)入所有庫(kù)
mysql命令行
mysql>source all.sql;
3、導(dǎo)出某些庫(kù)
系統(tǒng)命令行
mysqldump -uusername -ppassword --databases db1 db2 > db1db2.sql
4胯甩、導(dǎo)入某些庫(kù)
mysql命令行
mysql>source db1db2.sql;
5皆愉、導(dǎo)入某個(gè)庫(kù)
系統(tǒng)命令行
mysql -uusername -ppassword db1 < db1.sql;
或mysql命令行
mysql>source db1.sql;
6今穿、導(dǎo)出某些數(shù)據(jù)表
系統(tǒng)命令行
mysqldump -uusername -ppassword db1 table1 table2 > tb1tb2.sql
7奉芦、導(dǎo)入某些數(shù)據(jù)表
系統(tǒng)命令行
mysql -uusername -ppassword db1 < tb1tb2.sql
或mysql命令行
mysql>
user db1;
source tb1tb2.sql;
8、mysqldump字符集設(shè)置
mysqldump -uusername -ppassword --default-character-set=gb2312 db1 table1 > tb1.sql
mysqldump客戶端可用來(lái)轉(zhuǎn)儲(chǔ)數(shù)據(jù)庫(kù)或搜集數(shù)據(jù)庫(kù)進(jìn)行備份或?qū)?shù)據(jù)轉(zhuǎn)移到另一個(gè)sql服務(wù)器(不一定是一個(gè)mysql服務(wù)器)凤跑。轉(zhuǎn)儲(chǔ)包含創(chuàng)建表和/或裝載表的sql語(yǔ)句。
如果在服務(wù)器上進(jìn)行備份叛复,并且表均為myisam表仔引,應(yīng)考慮使用mysqlhotcopy,因?yàn)榭梢愿斓剡M(jìn)行備份和恢復(fù)致扯。
有3種方式來(lái)調(diào)用mysqldump:
shell> mysqldump [options] db_name [tables]
shell> mysqldump [options] ---database db1 [db2 db3...]
shell> mysqldump [options] --all--database
如果沒(méi)有指定任何表或使用了---database或--all--database選項(xiàng)肤寝,則轉(zhuǎn)儲(chǔ)整個(gè)數(shù)據(jù)庫(kù)。
要想獲得你的版本的mysqldump支持的選項(xiàng)抖僵,執(zhí)行mysqldump ---help鲤看。
如果運(yùn)行mysqldump沒(méi)有--quick或--opt選項(xiàng),mysqldump在轉(zhuǎn)儲(chǔ)結(jié)果前將整個(gè)結(jié)果集裝入內(nèi)存耍群。如果轉(zhuǎn)儲(chǔ)大數(shù)據(jù)庫(kù)可能會(huì)出現(xiàn)問(wèn)題义桂。該選項(xiàng)默認(rèn)啟用,但可以用--skip-opt禁用蹈垢。
如果使用最新版本的mysqldump程序生成一個(gè)轉(zhuǎn)儲(chǔ)重裝到很舊版本的mysql服務(wù)器中慷吊,不應(yīng)使用--opt或-e選項(xiàng)。
mysqldump支持下面的選項(xiàng):
---help曹抬,-溉瓶?
顯示幫助消息并退出。
--add-drop--database
在每個(gè)create database語(yǔ)句前添加drop database語(yǔ)句谤民。
--add-drop-tables
在每個(gè)create table語(yǔ)句前添加drop table語(yǔ)句堰酿。
--add-locking
用lock tables和unlock tables語(yǔ)句引用每個(gè)表轉(zhuǎn)儲(chǔ)。重載轉(zhuǎn)儲(chǔ)文件時(shí)插入得更快张足。
--all--database触创,-a
轉(zhuǎn)儲(chǔ)所有數(shù)據(jù)庫(kù)中的所有表。與使用---database選項(xiàng)相同为牍,在命令行中命名所有數(shù)據(jù)庫(kù)哼绑。
--allow-keywords
允許創(chuàng)建關(guān)鍵字列名岩馍。應(yīng)在每個(gè)列名前面加上表名前綴。
---comments[={0|1}]
如果設(shè)置為 0抖韩,禁止轉(zhuǎn)儲(chǔ)文件中的其它信息蛀恩,例如程序版本、服務(wù)器版本和主機(jī)帽蝶。--skip—comments與---comments=0的結(jié)果相同赦肋。 默認(rèn)值為1,即包括額外信息励稳。
--compact
產(chǎn)生少量輸出佃乘。該選項(xiàng)禁用注釋并啟用--skip-add-drop-tables、--no-set-names驹尼、--skip-disable-keys和--skip-add-locking選項(xiàng)趣避。
--compatible=name
產(chǎn)生與其它數(shù)據(jù)庫(kù)系統(tǒng)或舊的mysql服務(wù)器更兼容的輸出。值可以為ansi新翎、mysql323程帕、mysql40、postgresql地啰、oracle愁拭、mssql、db2亏吝、maxdb岭埠、no_key_options、no_tables_options或者no_field_options蔚鸥。要使用幾個(gè)值惜论,用逗號(hào)將它們隔開(kāi)。這些值與設(shè)置服務(wù)器sql模式的相應(yīng)選項(xiàng)有相同的含義止喷。
該選項(xiàng)不能保證同其它服務(wù)器之間的兼容性馆类。它只啟用那些目前能夠使轉(zhuǎn)儲(chǔ)輸出更兼容的sql模式值。例如弹谁,--compatible=oracle 不映射oracle類型或使用oracle注釋語(yǔ)法的數(shù)據(jù)類型乾巧。
--complete-insert,-c
使用包括列名的完整的insert語(yǔ)句预愤。
--compress沟于,-c
壓縮在客戶端和服務(wù)器之間發(fā)送的所有信息(如果二者均支持壓縮)。
--create-option
在create table語(yǔ)句中包括所有mysql表選項(xiàng)鳖粟。
---database社裆,-b
轉(zhuǎn)儲(chǔ)幾個(gè)數(shù)據(jù)庫(kù)拙绊。通常情況向图,mysqldump將命令行中的第1個(gè)名字參量看作數(shù)據(jù)庫(kù)名泳秀,后面的名看作表名。使用該選項(xiàng)榄攀,它將所有名字參量看作數(shù)據(jù)庫(kù)名嗜傅。create database if not exists db_name和use db_name語(yǔ)句包含在每個(gè)新數(shù)據(jù)庫(kù)前的輸出中。
---debug[=debug_options]檩赢,-# [debug_options]
寫調(diào)試日志吕嘀。debug_options字符串通常為'd:t:o,file_name'。
--default-character-set=charset
使用charsetas默認(rèn)字符集贞瞒。如果沒(méi)有指定偶房,mysqldump使用utf8。
--delayed-insert
使用insert delayed語(yǔ)句插入行军浆。
--delete-master-logs
在主復(fù)制服務(wù)器上棕洋,完成轉(zhuǎn)儲(chǔ)操作后刪除二進(jìn)制日志。該選項(xiàng)自動(dòng)啟用--master-data乒融。
--disable-keys掰盘,-k
對(duì)于每個(gè)表,用/*!40000 alter table tbl_name disable keys */;和/*!40000 alter table tbl_name enable keys */;語(yǔ)句引用insert語(yǔ)句赞季。這樣可以更快地裝載轉(zhuǎn)儲(chǔ)文件愧捕,因?yàn)樵诓迦胨行泻髣?chuàng)建索引。該選項(xiàng)只適合myisam表申钩。
--extended-insert次绘,-e
使用包括幾個(gè)values列表的多行insert語(yǔ)法。這樣使轉(zhuǎn)儲(chǔ)文件更小典蜕,重載文件時(shí)可以加速插入断盛。
--fields-terminated-by=...,--fields-enclosed-by=...愉舔,--fields-optionally-enclosed-by=...钢猛,--fields-escaped-by=...,--行-terminated-by=...
這些選項(xiàng)結(jié)合-t選項(xiàng)使用轩缤,與load data infile的相應(yīng)子句有相同的含義命迈。
--first-slave,-x
不贊成使用火的,現(xiàn)在重新命名為--lock-all-tables壶愤。
--flush-logs,-f
開(kāi)始轉(zhuǎn)儲(chǔ)前刷新mysql服務(wù)器日志文件馏鹤。該選項(xiàng)要求reload權(quán)限征椒。請(qǐng)注意如果結(jié)合--all--database(或-a)選項(xiàng)使用該選項(xiàng),根據(jù)每個(gè)轉(zhuǎn)儲(chǔ)的數(shù)據(jù)庫(kù)刷新日志湃累。例外情況是當(dāng)使用--lock-all-tables或--master-data的時(shí)候:在這種情況下勃救,日志只刷新一次碍讨,在所有 表被鎖定后刷新。如果你想要同時(shí)轉(zhuǎn)儲(chǔ)和刷新日志蒙秒,應(yīng)使用--flush-logs連同--lock-all-tables或--master-data勃黍。
--force,-f
在表轉(zhuǎn)儲(chǔ)過(guò)程中晕讲,即使出現(xiàn)sql錯(cuò)誤也繼續(xù)覆获。
--host=host_name,-h host_name
從給定主機(jī)的mysql服務(wù)器轉(zhuǎn)儲(chǔ)數(shù)據(jù)瓢省。默認(rèn)主機(jī)是localhost弄息。
--hex-blob
使用十六進(jìn)制符號(hào)轉(zhuǎn)儲(chǔ)二進(jìn)制字符串列(例如,'abc' 變?yōu)?x616263)勤婚。影響到的列有binary疑枯、varbinary、blob蛔六。
--lock-all-tables荆永,-x
所有數(shù)據(jù)庫(kù)中的所有表加鎖。在整體轉(zhuǎn)儲(chǔ)過(guò)程中通過(guò)全局讀鎖定來(lái)實(shí)現(xiàn)国章。該選項(xiàng)自動(dòng)關(guān)閉--single-transaction和--lock-tables具钥。
--lock-tables,-l
開(kāi)始轉(zhuǎn)儲(chǔ)前鎖定所有表液兽。用read local鎖定表以允許并行插入myisam表骂删。對(duì)于事務(wù)表例如innodb和bdb,--single-transaction是一個(gè)更好的選項(xiàng)四啰,因?yàn)樗桓拘枰i定表宁玫。
請(qǐng)注意當(dāng)轉(zhuǎn)儲(chǔ)多個(gè)數(shù)據(jù)庫(kù)時(shí),--lock-tables分別為每個(gè)數(shù)據(jù)庫(kù)鎖定表柑晒。因此欧瘪,該選項(xiàng)不能保證轉(zhuǎn)儲(chǔ)文件中的表在數(shù)據(jù)庫(kù)之間的邏輯一致性。不同數(shù)據(jù)庫(kù)表的轉(zhuǎn)儲(chǔ)狀態(tài)可以完全不同匙赞。
--master-data[=value]
該選項(xiàng)將二進(jìn)制日志的位置和文件名寫入到輸出中佛掖。該選項(xiàng)要求有reload權(quán)限,并且必須啟用二進(jìn)制日志涌庭。如果該選項(xiàng)值等于1芥被,位置和文件名被寫入change master語(yǔ)句形式的轉(zhuǎn)儲(chǔ)輸出,如果你使用該sql轉(zhuǎn)儲(chǔ)主服務(wù)器以設(shè)置從服務(wù)器坐榆,從服務(wù)器從主服務(wù)器二進(jìn)制日志的正確位置開(kāi)始拴魄。如果選項(xiàng)值等于2,change master語(yǔ)句被寫成sql注釋。如果value被省略匹中,這是默認(rèn)動(dòng)作蚀狰。
--master-data選項(xiàng)啟用--lock-all-tables,除非還指定--single-transaction(在這種情況下职员,只在剛開(kāi)始轉(zhuǎn)儲(chǔ)時(shí)短時(shí)間獲得全局讀鎖定。又見(jiàn)--single-transaction跛溉。在任何一種情況下焊切,日志相關(guān)動(dòng)作發(fā)生在轉(zhuǎn)儲(chǔ)時(shí)。該選項(xiàng)自動(dòng)關(guān)閉--lock-tables芳室。
--no-create-db专肪,-n
該選項(xiàng)禁用create database /*!32312 if not exists*/ db_name語(yǔ)句,如果給出---database或--all--database選項(xiàng)堪侯,則包含到輸出中嚎尤。
--no-create-info,-t
不寫重新創(chuàng)建每個(gè)轉(zhuǎn)儲(chǔ)表的create table語(yǔ)句伍宦。
--no-data芽死,-d
不寫表的任何行信息。如果你只想轉(zhuǎn)儲(chǔ)表的結(jié)構(gòu)這很有用次洼。
--opt
該選項(xiàng)是速記关贵;等同于指定 --add-drop-tables--add-locking --create-option --disable-keys--extended-insert --lock-tables --quick --set-charset。它可以給出很快的轉(zhuǎn)儲(chǔ)操作并產(chǎn)生一個(gè)可以很快裝入mysql服務(wù)器的轉(zhuǎn)儲(chǔ)文件卖毁。該選項(xiàng)默認(rèn)開(kāi)啟揖曾,但可以用--skip-opt禁用。要想只禁用確信用-opt啟用的選項(xiàng)亥啦,使用--skip形式炭剪;例如,--skip-add-drop-tables或--skip-quick翔脱。
--password[=password]奴拦,-p[password]
連接服務(wù)器時(shí)使用的密碼。如果你使用短選項(xiàng)形式(-p)届吁,不能在選項(xiàng)和密碼之間有一個(gè)空格粱坤。如果在命令行中,忽略了--password或-p選項(xiàng)后面的 密碼值瓷产,將提示你輸入一個(gè)站玄。
--port=port_num,-p port_num
用于連接的tcp/ip端口號(hào)濒旦。
--protocol={tcp | socket | pipe | memory}
使用的連接協(xié)議株旷。
--quick,-q
該選項(xiàng)用于轉(zhuǎn)儲(chǔ)大的表。它強(qiáng)制mysqldump從服務(wù)器一次一行地檢索表中的行而不是檢索所有行并在輸出前將它緩存到內(nèi)存中晾剖。
--quote-names锉矢,-q
用‘`'字符引用數(shù)據(jù)庫(kù)、表和列名齿尽。如果服務(wù)器sql模式包括ansi_quotes選項(xiàng)沽损,用‘"'字符引用名。默認(rèn)啟用該選項(xiàng)循头∶喙溃可以用--skip-quote-names禁用,但該選項(xiàng)應(yīng)跟在其它選項(xiàng)后面卡骂,例如可以啟用--quote-names的--compatible国裳。
--result-file=file,-r file
將輸出轉(zhuǎn)向給定的文件全跨。該選項(xiàng)應(yīng)用在windows中缝左,因?yàn)樗箤⑿滦小甛n'字符轉(zhuǎn)換為‘\r\n'回車、返回/新行序列浓若。
--routines渺杉,-r
在轉(zhuǎn)儲(chǔ)的數(shù)據(jù)庫(kù)中轉(zhuǎn)儲(chǔ)存儲(chǔ)程序(函數(shù)和程序)。使用---routines產(chǎn)生的輸出包含create procedure和create function語(yǔ)句以重新創(chuàng)建子程序挪钓。但是少办,這些語(yǔ)句不包括屬性,例如子程序定義者或創(chuàng)建和修改時(shí)間戳诵原。這說(shuō)明當(dāng)重載子程序時(shí)英妓,對(duì)它們進(jìn)行創(chuàng)建時(shí)定義者應(yīng)設(shè)置為重載用戶,時(shí)間戳等于重載時(shí)間绍赛。
如果你需要?jiǎng)?chuàng)建的子程序使用原來(lái)的定義者和時(shí)間戳屬性蔓纠,不使用--routines。相反吗蚌,使用一個(gè)具有mysql數(shù)據(jù)庫(kù)相應(yīng)權(quán)限的mysql賬戶直接轉(zhuǎn)儲(chǔ)和重載mysql.proc表的內(nèi)容腿倚。
該選項(xiàng)在mysql 5.1.2中添加進(jìn)來(lái)。在此之前蚯妇,存儲(chǔ)程序不轉(zhuǎn)儲(chǔ)敷燎。
--set-charset
將set names default_character_set加到輸出中。該選項(xiàng)默認(rèn)啟用箩言。要想禁用set names語(yǔ)句硬贯,使用--skip-set-charset。
--single-transaction
該選項(xiàng)從服務(wù)器轉(zhuǎn)儲(chǔ)數(shù)據(jù)之前發(fā)出一個(gè)begin sql語(yǔ)句陨收。它只適用于事務(wù)表饭豹,例如innodb和bdb鸵赖,因?yàn)槿缓笏鼘⒃诎l(fā)出begin而沒(méi)有阻塞任何應(yīng)用程序時(shí)轉(zhuǎn)儲(chǔ)一致的數(shù)據(jù)庫(kù)狀態(tài)。
當(dāng)使用該選項(xiàng)時(shí)拄衰,應(yīng)記住只有innodb表能以一致的狀態(tài)被轉(zhuǎn)儲(chǔ)它褪。例如,使用該選項(xiàng)時(shí)任何轉(zhuǎn)儲(chǔ)的myisam或heap表仍然可以更改狀態(tài)翘悉。
--single-transaction選項(xiàng)和--lock-tables選項(xiàng)是互斥的茫打,因?yàn)閘ock tables會(huì)使任何掛起的事務(wù)隱含提交。
要想轉(zhuǎn)儲(chǔ)大的表妖混,應(yīng)結(jié)合--quick使用該選項(xiàng)老赤。
--socket=path,-s path
當(dāng)連接localhost(為默認(rèn)主機(jī))時(shí)使用的套接字文件源葫。
--skip--comments
參見(jiàn)---comments選項(xiàng)的描述。
--tab=path砖瞧,-t path
產(chǎn)生tab分割的數(shù)據(jù)文件息堂。對(duì)于每個(gè)轉(zhuǎn)儲(chǔ)的表,mysqldump創(chuàng)建一個(gè)包含創(chuàng)建表的create table語(yǔ)句的tbl_name.sql文件块促,和一個(gè)包含其數(shù)據(jù)的tbl_name.txt文件荣堰。選項(xiàng)值為寫入文件的目錄。
默認(rèn)情況竭翠,.txt數(shù)據(jù)文件的格式是在列值和每行后面的新行之間使用tab字符振坚。可以使用--fields-xxx和--行--xxx選項(xiàng)明顯指定格式斋扰。
注釋:該選項(xiàng)只適用于mysqldump與mysqld服務(wù)器在同一臺(tái)機(jī)器上運(yùn)行時(shí)渡八。你必須具有file權(quán)限,并且服務(wù)器必須有在你指定的目錄中有寫文件的許可传货。
--tables
覆蓋---database或-b選項(xiàng)屎鳍。選項(xiàng)后面的所有參量被看作表名。
--triggers
為每個(gè)轉(zhuǎn)儲(chǔ)的表轉(zhuǎn)儲(chǔ)觸發(fā)器问裕。該選項(xiàng)默認(rèn)啟用逮壁;用--skip-triggers禁用它。
--tz-utc
在轉(zhuǎn)儲(chǔ)文件中加入set time_zone='+00:00'以便timestamp列可以在具有不同時(shí)區(qū)的服務(wù)器之間轉(zhuǎn)儲(chǔ)和重載粮宛。(不使用該選項(xiàng)窥淆,timestamp列在具有本地時(shí)區(qū)的源服務(wù)器和目的服務(wù)器之間轉(zhuǎn)儲(chǔ)和重載)。--tz-utc也可以保護(hù)由于夏令時(shí)帶來(lái)的更改巍杈。--tz-utc默認(rèn)啟用忧饭。要想禁用它,使用--skip-tz-utc筷畦。該選項(xiàng)在mysql 5.1.2中加入眷昆。
--user=user_name,-u user_name
連接服務(wù)器時(shí)使用的mysql用戶名。
--verbose亚斋,-v
冗長(zhǎng)模式作媚。打印出程序操作的詳細(xì)信息。
--version帅刊,-v
顯示版本信息并退出纸泡。
--where='where-condition', -w 'where-condition'
只轉(zhuǎn)儲(chǔ)給定的where條件選擇的記錄。請(qǐng)注意如果條件包含命令解釋符專用空格或字符赖瞒,一定要將條件引用起來(lái)女揭。
例如:
"--where=user='jimf'"
"-wuserid>1"
"-wuserid<1"
--xml,-x
將轉(zhuǎn)儲(chǔ)輸出寫成xml栏饮。
還可以使用--var_name=value選項(xiàng)設(shè)置下面的變量:
max_allowed_packet
客戶端/服務(wù)器之間通信的緩存區(qū)的最大大小吧兔。最大為1gb。
net_buffer_length
客戶端/服務(wù)器之間通信的緩存區(qū)的初始大小袍嬉。當(dāng)創(chuàng)建多行插入語(yǔ)句時(shí)(如同使用選項(xiàng)--extended-insert或--opt)境蔼,mysqldump創(chuàng)建長(zhǎng)度達(dá)net_buffer_length的行。如果增加該變量伺通,還應(yīng)確保在mysql服務(wù)器中的net_buffer_length變量至少這么大箍土。
還可以使用--set-variable=var_name=value或-o var_name=value語(yǔ)法設(shè)置變量。然而罐监,現(xiàn)在不贊成使用該語(yǔ)法吴藻。
mysqldump最常用于備份一個(gè)整個(gè)的數(shù)據(jù)庫(kù):
shell> mysqldump --opt db_name > backup-file.sql
可以這樣將轉(zhuǎn)儲(chǔ)文件讀回到服務(wù)器:
shell> mysql db_name < backup-file.sql
或者為:
shell> mysql -e "source /path-to--backup/backup-file.sql" db_name
mysqldump也可用于從一個(gè)mysql服務(wù)器向另一個(gè)服務(wù)器復(fù)制數(shù)據(jù)時(shí)裝載數(shù)據(jù)庫(kù):
shell> mysqldump --opt db_name | mysql --host=remote_host -c db_name
可以用一個(gè)命令轉(zhuǎn)儲(chǔ)幾個(gè)數(shù)據(jù)庫(kù):
shell> mysqldump ---database db_name1 [db_name2 ...] > my_databases.sql
如果想要轉(zhuǎn)儲(chǔ)所有數(shù)據(jù)庫(kù),使用--all--database選項(xiàng):
shell> mysqldump --all-databases > all_databases.sql
如果表保存在innodb存儲(chǔ)引擎中弓柱,mysqldump提供了一種聯(lián)機(jī)備份的途徑(參見(jiàn)下面的命令)沟堡。
該備份只需要在開(kāi)始轉(zhuǎn)儲(chǔ)時(shí)對(duì)所有表進(jìn)行全局讀鎖定(使用flush tables with read lock)。
獲得鎖定后矢空,讀取二進(jìn)制日志的相應(yīng)內(nèi)容并將鎖釋放弦叶。因此如果并且只有當(dāng)發(fā)出flush...時(shí)正執(zhí)行一個(gè)長(zhǎng)的更新語(yǔ)句,mysql服務(wù)器才停止直到長(zhǎng)語(yǔ)句結(jié)束妇多,然后轉(zhuǎn)儲(chǔ)則釋放鎖伤哺。
因此如果mysql服務(wù)器只接收到短("短執(zhí)行時(shí)間")的更新語(yǔ)句,即使有大量的語(yǔ)句者祖,也不會(huì)注意到鎖期間立莉。
shell> mysqldump --all-databases --single-transaction > all_databases.sql
對(duì)于點(diǎn)對(duì)點(diǎn)恢復(fù)(也稱為“前滾”,當(dāng)你需要恢復(fù)舊的備份并重放該備份以后的更改時(shí))七问,循環(huán)二進(jìn)制日志或至少知道轉(zhuǎn)儲(chǔ)對(duì)應(yīng)的二進(jìn)制日志內(nèi)容很有用:
shell> mysqldump --all-databases --master-data=2 > all_databases.sql
或
shell> mysqldump --all-databases --flush-logs --master-data=2 > all_databases.sql
如果表保存在innodb存儲(chǔ)引擎中蜓耻,同時(shí)使用--master-data和--single-transaction提供了一個(gè)很方便的方式來(lái)進(jìn)行適合點(diǎn)對(duì)點(diǎn)恢復(fù)的聯(lián)機(jī)備份。