="t18">建立
个预防性维护
时间表
以协助自动检测问题
使得您可以采取措施进行修正:
1) 执行常规
数据库备份并允许更新日志
2) 安排定期
常规表检查
通过检查表
将减少使用备份
机会
这个工作使用cron 作业(
般从运行服务器所使用
该账号
crontab 文件中
)并且很容易实现
例如
如果您作为mysqladm 用户运行服务器
则可以从mysqladm
crontab 文件中建立定期检查
如果您不知道如何使用c r o n
应使用下列命令查看相关
UNIX 人工页:
% man cron
% man crontab
3) 在服务器启动前
系统引导期间检查数据库表
机器可能会因早期
崩溃重新启动
如果是这样
话
数据库表可能已被毁坏
应该对它进行检查
为了运行自动
表检查
可以编写
个脚本
将目录改变为服务器数据目录并对所有数据库表运行myisamchk 和i s a m c h k
我们将在下面讨论
脚本中同时使用这两个
如果您只有MyISAM 表或只有ISAM 表
则只需其中
个
可以将无关
那个
从脚本中去除
myisamchk 和isamchk 都根据表检查
方式产生某些输出结果以便了解正在检查哪些表
甚至在没有问题时也是如此
对于crontab
项
除非表中有
否则通常将禁止输出结果(如果作业产生任何输出
cron 作业通常生成
个邮件消息
很少会收到没有任何问题
表检查作业
邮件)
如果用--silent 选项
任
个实用
它仅当发现问题时才产生输出
另外
myisamchk 支持--fast 选项
该选项允许
跳过自上次检查以来没有被修改过
任何表
在服务器数据目录中检查所有表
个简单
脚本如下( DATADIR 应该修改成对应您系统
值):
实用此脚本
个潜在
问题是:如果有许多表
通配符模式‘ * / * . M Y I’或‘* / * . I S M’可能会由于“ too many arg um e n t s(过多
参数)”
使外壳
爆炸
另
个可选择
脚本如下(同样
将DATADIR 改变为对应您系统
值):
不论您选择哪种形式
脚本
笔者都假定您
是c h e c k _ mysql_ tables
应确保及时改变该方式使它可执行
然后您手工
它以验证它工作是否正常:
% chmod +x check_mysql_tables
% chmod_mysql_tables
在理想情况下应该没有输出结果
如果系统不支持外部锁定
有可能服务器将在您检查表时改变它
此时
脚本可能会把实际没问题
表报告成有问题
这有点不幸
但比出现相反
问题要好:当出现某些故障时脚本报告无问题
如果系统支持外部锁定
则该问题就不会出现
以下部分将介绍说明如何建立脚本
使它通过cron 并在系统启动期间自动执行
在这些小节
例子中
笔者假定脚本安装在/usr/users/mysaladm/bin 中
您将需要调整适合自己系统
值
如果在您
系统上运行了多个服务器
将需要修改该过程来检查每个服务器数据目录中
表
您可以使用区别
check_mysql_tables 拷贝来进行
或通过修改它来接收
个命令行参数进行
该参数指定了想要检查
数据目录
用cron 定期检查表
假定要想对mysqladm 用户从crontab 文件中
脚本c h e c k _ mysql_ tables
先以该用户
身份进行注册
然后用下列命令编辑crontab 文件:
% crontab -e
该命令带您进入带有当前crontab 文件拷贝
编辑器中(如果以前没有编辑过
此文件可能是空
)
增加
行到文件中:
0 3 * * 0 /usr/users/mysqladm/bin/check_mysql_tables
它告诉cron 在每个星期日
上午3 时运行此选项
可以按要求改变时间或安排
有关这些选项
格式
请参阅crontab 人工页
在系统启动期间检查表
如果您正在使用BSD 风格
系统
并且已经将服务器
启动命令增加到/etc/rc.local 或类似
其他文件中
则可以在启动服务器前从对应
文件中
c h e c k _ mysql_ tables
如果正在使用
V 风格
启动思路方法从/etc/rc.d 目录的
中
mysql. server
则过程稍有点复杂
这些目录中
启动脚本应该理解start 和stop 参数
含义
以便对系统
启动和关闭采取相应
操作
为了执行表
检查
我们可以编写这样
脚本:当参数为start 时
c h e c k _ mysql_ tables
而当该参数为stop 时不做任何事情
让我们来
这样
个脚本mysql. c h e c k
其内容如下:
现在
您已经可以使用
个过程来安装mysql. c h e c k了
该过程类似于在第11章所介绍
安装mysql.server
过程
必须给mysql.check
个运行级目录中较低
前缀号
才能使得它在mysql.server 前运行
例如
如果在运行级目录中以S99mysql.server 链接到mysql. server
则应该以S98mysql.check 链接到mysql.check.