?? manual_tools.html
字號:
<p>實用程序,為備份或為把數據轉移到另外的SQL服務器上傾倒一個數據庫或許多數據庫。傾倒將包含
創建表或充實表的SQL語句。 </p>
<pre>shell> mysqldump [OPTIONS] database [tables]
</pre>
<p>如果你不給定任何表,整個數據庫將被傾倒。 </p>
<p>通過執行<code>mysqldump --help</code>,你能得到你<code>mysqldump</code>的版本支持的選項表。
</p>
<p>注意,如果你運行<code>mysqldump</code>沒有<code>--quick</code>或<code>--opt</code>選項,<code>mysqldump</code>將在傾倒結果前裝載整個結果集到內存中,如果你正在傾倒一個大的數據庫,這將可能是一個問題。
</p>
<p><code>mysqldump</code>支持下列選項:
<dl COMPACT="mysqldump">
<dt><code>--add-locks</code> </dt>
<dd>在每個表傾倒之前增加<code>LOCK TABLES</code>并且之后<code>UNLOCK TABLE</code>。(為了使得更快地插入到<strong>MySQL</strong>)。
</dd>
<dt><code>--add-drop-table</code> </dt>
<dd>在每個<code>create</code>語句之前增加一個<code>drop table</code>。 </dd>
<dt><code>--allow-keywords</code> </dt>
<dd>允許創建是關鍵詞的列名字。這由表名前綴于每個列名做到。 </dd>
<dt><code>-c, --complete-insert</code> </dt>
<dd>使用完整的<code>insert</code>語句(用列名字)。 </dd>
<dt><code>-C, --compress</code> </dt>
<dd>如果客戶和服務器均支持壓縮,壓縮兩者間所有的信息。 </dd>
<dt><code>--delayed</code> </dt>
<dd>用<code>INSERT DELAYED</code>命令插入行。 </dd>
<dt><code>-e, --extended-insert</code> </dt>
<dd>使用全新多行<code>INSERT</code>語法。(給出更緊縮并且更快的插入語句)</dd>
<dt><code>-#, --debug[=option_string]</code> </dt>
<dd>跟蹤程序的使用(為了調試)。 </dd>
<dt><code>--help</code> </dt>
<dd>顯示一條幫助消息并且退出。 </dd>
<dt><code>--fields-terminated-by=...</code> </dt>
<dd> </dd>
<dt><code>--fields-enclosed-by=...</code> </dt>
<dd> </dd>
<dt><code>--fields-optionally-enclosed-by=...</code> </dt>
<dd> </dd>
<dt><code>--fields-escaped-by=...</code> </dt>
<dd> </dd>
<dt><code>--fields-terminated-by=...</code> </dt>
<dd>這些選擇與<code>-T</code>選擇一起使用,并且有相應的<code>LOAD DATA
INFILE</code>子句相同的含義。見<a HREF="manual_Reference.html#LOAD_DATA">7.16<code>
LOAD DATA INFILE</code>語法</a>。 </dd>
<dt><code>-F, --flush-logs</code> </dt>
<dd>在開始傾倒前,洗掉在<strong>MySQL</strong>服務器中的日志文件。 </dd>
<dt><code>-f, --force,</code> </dt>
<dd>即使我們在一個表傾倒期間得到一個SQL錯誤,繼續。 </dd>
<dt><code>-h, --host=..</code> </dt>
<dd>從命名的主機上的<strong>MySQL</strong>服務器傾倒數據。缺省主機是<code>localhost</code>。
</dd>
<dt><code>-l, --lock-tables.</code> </dt>
<dd>為開始傾倒鎖定所有表。 </dd>
<dt><code>-t, --no-create-info</code> </dt>
<dd>不寫入表創建信息(<code>CREATE TABLE</code>語句)</dd>
<dt><code>-d, --no-data</code> </dt>
<dd>不寫入表的任何行信息。如果你只想得到一個表的結構的傾倒,這是很有用的!
</dd>
<dt><code>--opt</code> </dt>
<dd>同<code>--quick --add-drop-table --add-locks --extended-insert --lock-tables</code>。應該給你為讀入一個<strong>MySQL</strong>服務器的盡可能最快的傾倒。
</dd>
<dt><code>-pyour_pass, --password[=your_pass]</code> </dt>
<dd>與服務器連接時使用的口令。如果你不指定<samp>“=your_pass”</samp>部分,<code>mysqldump</code>需要來自終端的口令。
</dd>
<dt><code>-P port_num, --port=port_num</code> </dt>
<dd>與一臺主機連接時使用的TCP/IP端口號。(這用于連接到<code>localhost</code>以外的主機,因為它使用
Unix套接字。)</dd>
<dt><code>-q, --quick</code> </dt>
<dd>不緩沖查詢,直接傾倒至stdout;使用<code>mysql_use_result()</code>做它。
</dd>
<dt><code>-S /path/to/socket, --socket=/path/to/socket</code> </dt>
<dd>與<code>localhost</code>連接時(它是缺省主機)使用的套接字文件。 </dd>
<dt><code>-T, --tab=path-to-some-directory</code> </dt>
<dd>對于每個給定的表,創建一個<code>table_name.sql</code>文件,它包含SQL
CREATE 命令,和一個<code>table_name.txt</code>文件,它包含數據。 <strong>注意</strong>:這只有在<code>mysqldump</code>運行在<code>mysqld</code>守護進程運行的同一臺機器上的時候才工作。<code>.txt</code>文件的格式根據<code>--fields-xxx</code>和<code>--lines--xxx</code>選項來定。
</dd>
<dt><code>-u user_name, --user=user_name</code> </dt>
<dd>與服務器連接時,<strong>MySQL</strong>使用的用戶名。缺省值是你的Unix登錄名。
</dd>
<dt><code>-O var=option, --set-variable var=option</code> </dt>
<dd>設置一個變量的值。可能的變量被列在下面。 </dd>
<dt><code>-v, --verbose</code> </dt>
<dd>冗長模式。打印出程序所做的更多的信息。 </dd>
<dt><code>-V, --version</code> </dt>
<dd>打印版本信息并且退出。 </dd>
<dt><code>-w, --where='where-condition'</code> </dt>
<dd>只傾倒被選擇了的記錄;注意引號是強制的! <pre>"--where=user='jimf'" "-wuserid>1" "-wuserid<1"
</pre>
</dd>
</dl>
<p>最常見的<code>mysqldump</code>使用可能制作整個數據庫的一個備份: </p>
<pre>mysqldump --opt database > backup-file.sql
</pre>
<p>但是它對用來自于一個數據庫的信息充實另外一個<strong>MySQL</strong>數據庫也是有用的:
</p>
<pre>mysqldump --opt database | mysql --host=remote-host -C database
</pre>
<h2><a NAME="mysqlimport" HREF="manual_toc.html#mysqlimport">12.4
從文本文件導入數據</a></h2>
<p><code>mysqlimport</code>提供一個到<code>LOAD DATA INFILE</code>SQL語句的命令行接口。<code>mysqlimport</code>的大多數選項直接對應于<code>LOAD
DATA INFILE</code>的相同選項。見<a HREF="manual_Reference.html#LOAD_DATA">7.16<code>
LOAD DATA INFILE</code>語法</a>。 </p>
<p><code>mysqlimport</code>象這樣調用: </p>
<pre>shell> mysqlimport [options] filename ...
</pre>
<p>對于在命令行上命名的每個文本文件,<code>mysqlimport</code>剝去文件名的擴展名并且使用它決定哪個表導入文件的內容。例如,名為<tt>“patient.txt”</tt>、<tt>“patient.text”</tt>和<tt>“patient”</tt>將全部被導入名為<code>patient</code>的一個表中。
</p>
<p><code>mysqlimport</code>支持下列選項:
<dl COMPACT="manual_Reference.html#LOAD_DATA">
<dt><code>-C, --compress</code> </dt>
<dd>如果客戶和服務器均支持壓縮,壓縮兩者之間的所有信息。 </dd>
<dt><code>-#, --debug[=option_string]</code> </dt>
<dd>跟蹤程序的使用(為調試)。 </dd>
<dt><code>-d, --delete</code> </dt>
<dd>在導入文本文件前倒空表格。 </dd>
<dt><code>--fields-terminated-by=...</code> </dt>
<dd> </dd>
<dt><code>--fields-enclosed-by=...</code> </dt>
<dd> </dd>
<dt><code>--fields-optionally-enclosed-by=...</code> </dt>
<dd> </dd>
<dt><code>--fields-escaped-by=...</code> </dt>
<dd> </dd>
<dt><code>--fields-terminated-by=...</code> </dt>
<dd>這些選項與對應于<code>LOAD DATA INFILE</code>的子句相同的含義。見<a HREF="manual_Reference.html#LOAD_DATA">7.16<code> LOAD DATA INFILE</code>語法</a>。 </dd>
<dt><code>-f, --force</code> </dt>
<dd>忽略錯誤。例如,如果對于一個文本文件的一個表不存在,繼續處理任何余下的文件。沒有<code>--force</code>,如果表不存在,<code>mysqlimport</code>退出。
</dd>
<dt><code>--help</code> </dt>
<dd>顯示一條幫助消息并且退出。 </dd>
<dt><code>-h host_name, --host=host_name</code> </dt>
<dd>導入數據到命名的主機上的<strong>MySQL</strong>服務器。缺省主機是<code>localhost</code>。
</dd>
<dt><code>-i, --ignore</code> </dt>
<dd>見為<code>--replace</code>選項的描述。 </dd>
<dt><code>-l, --lock-tables</code> </dt>
<dd>在處理任何文本文件前為寫入所定<strong>所有的</strong>表。這保證所有的表在服務器上被同步。
</dd>
<dt><code>-L, --local</code> </dt>
<dd>從客戶讀取輸入文件。缺省地,如果你連接<code>localhost</code>(它是缺省主機),文本文件被假定在服務器上。
</dd>
<dt><code>-pyour_pass, --password[=your_pass]</code> </dt>
<dd>與服務器連接時使用的口令。如果你不指定<samp>“=your_pass”</samp>部分,<code>mysqlimport</code>要求來自終端的口令。
</dd>
<dt><code>-P port_num, --port=port_num</code> </dt>
<dd>與一臺主機連接時使用的TCP/IP端口號。(這被用于連接到除<code>localhost</code>以外的主機,因為它使用Unix套接字。)</dd>
<dt><code>-r, --replace</code> </dt>
<dd><code>--replace</code>和<code>--ignore</code>選項控制對輸入在唯一鍵值上有重復的現有記錄的輸入處理。如果你指定<code>--replace</code>,新行將代替有相同唯一鍵的存在的行。如果你指定<code>--ignore</code>,跳過輸入在唯一鍵值上有重復的現有記錄。如果你不指定任何一個選項,當找到一個重復的鍵值,出現一個錯誤,并且文本文件余下部分被忽略。
</dd>
<dt><code>-s, --silent</code> </dt>
<dd>安靜模式。只有在錯誤發生時,寫出輸出。 </dd>
<dt><code>-S /path/to/socket, --socket=/path/to/socket</code> </dt>
<dd>與<code>localhost</code>(它是缺省主機)連接時使用的套接字文件。 </dd>
<dt><code>-u user_name, --user=user_name</code> </dt>
<dd><strong>MySQL</strong>使用的用戶名字當與服務者聯接時。缺省價值是你的
Unix 登錄名字。 </dd>
<dt><code>-v, --verbose</code> </dt>
<dd>冗長模式。打印程序所做的更多信息。 </dd>
<dt><code>-V, --version</code> </dt>
<dd>打印版本信息并且退出。 </dd>
</dl>
<p>以下是使用<code>mysqlimport</code>運行的一個樣本: </p>
<pre>$ mysql --version
mysql Ver 9.33 Distrib 3.22.25, for pc-linux-gnu (i686)
$ uname -a
Linux xxx.com 2.2.5-15 #1 Mon Apr 19 22:21:09 EDT 1999 i586 unknown
$ mysql -e 'CREATE TABLE imptest(id INT, n VARCHAR(30))' test
$ ed
a
100 Max Sydow
101 Count Dracula
.
w imptest.txt
32
q
$ od -c imptest.txt
0000000 1 0 0 \t M a x S y d o w \n 1 0
0000020 1 \t C o u n t D r a c u l a \n
0000040
$ mysqlimport --local test imptest.txt
test.imptest: Records: 2 Deleted: 0 Skipped: 0 Warnings: 0
$ mysql -e 'SELECT * FROM imptest' test
+------+---------------+
| id | n |
+------+---------------+
| 100 | Max Sydow |
| 101 | Count Dracula |
+------+---------------+
<a NAME="IDX671"></a> </pre>
<h2><a NAME="myisampack" HREF="manual_toc.html#myisampack">12.5 MySQL壓縮只讀表生成器</a></h2>
<p><code>myisampack</code>被用來壓縮MyISAM表,而<code>pack_isam</code>被用來壓縮ISAM表。由于ISAM表被淘汰,這里我們將只討論<code>myisampack</code>。
</p>
<p><code>myisampack</code>是當你訂購超過10個許可證或擴展的支持時,你得到的一個額外的實用程序。因為這些僅以二進制形式被分發,他們僅在某些平臺上可用。
</p>
<p>下面我們僅談論<code>myisampack</code>, 但是每件事情對<code>pack_isam</code>也是持有的。
</p>
<p><code>myisampack</code>通過單獨壓縮表中的每個列來工作。當表被打開時,需要加壓縮的信息被讀進內存,這使得在存取單個記錄時能得到更好的性能,因為你只需要解壓縮一個記錄,不是更大的磁盤塊,象在
MSDOS上使用Stacker時一樣。通常,<code>myisampack</code>壓縮數據文件40%-70%。
</p>
<p><strong>MySQL</strong>使用內存映射(<code>mmap()</code>)在壓縮表上而如果<code>mmap()</code>的使用不工作,倒回到正常的讀/寫文件。
</p>
<p>當前<code>myisampack</code>有2個限制:
<ul>
<li>在壓縮后,表只能讀。 </li>
<li><code>myisampack</code>也能壓縮<code>BLOB</code>或<code>TEXT</code>列。較老的<code>pack_isam</code>不能做到。
</li>
</ul>
<p>修正這些限制以在我們的TODO表上,但是具有低優先級。 </p>
<p><code>myisampack</code>象這樣調用: </p>
<pre>shell> myisampack [options] filename ...
</pre>
<p>每個文件名應該是一個索引(<tt>“.MYI”</tt>)
文件名。如果你不在數據庫目錄下,你應該指定文件的路徑名。允許省略<tt>“.MYI”</tt>擴展名。
</p>
<p><code>myisampack</code>支持下列選項:
<dl COMPACT="myisampack">
<dt><code>-b, --backup</code> </dt>
<dd>制作表的一個備份,為<code>tbl_name.OLD</code>。</dd>
<dt><code>-#, --debug=debug_options</code> </dt>
<dd>輸出調試日志。<code>debug_options</code>串經常是<code>'d:t:o,filename'</code>。
</dd>
<dt><code>-f, --force</code> </dt>
<dd>即使它變得更大或如果臨時文件存在,強制表的壓縮。(<code>myisampack</code>在壓縮表時創建一個名位<tt>“tbl_name.TMD”</tt>的臨時文件。如果你殺死<code>myisampack</code>,<tt>“.TMD”</tt>文件不能被刪除。通常,如果<code>myisampack</code>發現<tt>“tbl_name.TMD”</tt>存在,它以一個錯誤退出。用<code>--force</code>,<code>myisampack</code>不管怎樣都壓縮表。
</dd>
<dt><code>-?, --help</code> </dt>
<dd>顯示一條幫助消息并且退出。 </dd>
<dt><code>-j big_tbl_name, --join=big_tbl_name</code> </dt>
<dd>聯結所有在命令行上被命名的表到一個單獨的表<code>big_tbl_name</code>中。所有要被合并的表必須是相同的(同樣的列名字和類型,同樣的索引,等等。)</dd>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -