mysqldump參數選項及w參數說明

原文出處:http://hi.baidu.com/yghao123/blog/item/7a6e2b1f763a4806304e15bd.html

實用程序,爲備份或爲把數據轉移到另外的SQL服務器上傾倒一個數據庫或許多數據庫。傾倒將包含 創建表或充實表的SQL語句。 

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子句相同的含義。見7.16 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

__________________________________________

用msyqldump從表A中導出部分數據,其中 -w 條件部分用到了表B的內容,請問這兩個表怎麼加在mysqldump語句中呀?

我相信,很多人用mysqldump工具,要麼就dump真個數據庫或是某幾個數據,要麼就是dump指定數據庫中的某個(些)表,很少會提出上面的這個高級需求吧。其實,反過來想想,很多時候我們都只是用這些工具和命令的最最基本的功能,很少會進一步去深入下去挖掘它們更加精髓的東西,再比如說,有多少人,去嘗試過/MYSQL_HOME/bin下的所有命令和腳本,至少我相當的懶,儘管思想動了,但是行動很少,我相信hiro一定都做到了,因爲他是一個精益求精的人。

再來說說,這個問題吧。我在本地實驗如下:
Table:a、b
Structure:
+-----------+---------+------+-----+---------+-------+
| Field     | Type | Null | Key | Default | Extra |
+-----------+---------+------+-----+---------+-------+
| id        | int(11) | YES   |     | NULL |    | 
| timestamp | date | YES   |     | NULL |    | 
+-----------+---------+------+-----+---------+-------+
Operations:
mysql>mysqldump -w "(id) in (select id from b where b.timestamp < '2009-01-01')" test a --lock-all-table -uroot -p >/tmp/a_b.sql
mysql>system less /tmp/a_b.sql
----omitted-------

-- Table structure for table `a`
--
DROP TABLE IF EXISTS `a`;
CREATE TABLE `a` (
   `id` int(11) DEFAULT NULL,
   `timestamp` date DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

-- Dumping data for table `a`
--
-- WHERE:   (id) in (select id from b where b.timestamp < '2009-01-01')

LOCK TABLES `a` WRITE;
INSERT INTO `a` VALUES (1,'2007-01-23'),(3,'2009-12-30');
UNLOCK TABLES;
-----omitted------
分析:通過這些操作,我們可以很清楚的瞭解mysqldump是如何通過-w來構造執行語句的。-w後面雙引號中的部分就是你要where的條件,而test a,告訴mysqldump我們要操作的是數據庫test中的表a。其實,mysqldump執行了這麼一條sql語句:
'SELECT   * FROM `a` WHERE (id) in (select id from b where b.timestamp < '2009-01-01');' 
此外,--lock-all-table這個選項也很必要。

mysqldump -uroot -p123456 --default-character-set=utf8 --opt --single-transaction --extended-insert=false -R test a "-wnews.Adddate > '2010-05-12 10:17:00'" | gzip > /bak/autodatabak/test_a_201005261200.gz

mysqldump -uroot -p123456 --default-character-set=utf8 --opt --single-transaction --extended-insert=false -R test b -w "(pid) in (select id from a where news.Adddate > '2010-05-12 10:17:00')" | gzip > /bak/autodatabak/test_b_201005261200.gz


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章