⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 manual_maintenance.html

📁 这是一部完整的MYSQL中文参考手册,里面详尽的介绍了MYSQL的使用方法.
💻 HTML
📖 第 1 页 / 共 3 页
字号:
<html>

<head>
<meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb2312">
<title>MySQL中文参考手册-13 维护 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中文参考手册</font></h1>

<p>翻译:<a href="mailto:clyan@sohu.com">晏子</a>(yanzi) 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 主页:<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 维护MySQL安装</a></h1>

<h2><a NAME="Table_maintenance" HREF="manual_toc.html#Table_maintenance">13.1 使用<code>myisamchk</code>进行表的维护和崩溃恢复</a></h2>

<p>为了检查/修复MyISAM表(<code>.MYI</code>和<code>.MYD</code>),你应该使用<code>myisamchk</code>实用程序。为了检查/修复ISAM表(<code>.ISM</code>和<code>.ISD</code>),你应该使用<code>isamchk</code>实用程序。见<a HREF="manual_Server.html#Table_types">9.4 MySQL 桌子类型</a>。</p>

<p>在下文中,我们将讨论<code>myisamchk</code>,但是也适用于老的<code>isamchk</code>。</p>

<p>你可以使用<code>myisamchk</code>实用程序来获得有关你的数据库桌表的信息、检查和修复他们或优化他们。下列小节描述如何调用<code>myisamchk</code>(包括它的选项的描述),如何建立一个表维护的时间表,并且如何使用<code>myisamchk</code>执行其各种功能。</p>

<p>如果你用<code>--skip-locking</code>运行<code>mysqld</code>(它在一些系统上是缺省的,如Linux),当<code>mysqld</code>正在使用同一个表时,你不能可靠地使用<code>myisamchk</code>检查一张表。如果你能肯定在你运行<code>myisamchk</code>时没有人通过<code>mysqld</code>正在存取表,在你开始检查表之前,你仅需做<code>mysqladmin 
flush-tables</code>。如果你不能保证, 那么当你检查表时,你必须停掉<code>mysqld</code>。如果你在<code>mysqld</code>正在更新表时运行<code>myisamchk</code>,你可能得到一个表已破坏的警告,即使它没有。</p>

<p>如果你没使用<code>--skip-locking</code>,你能在任何时间使用<code>myisamchk</code>检查表。当你这样时,所有试图更新表的客户在继续前将等到<code>myisamchk</code>就绪。 
</p>

<p>如果你使用<code>myisamchk</code>修复或优化表,你<strong>必须</strong>总是保证<code>mysqld</code>服务器不在使用表(如果你正在使用<code>--skip-locking</code>,这也适用)。如果你不停掉<code>mysqld</code>,在你运行<code>myisamchk</code>前,你至少应该做一个<code>mysqladmin 
flush-tables</code>。</p>

<p>在大多数情况下,你也可使用命令<code>OPTIMIZE TABLES</code>优化并修复表,但是这不如<code>myisamchk</code>快或可靠(在真正的致命错误的情况下)。在另一方面,<code>OPTIMIZE 
TABLE</code>较易使用并且你不必须关心清空表。见<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>调用语法</a></h3>

<p><code>myisamchk</code>这样调用:</p>

<pre>shell&gt; myisamchk [options] tbl_name
</pre>

<p><code>options</code>指定你想要<code>myisamchk</code>做什么。他们在下面描述。(你也可以通过调用<code>myisamchk 
--help</code>得到一张选项表。) 没有选项,<code>myisamchk</code>简单地检查你的表。为了得到更多的信息或告诉<code>myisamchk</code>执行校正操作,指定在下面和下小节描述的选项择。</p>

<p><code>tbl_name</code>是你想要检查的数据库表。如果你不在数据库目录的某处运行<code>myisamchk</code>,你必须指定到文件的路径,因为<code>myisamchk</code>不知道你的数据库位于哪儿。实际上,<code>myisamchk</code>别在乎你正在操作的文件是否位于一个数据库目录;你可以拷贝对应于一张数据库表的文件到别处并且在那里执行恢复操作。 
</p>

<p>如果你愿意,你可以<code>myisamchk</code>命令行命名几个表。你也能指定一个名字作为一个索引文件(用<tt>“ 
.MYI”</tt>后缀),它允许你通过使用模式<tt>“*.MYI”指定</tt>在一个目录所有的表。例如,如果你在一个数据库目录,你可以这样在目录下检查所有的表:</p>

<pre>shell&gt; myisamchk *.MYI 
</pre>

<p>如果你不在数据库目录下,你可通过指定到目录的路径检查所有在那里的表: 
</p>

<pre>shell&gt; myisamchk /path/to/database_dir/*.MYI 
</pre>

<p>你甚至可以通过为<strong>MySQL</strong>数据目录的路径指定一个通配符来检查所有的数据库中的所有表:</p>

<pre>shell&gt; myisamchk /path/to/datadir/*/*.MYI
</pre>

<p><code>myisamchk</code>支持下列选项: 

<dl COMPACT="myisamchk_syntax">
  <dt><code>-a, --analyze</code> </dt>
  <dd>分析键值的分布。这通过让联结优化器更好地选择表应该以什么次序联结和应该使用哪个键来改进联结性能。 
  </dd>
  <dt><code>-#, --debug=debug_options</code> </dt>
  <dd>输出调试记录文件。<code>debug_options</code>字符串经常是<code>'d:t:o,filename'</code>。</dd>
  <dt><code>-d, --description</code> </dt>
  <dd>打印出关于表的一些信息。 </dd>
  <dt><code>-e, --extend-check</code> </dt>
  <dd>非常彻底地检查表。这仅在极端情况下是必要的。通常,<code>myisamchk</code>应该找出所有错误,即使没有改选项。</dd>
  <dt><code>-f, --force</code> </dt>
  <dd>覆盖老的临时文件。如果你在检查表时使用<code>-f</code> (运行<code>myisamchk</code>没有<code>-r</code>),<code>myisamchk</code>在检查期间将自动为出现一个错误的表用<code>-r</code>重启。</dd>
  <dt><code>--help</code> </dt>
  <dd>显示一条帮助消息并且退出。 </dd>
  <dt><code>-i, --information</code> </dt>
  <dd>打印有关被检查的表的信息统计。</dd>
  <dt><code>-k #, --keys-used=#</code> </dt>
  <dd>与<code>-r</code>一起使用。告诉ISAM表处理器仅更新头<code>#</code>个索引。较高编号的索引被撤销。这能用来使插入变得更快!撤销的索引能通过使用<code>myisamchk 
    -r</code>被重新激活。</dd>
  <dt><code>-l, --no-symlinks</code> </dt>
  <dd>在修复时,不跟随符号连接。通常<code>myisamchk</code>修复一个符号连接所指的表。</dd>
  <dt><code>-q, --quick</code> </dt>
  <dd>与<code>-r</code>一起使用使得一个修复更快。通常,原来的数据文件没被接触;你能指定第二个<code>-q</code>强制使用原来的数据文件。 
  </dd>
  <dt><code>-r, --recover</code> </dt>
  <dd>恢复模式。可以修复几乎所有一切,除非唯一的键不是唯一。</dd>
  <dt><code>-o, --safe-recover</code> </dt>
  <dd>恢复模式。使用一个老的恢复方法;这比<code>-r</code>慢些,但是能处理一<code>-r</code>不能处理的情况。</dd>
  <dt><code>-O var=option, --set-variable var=option</code> </dt>
  <dd>设置一个变量的值。可能的变量列在下面。 </dd>
  <dt><code>-s, --silent</code> </dt>
  <dd>沉默模式。当错误发生时,仅写输出。你能使用<code>-s</code>两次(<code>-ss</code>)非常沉默地做<code>myisamchk</code>。</dd>
  <dt><code>-S, --sort-index</code> </dt>
  <dd>以从高到低的顺序排序索引树块。这将优化搜寻并且将使按键值的表扫描更快。</dd>
  <dt><code>-R index_num, --sort-records=index_num</code> </dt>
  <dd>根据一个索引排序记录。这使你的数据更局部化并且可以加快在该键上的<code>SELECT</code>和<code>ORDER 
    BY</code>的范围搜索。(第一次做排序可能很慢!) 
    为了找出一张表的索引编号,使用<code>SHOW INDEX</code>,它以<code>myisamchk</code>看见他们的相同顺序显示一张表的索引。索引从1开始编号。</dd>
  <dt><code>-u, --unpack</code> </dt>
  <dd>解开一个用<code>myisampack</code>压缩的表。</dd>
  <dt><code>-v, --verbose</code> </dt>
  <dd>冗长模式。打印更多的信息。这能与<code>-d</code>和<code>-e</code>一起使用。为了更冗长,使用<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>对<code>--set-variable</code>(<code>-O</code>)选项,可能的变量是:</p>

<pre>key_buffer_size       当前值: 16776192
read_buffer_size      当前值: 262136
write_buffer_size     当前值: 262136
sort_buffer_size      当前值: 2097144
sort_key_blocks       当前值: 16
decode_bits           当前值: 9
</pre>

<h3><a NAME="myisamchk_memory" HREF="manual_toc.html#myisamchk_memory">13.1.2<code> 
myisamchk</code>内存使用</a></h3>

<p>当你运行<code>myisamchk</code>时,内存分配很重要。<code>myisamchk</code>使用不超过你用<code>-O</code>选项指定的内存量。如果你想在很大的文件上使用<code>myisamchk</code>,你首先应该确定你想要它使用多少内存。缺省仅使用大约 
3M 来修复。通过使用更大的值,你能使<code>myisamchk</code>更快地操作。例如,如果你有多于32M内存,你能使用例如这些选项(除了任何你可能指定的选项):</p>

<pre>shell&gt; myisamchk -O sort=16M -O key=16M -O read=1M -O write=1M ...
</pre>

<p>使用<code>-O sort=16M</code>应该可能对大多数情形就足够了。</p>

<p>必须明白,<code>myisamchk</code>使用在<code>TMPDIR</code>里面的临时文件。如果<code>TMPDIR</code>指向一个内存文件系统,你可能很容易得到内存溢出的错误。如果它发生,设定<code>TMPDIR</code>指向有更多空间的某个目录并且重启<code>myisamchk</code>。</p>

<h2><a NAME="Maintenance_regimen" HREF="manual_toc.html#Maintenance_regimen">13.2 
建立一个数据库表维护规范</a></h2>

<p>在一个定期基础而非等到问题出现才实施数据库表的检查是一个好主意。为维护目的,你能使用<code>myisamchk 
-s</code>检查桌子。<code>-s</code>选项使<code>myisamchk</code>以沉默模式运行,当错误出现时,仅仅打印消息。</p>

<p><a NAME="IDX672"></a>在服务器启动时检查表是一个好主意。例如,无论何时机器在更新当中重新启动了,你通常需要检查所有可能被影响了的表。(这是一个“期望破坏了的表”) 
如果重启后有一个旧的<tt>“.pid”</tt>(进程ID),你能为<code>safe_mysqld</code>加入一个测试,运行<code>myisamchk</code>检查所有在过去24小时修改过的表)。(<tt>“.pid”</tt>文件在<code>mysqld</code>启动时由它创建,并它正常终止时删除。在系统启动时存在一个<tt>“.pid”</tt>文件表明<code>mysqld</code>异常地终止了。)</p>

<p>一个更好的测试将是检查任何表,它的最后修改时间是比<tt>“.pid”</tt>文件更新。</p>

<p>你也应该定期在正常系统操作期间检查表。在TcX,我们运行一个<code>cron</code>任务,每周一次检查我们所有重要的表,在一个<tt>“crontab”</tt>文件中使用这样的行:</p>

<pre>35 0 * * 0 /path/to/myisamchk -s /path/to/datadir/*/*.MYI 
</pre>

<p>这打印出损坏的表的信息,因此我们能检验并且在需要时修复他们。</p>

<p>当我们现在几年(这确实是真的)都没有任何意外损坏的表时(由于除硬件故障外的其他原因造成损坏的表),每周一次对我们是足够了。</p>

<p>我们建议现在开始,你对所有最后24小时内被更新了表每晚都执行<code>myisamchk 
-s</code>,直到你变得象我们那样信任<strong>MySQL</strong>。</p>

<h2><a NAME="Table-info" HREF="manual_toc.html#Table-info">13.3 
获得关于一个表的信息</a></h2>

<p>为了获得关于一个表的描述或统计,使用显示在下面的命令。我们以后更详细地解释某些信息。 

<dl COMPACT="Table-info">
  <dt><code>myisamchk -d tbl_name</code> </dt>
  <dd>以“描述模式”运行<code>myisamchk</code>,生成你的表的描述。如果你用<code>--skip-locking</code>选项启动<strong>MySQL</strong>服务器,<code>myisamchk</code>可以当它运行时报告被一个更新的表的错误。然而,既然在描述模式中<code>myisamchk</code>不改变表,没有破坏数据的任何风险。 
  </dd>
  <dt><code>myisamchk -d -v tbl_name</code> </dt>
  <dd>为了生成更多关于<code>myisamchk</code>正在做什么的信息,加上<code>-v</code>告诉它以冗长模式运行。 
  </dd>
  <dt><code>myisamchk -eis tbl_name</code> </dt>
  <dd>仅显示一个表最重要的信息。因为必须读取整个表,它很慢。 </dd>
  <dt><code>myisamchk -eiv tbl_name</code> </dt>
  <dd>这类似<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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -