可能表明磁盘已损坏,mysql数据库备份

备份数据库(进入Mysql bin目录下/C:\Program Files\MySQL\MySQL Server
5.6\bin)本地安装mysql数据库

成功调用mysql_query()后,mysql_store_result()能够返回NULL。出现该情况时,表明出现了下述条件之一:

 

备份表结构及数据
mysqldump -hlocalhost -uroot -proot db_dev>d:\db_dev.sql

·         出现了malloc()故障(例如,如果结果集过大)。

错误提示:

消息 829,级别 21,状态 1,第 1 行
数据库 ID 15,页 (1:21826) 已标记为 RestorePending,可能表明磁盘已损坏。要从此状态恢复,请执行还原操作。

mysqldump -hip地址 -ur用户名 -p密码 数据库名>d:\导出文件名.sql

·         无法读取数据(在连接上出现了错误)。

引起原因:

RestorePending一般是在进行页恢复的过程中出现的,就是在进行了restore操作之后但还没有进行recovery操作之前页的状态。

出现这样的问题可以肯定这个表是损坏了,但是在查询数据的时候如果不会查询到损坏页面的数据话是不会报错的,也就是说可以有条件的使用这个表。

如果损坏的页只有一个的话,那删除掉这个坏表故障肯定就没有了,因为一个页里面只会放一个表的数据。

损坏的直接原因就是放在磁盘上面的数据被意外的修改了或者写入的时候出错这些,可能是磁盘问题,但是IO系统可能性更大。

可以好好的检查系统日志和SQLServer的LOG,看看里面有没有关于磁盘或者IO之类的警告、报错信息,以进一步确定原因。

至于处理方法,如果表重要那就利用备份做页面还原恢复数据,不重要的话就删掉重建,

或者使用以下方式进行修复,在处理完坏页之后再对整个数据库做一次DBCC
CHECKDB操作,确保没有其他的坏页。

备份表结构
mysqldump -hlocalhost -uroot -proot -d db_dev>d:\db_dev.sql

·         查询未返回数据(例如,它是INSERT、UPDATE或DELETE)。

解决办法:

快速修复
DBCC CHECKDB ('数据库名', REPAIR_FAST) 

重建索引并修复
DBCC CHECKDB ('数据库名', REPAIR_REBUILD)

如果必要允许丢失数据修复
DBCC CHECKDB ('数据库名'', REPAIR_ALLOW_DATA_LOSS)

备份数据
mysqldump -hlocalhost -uroot -proot -t db_dev>d:\db_dev.sql

通过调用mysql_field_count(),始终能检查语句是否应生成非空结果。如果mysql_field_count()返回0,结果为空,而且上一个查询是未返回值的语句(例如INSERT或DELETE)。如果mysql_field_count()返回非0值,语句应生成非空结果。关于这方面的示例,请参见mysql_field_count()函数介绍:

 


数据库数据恢复
mysqldump -hlocalhost -uroot -proot db_dev<d:\db_dev.sql

返回作用在连接上的最近查询的列数。该函数的正常使用是在mysql_store_result()返回NULL(因而没有结果集指针)时。在这种情况下,可调用mysql_field_count()来判定mysql_store_result()是否应生成非空结果。这样,客户端就能采取恰当的动作,而无需知道查询是否是SELECT(或类似SELECT的)语句。在这里给出的示例中,演示了完成它的方法。返回表示结果集中列数的无符号整数。

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

标签:
网站地图xml地图