建立MySQL数据库日常维护规范
时间:01-14
来源:51CTO
点击:
建立一个数据库表维护规范
在一个定期基础而非等到问题出现才实施数据库表的检查是一个好主意。应该考虑到建立一个预防性维护的时间表,以协助自动问题,是你可以采取措施进行修正:
执行常规的数据库备份并允许更新日志。
安排定期的常规表检查。通过检查表,将减少使用备份的机会。这个工作,在Windows下使用计划任务,Unix使用cron作业(一般从运行服务器所示用的该帐号的crontab文件中调用),并且很容易实现。
例如,你作为mysql用户运行服务器,则可以从mysql的crontab文件中建立定期检查。如果你不知道如何使用cron,应使用下列命令查看相关的Unix手册页:
$man cron
$man crontab
作为服务器启动前的系统引导期间检查数据库表。及其可能会因早期的崩溃而重新启动。如果这样的花,数据库表可能已被毁坏,应该对它进行彻底检查。
创建一个适用于定期维护的脚本
为了运行自动的表检查,可以编写一个脚本,将目录改变为服务器数据目录并对所有的数据库表进行myisamchk和isamchk。如果你只有MyISAM表或者只有ISAM表,则只需要其中一个程序,可以将无关的那个程序从脚本中注释掉。
该教本可以被cron调用,或者在系统启动期间被调用。
为维护目的,你能使用myisamchk -s检查桌子。-s,--silent选项使myisamchk和isamchk以沉默模式运行,只有当错误出现时,才仅仅打印消息。另外myisamchk支持--fast选项,该选项允许程序跳过自上次检查以来没有被修改过的人和表。
1. 一个简单的脚本
例如,一个较为容易理解的简单脚本,它在服务器目录中检查所有表(DATADIR应该修改成对应你系统的合适的值):
#!/bin/shcd DATADIRmyisamchk --silent --fast */*.MYIisamchk --silent */*.ISM
2. 一个较为复杂的脚本
实用此脚本的一个潜在的问题时:如果有许多表,通配符模式‘*/*.MYI’和‘*/*.ISM’可能会由于"too many arguments(参数过多)"或者命令行超过shell允许的长度而无法使用。脚本可以进一步修改为(同样,DATADIR修改为适合你系统上的值):
#!/bin/shdatadir=DATADIRfind $dtatdir –name "*. MYI" -print | xargs myisamchk --silent --fastfind $dtatdir –name "*. ISM" -print | xargs isamchk --silent
当然你也可以在脚本中指定多个数据库目录。
3. 如何执行脚本
假定你将脚本存为check_tables,应该确保它是可执行的,当然建议你首先切换到专用户mysql:
$su mysql$vi check_tables(编辑脚本,你也可以使用你喜欢的编辑器)$chmod +x check_tables
手工执行,检测你的脚本是否有错误:
$check_tables
在理想情况下应该没有输出结果。如果系统不支持外部锁定,游客蒽那个服务器将在你检查表时改变它。此时,脚本可能会把实际没有问题的表报告呈有问题的。如果系统能够支持外部锁定,则该问题就不会出现。
在unix中用cron定期检查表
以下将说明如何建立脚本,使它通过cron并在系统启动期间执行。在这小节的例子中,笔者假定把脚本安装在/usr/local/mysql/bin中,你需要修改该过程来检查每个服务器数据目录中的表。你可以使用不同的check_tables拷贝来进行,或者通过修改它来接受一个命令行参数进行,该参数指定了想要检查的数据目录。
假定对mysql用户从crontab文件中调用脚本check_tables。
1. 首先用该用户的身份注册
$su mysql
2. 生成一个临时文件,捕获已经调度的任务
$crontab –l>/tmp/entries
3. 在生成的文件最后一行添加内容
把这一行0 0 * * 0 /usr/local/mysql/bin/check_tables加到临时文件的最后一行:
$echo "0 0 * * 0 /usr/local/mysql/bin/check_tables" >>/tmp/entries
它告诉cron在每个星期日的凌晨0时运行此选项。可以按要求改变时间或安排。有关这些选项的格式,参阅crontab的手册页。
4. 重新安排调度
$crontab /tmp/entries
如果检查后有任何信息,cron作业通常生成一个邮件消息给用户。由于使用--silent选项,只有表存在错误时,才会有输出,也才会有邮件信息,因此不会产生大量无用邮件信息。(你现在应该明白,脚本采用--silent选项的原因)
对于这样定期的维护,你的服务器最好支持外部锁定,这样在检查表时,就不会发生访问冲突的情况。如果无法做到这一点,你最好在没有用户使用服务器的时候维护,例如凌晨。
在一个定期基础而非等到问题出现才实施数据库表的检查是一个好主意。应该考虑到建立一个预防性维护的时间表,以协助自动问题,是你可以采取措施进行修正:
执行常规的数据库备份并允许更新日志。
安排定期的常规表检查。通过检查表,将减少使用备份的机会。这个工作,在Windows下使用计划任务,Unix使用cron作业(一般从运行服务器所示用的该帐号的crontab文件中调用),并且很容易实现。
例如,你作为mysql用户运行服务器,则可以从mysql的crontab文件中建立定期检查。如果你不知道如何使用cron,应使用下列命令查看相关的Unix手册页:
$man cron
$man crontab
作为服务器启动前的系统引导期间检查数据库表。及其可能会因早期的崩溃而重新启动。如果这样的花,数据库表可能已被毁坏,应该对它进行彻底检查。
创建一个适用于定期维护的脚本
为了运行自动的表检查,可以编写一个脚本,将目录改变为服务器数据目录并对所有的数据库表进行myisamchk和isamchk。如果你只有MyISAM表或者只有ISAM表,则只需要其中一个程序,可以将无关的那个程序从脚本中注释掉。
该教本可以被cron调用,或者在系统启动期间被调用。
为维护目的,你能使用myisamchk -s检查桌子。-s,--silent选项使myisamchk和isamchk以沉默模式运行,只有当错误出现时,才仅仅打印消息。另外myisamchk支持--fast选项,该选项允许程序跳过自上次检查以来没有被修改过的人和表。
1. 一个简单的脚本
例如,一个较为容易理解的简单脚本,它在服务器目录中检查所有表(DATADIR应该修改成对应你系统的合适的值):
#!/bin/shcd DATADIRmyisamchk --silent --fast */*.MYIisamchk --silent */*.ISM
2. 一个较为复杂的脚本
实用此脚本的一个潜在的问题时:如果有许多表,通配符模式‘*/*.MYI’和‘*/*.ISM’可能会由于"too many arguments(参数过多)"或者命令行超过shell允许的长度而无法使用。脚本可以进一步修改为(同样,DATADIR修改为适合你系统上的值):
#!/bin/shdatadir=DATADIRfind $dtatdir –name "*. MYI" -print | xargs myisamchk --silent --fastfind $dtatdir –name "*. ISM" -print | xargs isamchk --silent
当然你也可以在脚本中指定多个数据库目录。
3. 如何执行脚本
假定你将脚本存为check_tables,应该确保它是可执行的,当然建议你首先切换到专用户mysql:
$su mysql$vi check_tables(编辑脚本,你也可以使用你喜欢的编辑器)$chmod +x check_tables
手工执行,检测你的脚本是否有错误:
$check_tables
在理想情况下应该没有输出结果。如果系统不支持外部锁定,游客蒽那个服务器将在你检查表时改变它。此时,脚本可能会把实际没有问题的表报告呈有问题的。如果系统能够支持外部锁定,则该问题就不会出现。
在unix中用cron定期检查表
以下将说明如何建立脚本,使它通过cron并在系统启动期间执行。在这小节的例子中,笔者假定把脚本安装在/usr/local/mysql/bin中,你需要修改该过程来检查每个服务器数据目录中的表。你可以使用不同的check_tables拷贝来进行,或者通过修改它来接受一个命令行参数进行,该参数指定了想要检查的数据目录。
假定对mysql用户从crontab文件中调用脚本check_tables。
1. 首先用该用户的身份注册
$su mysql
2. 生成一个临时文件,捕获已经调度的任务
$crontab –l>/tmp/entries
3. 在生成的文件最后一行添加内容
把这一行0 0 * * 0 /usr/local/mysql/bin/check_tables加到临时文件的最后一行:
$echo "0 0 * * 0 /usr/local/mysql/bin/check_tables" >>/tmp/entries
它告诉cron在每个星期日的凌晨0时运行此选项。可以按要求改变时间或安排。有关这些选项的格式,参阅crontab的手册页。
4. 重新安排调度
$crontab /tmp/entries
如果检查后有任何信息,cron作业通常生成一个邮件消息给用户。由于使用--silent选项,只有表存在错误时,才会有输出,也才会有邮件信息,因此不会产生大量无用邮件信息。(你现在应该明白,脚本采用--silent选项的原因)
对于这样定期的维护,你的服务器最好支持外部锁定,这样在检查表时,就不会发生访问冲突的情况。如果无法做到这一点,你最好在没有用户使用服务器的时候维护,例如凌晨。
- 数据库名词解释之主题数据库的基本特征(05-06)
- FPGA在4G系统中的应用(05-18)
- 嵌入式移动数据库的关键技术(03-20)
- Oracle简化Oracle 10g中用户管理(04-29)
- IBM DB2 数据复制迁移方法(05-01)
- 全面剖析Oracle数据库中的分区功能 (05-06)