当前位置: 首页 > 图文教程 > 数据库 > MYSQL > 预防性维护MySQL数据库服务器详解

MYSQL
mysql 常用数据库语句 小练习
MYSQL ERROR 1045 (28000): Access denied for user (using password: YES)问题的解决
mysql 字符集的系统变量说明
MySQL 在触发器里中断记录的插入或更新?
将MySQL数据库移植为PostgreSQL
mysql 操作总结 INSERT和REPLACE
linux mysql忘记密码的多种解决或Access denied for user ''root''@''localhost''
运用mysqldump 工具时需要注意的问题
mysql 优化日记
MySQL 字符串函数大全
mysql 截取指定的两个字符串之间的内容
MySQL 备份还原数据库批处理
mysql 数据库中my.ini的优化 2G内存针对站多 抗压型的设置
Mysql 数字类型转换函数
mysql 动态生成测试数据
mysql 显示SQL语句执行时间的代码
mysql 设置查询缓存
MYSQL explain 执行计划
MySQL 有输入输出参数的存储过程实例
巧用mysql提示符prompt清晰管理数据库的方法

MYSQL 中的 预防性维护MySQL数据库服务器详解


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-17   浏览: 70 ::
收藏到网摘: n/a

建立一个预防性维护的时间表,以协助自动检测问题,使得您可以采取措施进行修正:

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。

如果正在使用System 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.