?? manual_maintenance.html
字號(hào):
<html>
<head>
<meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb2312">
<title>MySQL中文參考手冊(cè)-13 維護(hù) MySQL 安裝</title>
<style type="text/css">
<!--
.p14{font-size:14.8px;font-family:宋體;line-height:14pt;}
.p5{ border: 1px solid rgb(146,201,201) }
.a:hover{color:red;}
a.t1:visited{color:red;}
-->
</style>
</head>
<body BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#101090" VLINK="#7030B0" class="p4">
<h1><img src="Img/mysql-logo.gif" alt="mysql-logo.gif (3082 bytes)" WIDTH="127" HEIGHT="60"><font color="#FF0000">MySQL中文參考手冊(cè)</font></h1>
<p>翻譯:<a href="mailto:clyan@sohu.com">晏子</a>(yanzi)
主頁(yè):<a href="http://linuxdn.yeah.net">http://linuxdb.yeah.net</a></p>
<hr>
<p><a HREF="manual_Introduction.html">第一章</a>, <a HREF="manual_Tools.html">前一章</a>,
<a HREF="manual_Adding_functions.html">下一章</a>, <a HREF="manual_Concept_Index.html">最后一章</a>,<a HREF="manual_toc.html">目錄</a>. </p>
<hr>
<h1><a NAME="Maintenance" HREF="manual_toc.html#Maintenance">13 維護(hù)MySQL安裝</a></h1>
<h2><a NAME="Table_maintenance" HREF="manual_toc.html#Table_maintenance">13.1 使用<code>myisamchk</code>進(jìn)行表的維護(hù)和崩潰恢復(fù)</a></h2>
<p>為了檢查/修復(fù)MyISAM表(<code>.MYI</code>和<code>.MYD</code>),你應(yīng)該使用<code>myisamchk</code>實(shí)用程序。為了檢查/修復(fù)ISAM表(<code>.ISM</code>和<code>.ISD</code>),你應(yīng)該使用<code>isamchk</code>實(shí)用程序。見(jiàn)<a HREF="manual_Server.html#Table_types">9.4 MySQL 桌子類(lèi)型</a>。</p>
<p>在下文中,我們將討論<code>myisamchk</code>,但是也適用于老的<code>isamchk</code>。</p>
<p>你可以使用<code>myisamchk</code>實(shí)用程序來(lái)獲得有關(guān)你的數(shù)據(jù)庫(kù)桌表的信息、檢查和修復(fù)他們或優(yōu)化他們。下列小節(jié)描述如何調(diào)用<code>myisamchk</code>(包括它的選項(xiàng)的描述),如何建立一個(gè)表維護(hù)的時(shí)間表,并且如何使用<code>myisamchk</code>執(zhí)行其各種功能。</p>
<p>如果你用<code>--skip-locking</code>運(yùn)行<code>mysqld</code>(它在一些系統(tǒng)上是缺省的,如Linux),當(dāng)<code>mysqld</code>正在使用同一個(gè)表時(shí),你不能可靠地使用<code>myisamchk</code>檢查一張表。如果你能肯定在你運(yùn)行<code>myisamchk</code>時(shí)沒(méi)有人通過(guò)<code>mysqld</code>正在存取表,在你開(kāi)始檢查表之前,你僅需做<code>mysqladmin
flush-tables</code>。如果你不能保證, 那么當(dāng)你檢查表時(shí),你必須停掉<code>mysqld</code>。如果你在<code>mysqld</code>正在更新表時(shí)運(yùn)行<code>myisamchk</code>,你可能得到一個(gè)表已破壞的警告,即使它沒(méi)有。</p>
<p>如果你沒(méi)使用<code>--skip-locking</code>,你能在任何時(shí)間使用<code>myisamchk</code>檢查表。當(dāng)你這樣時(shí),所有試圖更新表的客戶(hù)在繼續(xù)前將等到<code>myisamchk</code>就緒。
</p>
<p>如果你使用<code>myisamchk</code>修復(fù)或優(yōu)化表,你<strong>必須</strong>總是保證<code>mysqld</code>服務(wù)器不在使用表(如果你正在使用<code>--skip-locking</code>,這也適用)。如果你不停掉<code>mysqld</code>,在你運(yùn)行<code>myisamchk</code>前,你至少應(yīng)該做一個(gè)<code>mysqladmin
flush-tables</code>。</p>
<p>在大多數(shù)情況下,你也可使用命令<code>OPTIMIZE TABLES</code>優(yōu)化并修復(fù)表,但是這不如<code>myisamchk</code>快或可靠(在真正的致命錯(cuò)誤的情況下)。在另一方面,<code>OPTIMIZE
TABLE</code>較易使用并且你不必須關(guān)心清空表。見(jiàn)<a HREF="manual_Reference.html#OPTIMIZE_TABLE">7.9<code>OPTIMIZE TABLE</code>句法</a>。</p>
<h3><a NAME="myisamchk_syntax" HREF="manual_toc.html#myisamchk_syntax">13.1.1<code>
myisamchk</code>調(diào)用語(yǔ)法</a></h3>
<p><code>myisamchk</code>這樣調(diào)用:</p>
<pre>shell> myisamchk [options] tbl_name
</pre>
<p><code>options</code>指定你想要<code>myisamchk</code>做什么。他們?cè)谙旅婷枋觥#阋部梢酝ㄟ^(guò)調(diào)用<code>myisamchk
--help</code>得到一張選項(xiàng)表。) 沒(méi)有選項(xiàng),<code>myisamchk</code>簡(jiǎn)單地檢查你的表。為了得到更多的信息或告訴<code>myisamchk</code>執(zhí)行校正操作,指定在下面和下小節(jié)描述的選項(xiàng)擇。</p>
<p><code>tbl_name</code>是你想要檢查的數(shù)據(jù)庫(kù)表。如果你不在數(shù)據(jù)庫(kù)目錄的某處運(yùn)行<code>myisamchk</code>,你必須指定到文件的路徑,因?yàn)?lt;code>myisamchk</code>不知道你的數(shù)據(jù)庫(kù)位于哪兒。實(shí)際上,<code>myisamchk</code>別在乎你正在操作的文件是否位于一個(gè)數(shù)據(jù)庫(kù)目錄;你可以拷貝對(duì)應(yīng)于一張數(shù)據(jù)庫(kù)表的文件到別處并且在那里執(zhí)行恢復(fù)操作。
</p>
<p>如果你愿意,你可以<code>myisamchk</code>命令行命名幾個(gè)表。你也能指定一個(gè)名字作為一個(gè)索引文件(用<tt>“
.MYI”</tt>后綴),它允許你通過(guò)使用模式<tt>“*.MYI”指定</tt>在一個(gè)目錄所有的表。例如,如果你在一個(gè)數(shù)據(jù)庫(kù)目錄,你可以這樣在目錄下檢查所有的表:</p>
<pre>shell> myisamchk *.MYI
</pre>
<p>如果你不在數(shù)據(jù)庫(kù)目錄下,你可通過(guò)指定到目錄的路徑檢查所有在那里的表:
</p>
<pre>shell> myisamchk /path/to/database_dir/*.MYI
</pre>
<p>你甚至可以通過(guò)為<strong>MySQL</strong>數(shù)據(jù)目錄的路徑指定一個(gè)通配符來(lái)檢查所有的數(shù)據(jù)庫(kù)中的所有表:</p>
<pre>shell> myisamchk /path/to/datadir/*/*.MYI
</pre>
<p><code>myisamchk</code>支持下列選項(xiàng):
<dl COMPACT="myisamchk_syntax">
<dt><code>-a, --analyze</code> </dt>
<dd>分析鍵值的分布。這通過(guò)讓聯(lián)結(jié)優(yōu)化器更好地選擇表應(yīng)該以什么次序聯(lián)結(jié)和應(yīng)該使用哪個(gè)鍵來(lái)改進(jìn)聯(lián)結(jié)性能。
</dd>
<dt><code>-#, --debug=debug_options</code> </dt>
<dd>輸出調(diào)試記錄文件。<code>debug_options</code>字符串經(jīng)常是<code>'d:t:o,filename'</code>。</dd>
<dt><code>-d, --description</code> </dt>
<dd>打印出關(guān)于表的一些信息。 </dd>
<dt><code>-e, --extend-check</code> </dt>
<dd>非常徹底地檢查表。這僅在極端情況下是必要的。通常,<code>myisamchk</code>應(yīng)該找出所有錯(cuò)誤,即使沒(méi)有改選項(xiàng)。</dd>
<dt><code>-f, --force</code> </dt>
<dd>覆蓋老的臨時(shí)文件。如果你在檢查表時(shí)使用<code>-f</code> (運(yùn)行<code>myisamchk</code>沒(méi)有<code>-r</code>),<code>myisamchk</code>在檢查期間將自動(dòng)為出現(xiàn)一個(gè)錯(cuò)誤的表用<code>-r</code>重啟。</dd>
<dt><code>--help</code> </dt>
<dd>顯示一條幫助消息并且退出。 </dd>
<dt><code>-i, --information</code> </dt>
<dd>打印有關(guān)被檢查的表的信息統(tǒng)計(jì)。</dd>
<dt><code>-k #, --keys-used=#</code> </dt>
<dd>與<code>-r</code>一起使用。告訴ISAM表處理器僅更新頭<code>#</code>個(gè)索引。較高編號(hào)的索引被撤銷(xiāo)。這能用來(lái)使插入變得更快!撤銷(xiāo)的索引能通過(guò)使用<code>myisamchk
-r</code>被重新激活。</dd>
<dt><code>-l, --no-symlinks</code> </dt>
<dd>在修復(fù)時(shí),不跟隨符號(hào)連接。通常<code>myisamchk</code>修復(fù)一個(gè)符號(hào)連接所指的表。</dd>
<dt><code>-q, --quick</code> </dt>
<dd>與<code>-r</code>一起使用使得一個(gè)修復(fù)更快。通常,原來(lái)的數(shù)據(jù)文件沒(méi)被接觸;你能指定第二個(gè)<code>-q</code>強(qiáng)制使用原來(lái)的數(shù)據(jù)文件。
</dd>
<dt><code>-r, --recover</code> </dt>
<dd>恢復(fù)模式。可以修復(fù)幾乎所有一切,除非唯一的鍵不是唯一。</dd>
<dt><code>-o, --safe-recover</code> </dt>
<dd>恢復(fù)模式。使用一個(gè)老的恢復(fù)方法;這比<code>-r</code>慢些,但是能處理一<code>-r</code>不能處理的情況。</dd>
<dt><code>-O var=option, --set-variable var=option</code> </dt>
<dd>設(shè)置一個(gè)變量的值。可能的變量列在下面。 </dd>
<dt><code>-s, --silent</code> </dt>
<dd>沉默模式。當(dāng)錯(cuò)誤發(fā)生時(shí),僅寫(xiě)輸出。你能使用<code>-s</code>兩次(<code>-ss</code>)非常沉默地做<code>myisamchk</code>。</dd>
<dt><code>-S, --sort-index</code> </dt>
<dd>以從高到低的順序排序索引樹(shù)塊。這將優(yōu)化搜尋并且將使按鍵值的表掃描更快。</dd>
<dt><code>-R index_num, --sort-records=index_num</code> </dt>
<dd>根據(jù)一個(gè)索引排序記錄。這使你的數(shù)據(jù)更局部化并且可以加快在該鍵上的<code>SELECT</code>和<code>ORDER
BY</code>的范圍搜索。(第一次做排序可能很慢!)
為了找出一張表的索引編號(hào),使用<code>SHOW INDEX</code>,它以<code>myisamchk</code>看見(jiàn)他們的相同順序顯示一張表的索引。索引從1開(kāi)始編號(hào)。</dd>
<dt><code>-u, --unpack</code> </dt>
<dd>解開(kāi)一個(gè)用<code>myisampack</code>壓縮的表。</dd>
<dt><code>-v, --verbose</code> </dt>
<dd>冗長(zhǎng)模式。打印更多的信息。這能與<code>-d</code>和<code>-e</code>一起使用。為了更冗長(zhǎng),使用<code>-v</code>多次(<code>-vv</code>,
<code>-vvv</code>)!</dd>
<dt><code>-V, --version</code> </dt>
<dd>打印<code>myisamchk</code>版本并退出。</dd>
<dt><code>-w, --wait</code> </dt>
<dd>如果表被鎖定,等待。</dd>
</dl>
<p>對(duì)<code>--set-variable</code>(<code>-O</code>)選項(xiàng),可能的變量是:</p>
<pre>key_buffer_size 當(dāng)前值: 16776192
read_buffer_size 當(dāng)前值: 262136
write_buffer_size 當(dāng)前值: 262136
sort_buffer_size 當(dāng)前值: 2097144
sort_key_blocks 當(dāng)前值: 16
decode_bits 當(dāng)前值: 9
</pre>
<h3><a NAME="myisamchk_memory" HREF="manual_toc.html#myisamchk_memory">13.1.2<code>
myisamchk</code>內(nèi)存使用</a></h3>
<p>當(dāng)你運(yùn)行<code>myisamchk</code>時(shí),內(nèi)存分配很重要。<code>myisamchk</code>使用不超過(guò)你用<code>-O</code>選項(xiàng)指定的內(nèi)存量。如果你想在很大的文件上使用<code>myisamchk</code>,你首先應(yīng)該確定你想要它使用多少內(nèi)存。缺省僅使用大約
3M 來(lái)修復(fù)。通過(guò)使用更大的值,你能使<code>myisamchk</code>更快地操作。例如,如果你有多于32M內(nèi)存,你能使用例如這些選項(xiàng)(除了任何你可能指定的選項(xiàng)):</p>
<pre>shell> myisamchk -O sort=16M -O key=16M -O read=1M -O write=1M ...
</pre>
<p>使用<code>-O sort=16M</code>應(yīng)該可能對(duì)大多數(shù)情形就足夠了。</p>
<p>必須明白,<code>myisamchk</code>使用在<code>TMPDIR</code>里面的臨時(shí)文件。如果<code>TMPDIR</code>指向一個(gè)內(nèi)存文件系統(tǒng),你可能很容易得到內(nèi)存溢出的錯(cuò)誤。如果它發(fā)生,設(shè)定<code>TMPDIR</code>指向有更多空間的某個(gè)目錄并且重啟<code>myisamchk</code>。</p>
<h2><a NAME="Maintenance_regimen" HREF="manual_toc.html#Maintenance_regimen">13.2
建立一個(gè)數(shù)據(jù)庫(kù)表維護(hù)規(guī)范</a></h2>
<p>在一個(gè)定期基礎(chǔ)而非等到問(wèn)題出現(xiàn)才實(shí)施數(shù)據(jù)庫(kù)表的檢查是一個(gè)好主意。為維護(hù)目的,你能使用<code>myisamchk
-s</code>檢查桌子。<code>-s</code>選項(xiàng)使<code>myisamchk</code>以沉默模式運(yùn)行,當(dāng)錯(cuò)誤出現(xiàn)時(shí),僅僅打印消息。</p>
<p><a NAME="IDX672"></a>在服務(wù)器啟動(dòng)時(shí)檢查表是一個(gè)好主意。例如,無(wú)論何時(shí)機(jī)器在更新當(dāng)中重新啟動(dòng)了,你通常需要檢查所有可能被影響了的表。(這是一個(gè)“期望破壞了的表”)
如果重啟后有一個(gè)舊的<tt>“.pid”</tt>(進(jìn)程ID),你能為<code>safe_mysqld</code>加入一個(gè)測(cè)試,運(yùn)行<code>myisamchk</code>檢查所有在過(guò)去24小時(shí)修改過(guò)的表)。(<tt>“.pid”</tt>文件在<code>mysqld</code>啟動(dòng)時(shí)由它創(chuàng)建,并它正常終止時(shí)刪除。在系統(tǒng)啟動(dòng)時(shí)存在一個(gè)<tt>“.pid”</tt>文件表明<code>mysqld</code>異常地終止了。)</p>
<p>一個(gè)更好的測(cè)試將是檢查任何表,它的最后修改時(shí)間是比<tt>“.pid”</tt>文件更新。</p>
<p>你也應(yīng)該定期在正常系統(tǒng)操作期間檢查表。在TcX,我們運(yùn)行一個(gè)<code>cron</code>任務(wù),每周一次檢查我們所有重要的表,在一個(gè)<tt>“crontab”</tt>文件中使用這樣的行:</p>
<pre>35 0 * * 0 /path/to/myisamchk -s /path/to/datadir/*/*.MYI
</pre>
<p>這打印出損壞的表的信息,因此我們能檢驗(yàn)并且在需要時(shí)修復(fù)他們。</p>
<p>當(dāng)我們現(xiàn)在幾年(這確實(shí)是真的)都沒(méi)有任何意外損壞的表時(shí)(由于除硬件故障外的其他原因造成損壞的表),每周一次對(duì)我們是足夠了。</p>
<p>我們建議現(xiàn)在開(kāi)始,你對(duì)所有最后24小時(shí)內(nèi)被更新了表每晚都執(zhí)行<code>myisamchk
-s</code>,直到你變得象我們那樣信任<strong>MySQL</strong>。</p>
<h2><a NAME="Table-info" HREF="manual_toc.html#Table-info">13.3
獲得關(guān)于一個(gè)表的信息</a></h2>
<p>為了獲得關(guān)于一個(gè)表的描述或統(tǒng)計(jì),使用顯示在下面的命令。我們以后更詳細(xì)地解釋某些信息。
<dl COMPACT="Table-info">
<dt><code>myisamchk -d tbl_name</code> </dt>
<dd>以“描述模式”運(yùn)行<code>myisamchk</code>,生成你的表的描述。如果你用<code>--skip-locking</code>選項(xiàng)啟動(dòng)<strong>MySQL</strong>服務(wù)器,<code>myisamchk</code>可以當(dāng)它運(yùn)行時(shí)報(bào)告被一個(gè)更新的表的錯(cuò)誤。然而,既然在描述模式中<code>myisamchk</code>不改變表,沒(méi)有破壞數(shù)據(jù)的任何風(fēng)險(xiǎn)。
</dd>
<dt><code>myisamchk -d -v tbl_name</code> </dt>
<dd>為了生成更多關(guān)于<code>myisamchk</code>正在做什么的信息,加上<code>-v</code>告訴它以冗長(zhǎng)模式運(yùn)行。
</dd>
<dt><code>myisamchk -eis tbl_name</code> </dt>
<dd>僅顯示一個(gè)表最重要的信息。因?yàn)楸仨氉x取整個(gè)表,它很慢。 </dd>
<dt><code>myisamchk -eiv tbl_name</code> </dt>
<dd>這類(lèi)似<code>-eis</code>,只是告訴你正在做什么。 </dd>
</dl>
<p><code>myisamchk -d</code>輸出的例子: </p>
<pre>MyISAM file: company.MYI
Record format: Fixed length
Data records: 1403698 Deleted blocks: 0
Recordlength: 226
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -