匯出要用到MySQL的mysqldump工具,基本用法是: shell> mysqldump [OPTIONS] database [tables] 如果你不給定任何錶,整個資料庫將被匯出。 通過執行mysqldump --help,你能得到你mysqldump的版本支援的選項表。 注意,如果你運行mysqldump沒有--quick或--opt選項,mysqldump將在匯出結果前裝載整個結果集到記憶體中,如果你正在匯出一個大的資料庫,這將可能是一個問題。 mysqldump支援下列選項: --add-locks
在每個表匯出之前增加LOCK TABLES並且之後UNLOCK TABLE。(為了使得更快地插入到MySQL)。
--add-drop-table
在每個create語句之前增加一個drop table。
--allow-keywords
允許建立是關鍵詞的列名字。這由表名首碼於每個列名做到。
-c, --complete-insert
使用完整的insert語句(用列名字)。
-C, --compress
如果客戶和伺服器均支援壓縮,壓縮兩者間所有的資訊。
--delayed
用INSERT DELAYED命令插入行。
-e, --extended-insert
使用全新多行INSERT文法。(給出更緊縮並且更快的插入語句)
-#, --debug[=option_string]
跟蹤程式的使用(為了調試)。
--help
顯示一條協助訊息並且退出。
--fields-terminated-by=...
--fields-enclosed-by=...
--fields-optionally-enclosed-by=...
--fields-escaped-by=...
--fields-terminated-by=...
這些選擇與-T選擇一起使用,並且有相應的LOAD DATA INFILE子句相同的含義。
LOAD DATA INFILE文法。
-F, --flush-logs
在開始匯出前,洗掉在MySQL伺服器中的記錄檔。
-f, --force,
即使我們在一個表匯出期間得到一個SQL錯誤,繼續。
-h, --host=..
從命名的主機上的MySQL伺服器匯出資料。預設主機是localhost。
-l, --lock-tables.
為開始匯出鎖定所有表。
-t, --no-create-info
不寫入表建立資訊(CREATE TABLE語句)
-d, --no-data
不寫入表的任何行資訊。如果你只想得到一個表的結構的匯出,這是很有用的!
--opt
同--quick --add-drop-table --add-locks --extended-insert --lock-tables。
應該給你為讀入一個MySQL伺服器的儘可能最快的匯出。
-pyour_pass, --password[=your_pass]
與伺服器串連時使用的口令。如果你不指定“=your_pass”部分,mysqldump需要來自終端的口令。
-P port_num, --port=port_num
與一台主機串連時使用的TCP/IP連接埠號碼。(這用於串連到localhost以外的主機,因為它使用 Unix通訊端。)
-q, --quick
不緩衝查詢,直接匯出至stdout;使用mysql_use_result()做它。
-S /path/to/socket, --socket=/path/to/socket
與localhost串連時(它是預設主機)使用的通訊端檔案。
-T, --tab=path-to-some-directory
對
於每個給定的表,建立一個table_name.sql檔案,它包含SQL CREATE 命令,和一個table_name.txt檔案,它包含數
據。 注意:這隻有在mysqldump運行在mysqld守護進程啟動並執行同一台機器上的時候才工作。.txt檔案的格式根據--fields-xxx和
--lines--xxx選項來定。
-u user_name, --user=user_name
與伺服器串連時,MySQL使用的使用者名稱。預設值是你的Unix登入名稱。
-O var=option, --set-variable var=option設定一個變數的值。可能的變數被列在下面。
-v, --verbose
冗長模式。列印出程式所做的更多的資訊。
-V, --version
列印版本資訊並且退出。
-w, --where='where-condition'
只匯出被選擇了的記錄;注意引號是強制的!
"--where=user='jimf'" "-wuserid>1" "-wuserid<1" 最常見的mysqldump使用可能製作整個資料庫的一個備份: mysqldump --opt database > backup-file.sql 但是它對用來自於一個資料庫的資訊充實另外一個MySQL資料庫也是有用的: mysqldump --opt database | mysql --host=remote-host -C database 由於mysqldump匯出的是完整的SQL語句,所以用mysql客戶程式很容易就能把資料匯入了: shell> mysqladmin create target_db_name
shell> mysql target_db_name < backup-file.sql
就是
shell> mysql 庫名 < 檔案名稱 ================================
幾個常用用例:1.匯出整個資料庫
mysqldump -u 使用者名稱 -p 資料庫名 > 匯出的檔案名稱
mysqldump -u wcnc -p smgp_apps_wcnc > wcnc.sql
2.匯出一個表
mysqldump -u 使用者名稱 -p 資料庫名 表名> 匯出的檔案名稱
mysqldump -u wcnc -p smgp_apps_wcnc users> wcnc_users.sql
3.匯出一個資料庫結構
mysqldump -u wcnc -p -d --add-drop-table smgp_apps_wcnc >d:\wcnc_db.sql -d 沒有資料 --add-drop-table 在每個create語句之前增加一個drop table 4.匯入資料庫
常用source 命令
進入mysql資料庫控制台,
如mysql -u root -p ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////mysqldump -umysql -ppassword -P 3308 -h 127.0.0.1 --default-character-set=utf8 -c --triggers -R --hex-blob -x --opt vtms3000 qdevices > 3000.sql
-- 簡化
mysqldump -umysql -ppassword -P 3308 -h 127.0.0.1 --default-character-set=utf8 -c --hex-blob -x --opt test > test.sql
-- 只匯出資料
mysqldump -umysql -ppassword -P 3308 -h 127.0.0.1 --default-character-set=utf8 -c -i -t --opt vtms3000 qdevices > 3000.sql
-- mysqldump -h 10.30.4.89 -umysql -ppassword --default-character-set=utf8 --opt --extended-insert=false --triggers -R -d --hex-blob -x vtms3000_new > vtms3000.sql
--triggers 同時匯出觸發器
--routines,-R 匯出預存程序以及自訂函數
--no-data,-d 不匯出任何資料,只匯出資料庫表結構。
--lock-all-tables,-x 在開始匯出之前,提交請求鎖定所有資料庫中的所有表,以保證資料的一致性。
--hex-blob 使用十六進位格式匯出二進位字串欄位。如果有位元據就必須使用本選項。影響到的欄位類型有 BINARY、VARBINARY、BLOB。
--no-create-info,-t 只匯出資料,而不添加 CREATE TABLE 語句。
-P,--port=# 連接埠(必須是大寫的連接埠)
--default-character-set=charset 指定匯出資料時採用何種字元集
--complete-insert,-c 匯出的資料採用包含欄位名的完整 INSERT 方式,也就是把所有的值都寫在一行。
這麼做能提高插入效率,但是可能會受到 max_allowed_packet 參數的影響而導致插入失敗。
因此,需要謹慎使用該參數,至少我不推薦。
經過測試,無以上問。測試qregkey100w條,qtablelog321.9w條,max_allowed_packet=25165824,net_buffer_length,備份,在還原(備份檔案221 MB)。無存在以上問題
--single-transaction 該選項在匯出資料之前提交一個 BEGIN SQL語句,BEGIN 不會阻塞任何應用程式且能保證匯出時資料庫的一致性狀態。它只適用於事務表,例如 InnoDB 和 BDB。
本選項和 --lock-tables 選項是互斥的,因為 LOCK TABLES 會使任何掛起的事務隱含提交。
要想匯出大表的話,應結合使用 --quick 選項。
-opt 這隻是一個快捷選項,等同於同時添加
--add-drop-tables
--add-locking
--create-option
--disable-keys 告訴 mysqldump 在 INSERT 語句的開頭和結尾增加 /*!40000 ALTER TABLE table DISABLE KEYS */; 和 /*!40000 ALTER TABLE table ENABLE KEYS */; 語句,這能大大提高插入語句的速度,因為它是在插入完所有資料後才重建索引的。該選項只適合 MyISAM 表。
--extended-insert 預設情況下,mysqldump 開啟 --complete-insert 模式,因此不想用它的的話,就使用本選項,設定它的值為 false 即可。
--lock-tables 不過是鎖定當前置出的資料表,而不是一下子鎖定全部庫下的表。本選項只適用於 MyISAM 表,如果是 Innodb 表可以用 --single-transaction 選項
--quick
--set-charset 選項。
本選項能讓 mysqldump 很快的匯出資料,並且匯出的資料能很快導回。該選項預設開啟,但可以用 --skip-opt 禁用。
-i, --comments Write additional information.
--ignore-table=name Do not dump the specified table. To specify more than one
table to ignore, use the directive multiple times, once
for each table. Each table must be specified with both
database and table names, e.g.,
--ignore-table=database.table.
注意,如果運行 mysqldump 沒有指定 --quick 或 --opt 選項,則會將整個結果集放在記憶體中。如果匯出大資料庫的話可能會出現問題。
--log-error=name Append warnings and errors to given file.
-T, --tab=name Create tab-separated textfile for each table to given
path. (Create .sql and .txt files.) NOTE: This only works
if mysqldump is run on the same machine as the mysqld
server.
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
mysql>use 資料庫 然後使用source命令,後面參數為指令檔(如這裡用到的.sql)
mysql>source d:\wcnc_db.sql