转到正文

DalianSky's Blog

正在修建中的空中楼阁

存档

分类: SQL相关

刚才同事打电话说家园的mysql数据库报错,登录服务器一看,原来是家园数据库中的某个出现问题了,具体报错如下:

1
Table './uchgbk/uchome_space' is marked as crashed and should be repaired

提示说家园的帖子uchome_space被标记有问题,需要修复。我记得以前也出现过类似的问题,但是只要点击Phpmyadmin上的repair按纽就自动修复了,但是这次很绝,什么都没有.于是赶快上网查找原因。最终将问题解决。解决方法如下:

找到mysql的安装目录的bin/myisamchk工具,在命令行中输入:

1
myisamchk -c -r ./uchgbk/uchome_space.MYI

然后myisamchk 工具会帮助你恢复数据的索引。好象也不用重新启动mysql,问题就解决了。

问题分析:

1、
错误产生原因,有网友说是频繁查询和更新dede_archives表造成的索引错误,因为我的页面没有静态生成,而是动态页面,因此比较同意这种说法。
还有说法为是MYSQL数据库因为某种原因而受到了损坏,如:数据库服务器突发性的断电、在提在数据库表提供服务时对表的原文件进行某种操作都有可能导致
MYSQL数据库表被损坏而无法读取数据。总之就是因为某些不可测的问题造成表的损坏。

问题的编号为145

2、问题解决办法。

当你试图修复一个被破坏的表的问题时,有三种修复类型。如果你得到一个错误信息指出一个临时文件不能建立,删除信息所指出的文件并再试一次–这通常是上一次修复操作遗留下来的。
这三种修复方法如下所示:

1
2
3
% myisamchk --recover --quick /path/to/tblName
% myisamchk --recover /path/to/tblName
% myisamchk --safe-recover /path/to/tblName

第一种是最快的,用来修复最普通的问题;而最后一种是最慢的,用来修复一些其它方法所不能修复的问题。

检查和修复MySQL数据文件
如果上面的方法无法修复一个被损坏的表,在你放弃之前,你还可以试试下面这两个技巧:

果你怀疑表的索引文件(*.MYI)发生了不可修复的错误,甚至是丢失了这个文件,你可以使用数据文件(*.MYD)和数据格式文件(*.frm)重新生
成它。首先制作一个数据文件(tblName.MYD)的拷贝。重启你的MySQL服务并连接到这个服务上,使用下面的命令删除表的内容:

1
 mysql> DELETE FROM tblName;


删除表的内容的同时,会建立一个新的索引文件。退出登录并重新关闭服务,然后用你刚才保存的数据文件(tblName.MYD)覆盖新的(空)数据文件。
最后,使用myisamchk执行标准的修复(上面的第二种方法),根据表的数据的内容和表的格式文件重新生成索引数据。

如果你的表的
格式文件(tblName.frm)丢失了或者是发生了不可修复的错误,但是你清楚如何使用相应的CREATE
TABLE语句来重新生成这张表,你可以重新生成一个新的.frm文件并和你的数据文件和索引文件(如果索引文件有问题,使用上面的方法重建一个新的)一
起使用。首先制作一个数据和索引文件的拷贝,然后删除原来的文件(删除数据目录下有关这个表的所有记录)。

启动MySQL服务并使用当初的CREATE TABLE文件建立一个新的表。新的.frm文件应该可以正常工作了,但是最好你还是执行一下标准的修复(上面的第二种方法)。
3、myisamchk工具介绍(见mysql的官方手册)

可以使用myisamchk实用程序来获得有关数据库表的信息或检查、修复、优化他们。myisamchk适用MyISAM表(对应.MYI和.MYD文件的表)。

调用myisamchk的方法:

1
shell> myisamchk [options] tbl_name ...

options指定你想让myisamchk做什么。在后面描述它们。还可以通过调用myisamchk –help得到选项列表。

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

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

1
shell> myisamchk *.MYI

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

1
shell> myisamchk /path/to/database_dir/*.MYI

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

1
shell> myisamchk /path/to/datadir/*/*.MYI

推荐的快速检查所有MyISAM表的方式是:

1
shell> myisamchk --silent --fast /path/to/datadir/*/*.MYI

如果你想要检查所有MyISAM表并修复任何破坏的表,可以使用下面的命令:

1
2
3
4
shell> myisamchk --silent --force --fast --update-state \
-O key_buffer=64M -O sort_buffer=64M \
-O read_buffer=1M -O write_buffer=1M \
/path/to/datadir/*/*.MYI

该命令假定你有大于64MB的自由内存。关于用myisamchk分配内存的详细信息,参见5.9.5.5节,“myisamchk内存使用”。

当你运行myisamchk时,必须确保其它程序不使用表。否则,当你运行myisamchk时,会显示下面的错误消息:

1
warning: clients are using or haven't closed the table properly

这说明你正尝试检查正被另一个还没有关闭文件或已经终止而没有正确地关闭文件的程序(例如mysqld服务器)更新的表。

如果mysqld正在运行,你必须通过FLUSH TABLES强制清空仍然在内存中的任何表修改。当你运行myisamchk时,必须确保其它程序不使用表。避免该问题的最容易的方法是使用CHECK TABLE而不用myisamchk来检查表。

  • Google Reader
  • Google Bookmarks
  • Facebook
  • Twitter
  • Yahoo Bookmarks
  • Windows Live Spaces
  • MySpace
  • Hotmail
  • Yahoo Mail
  • WordPress
  • Yahoo Messenger
  • Windows Live Favorites
  • Share/Bookmark

摘 要:本文提出了异机备份的策略,它能在数据服务器崩溃或Microsoft SQL Server系统崩溃时有效的恢复数据,从而有力的保证了Microsoft SQL Server中数据的完整、安全。

关键词:数据库 备份 恢复

Abstract:This paper discusses the back-up strategy of dif ferent computers, which is used to restore data efficiently in case of a crash o f the data server or MS SQL Server so as to guarantee the entirety and security of data in the MS SQL Server.

Keywords:database back-up restore▲

一、引言

信息技术的发展离不开数据库技术的不断发展,从dbase、Foxbase、Foxpro、Access,到Microsoft SQL Server、Sybase SQL Server、Oracle,数据库的规模越来越大,其功能也越来越强大。Microsoft SQL Server是运行在Microsoft Windows NT上的一个高性能数据库管理系统,它基于多线程的客户/服务器体系结构,这一点与其他流行的多进程客户/服务器数据库系统不同,多线程的数据库系统与多 进程的数据库系统相比,装入Microsoft SQL Server时,仅仅启动一个进程,而每个用户有各自的线程,这种结构需要的资源比多进程系统少得多。Microsoft SQL Server的强大功能还表现在其保证数据的完整性,有了服务器维护数据的完整性,就没有再必要依赖各个部门的程序员,他们能力各异,编写的应用程序也很 难统一,然可以在应用程序内部努力保证完整性,但是没有必要完全寄希望于此,因为有了Microsoft SQL Server,就可以在整个LAN内部保证数据库信息的完整性和一致性。因此Microsoft SQL Server在许多单位得以应用,然而其数据库系统产生各种故障的可能性始终存在,更要求我们合理备份数据库中的数据。

二、故障的产生及后果

计算机系统有许多种故障类型,诸如:

.机械损坏,计算机的各种部件(包括磁盘)都存在物理的,机械的故障可能性。

.电源故障,指一般的UPS无法保护的异常电源故障。

.自然灾害,地震、水灾,火灾或其他原因造成的严重故障。

.错误使用,客户应用程序以及服务程序使用中的中途故障。

.恶意破坏,在一个系统中也不排除一些恶意破坏者。

.其他还有多种形式,但大多数是以上几种形式的变体。

假如没有数据备份,一旦产生故障(主要是系统发生故障)那就不可能恢复丢失的数据,如果是这样的话,不得不返回物理文件重新输入所有数据,试想一下,输入 以前那些信息曾花费了多少个日夜,并且在重新输入旧数据时,新数据还在不断的到来,所以没有理由不为服务器配置一个有效的备份设备,多投入一点资金与潜在 的不可恢复的商业信息以及人们的宝贵时间相比显得微不足道。

三、备份策略

定期备份数据库是最稳妥的防止磁盘故障(主要是系统发生故障)的方法,它能有效的恢复数据,这是一种比较兼价的保险形式,同时也是最简单的确保能恢复大部分信息的方法。建立一个完整的备份策略需要考虑很多因素,包括:

.备份周期。(根据数据的重要程序,可以选择每周、每日、每时进行备份)。

.使用静态备份还是动态备份,(动态备份也即允许数据库运行时进行备份)。

.仅使用全备份还是共同使用全备份和增量备份。

.使用什么介质,(磁带还是磁盘)。

.使用人工备份还是设计好的自动备份程序。

.检验备份完整性的周期。

.备份存储的空间是否防窃、防磁干扰、防火。

.是否指定其他人实行备份,他们是否享有必要的登录号和口令。

.在负责备份和恢复的主要人员缺席的情况下,是否有其他人能代替他们。

最快的然而是最昂贵的保护是准备一个备份服务器随时替代主服务器,备份服务器必须能支持Microsoft SQL Server运行,并能完整备份所有数据库,系统和用户帐户,因为事务处理日志和数据库的转储由主服务器创建,所以他们必须迅速的装载到备份服务器,如果 主服务器需要中止工作一段时间,只需投入备份服务器代替主服务器即可,备份服务器将接管事务处理日志,就好象什么也没有发生。

以上是服务器镜象备份,也称为双机热备份,另外还有硬盘镜象备份,(最好有二个相同的硬盘),因出于成本或其他原因考虑,尤其是双机热备份(单独专门使用 一个与服务器配置一样的计算机作为备份服务器)采用者较少,因此我们提出了异机备份的策略,这也是最好最经济的备份方式,特别是当服务器崩溃或 Microsoft SQL Sever系统崩溃时,因为此时除了双热备份可以启用备份服务器直接使用外,通过其他的各种备份策略(不包括异机备份策略)必须重装服务器操作系统 (Microsoft Windows NT)或重装Microsoft SQL Sever,采用异机备份策略,则不必担心,这时候只需待装好Microsoft SQL Sever时,从异机传送数据恢复即可,具体做法是:

在局域网内的任何一台工作站计算机上安装Microsoft Windows NT及Microsoft SQL Server,并在该机上建立一个与服务器中的数据库同名的数据库,利用Microsoft SQL Server系统本身提供的异机传送工具(在Microsof SQL Enterprise Manager中的Tools菜单下的Database/Object Transfer)通过设置定时(可以是每周、每月、每日或每时)由计算机自动的把服务器中数据库的数据传送到该工作站机的数据库中,这样一旦服务器(操 作系统)崩溃或Microsoft SQL Server系统崩溃时,只要重装服务器操作系统(Microsoft Windows NT)或重装Microsoft SQL Server仍然可以采用异机传送工具来通过该工作站机把数据传回至服务器的Microsoft SQL Server数据库中,以确保数据的安全恢复,上海宏士达公司就是使用这一方法才在恶劣环境下也保证数据不丢失。

此外,定期的把某些数据,某些表或全部数据备份到光盘,软盘中,放于保险的安全处,也不失为一种好方法。

四、结语

数据库的安全备份/恢复策略固然有多种,但当服务器或Microsoft SQL Server数据库系统发生崩溃时,其原先的备份数据很难恢复,因为Microsoft SQL Server数据库不象Focpro等数据库可以直接拷贝数据文件,前者必须要有备份策略,才能安全恢复,因此,在处理异常故障时我们提出了异机备份策 略,已经收到了奇效,我们相信只要采用适当有效的备份/恢复措施,大型数据库Microsoft SQL Server的数据是能够安全保护的。

  • Google Reader
  • Google Bookmarks
  • Facebook
  • Twitter
  • Yahoo Bookmarks
  • Windows Live Spaces
  • MySpace
  • Hotmail
  • Yahoo Mail
  • WordPress
  • Yahoo Messenger
  • Windows Live Favorites
  • Share/Bookmark