昨天想着备份数据库,但是没有成功,错误原因是#Got errno 28 on write

查到是因为磁盘空间不足或者mysql设置中max_allowed_packet变量设置过小

在mysql命令行中使用#set global max_allowed_packet = 2*1024*1024*10。将其设置为20M

并且重新启动mysql命令行,再次备份,发现还是同样的错误,怀疑是磁盘空间满,经查看,

[root@AY121231034820cd91077 bin]# df -h
Filesystem    Size   Used   Avail    Use%   Mounted on
/dev/xvda1    20G    20G   412M     98%    /
tmpfs       498M    0      498M       0%    /dev/shm
/dev/xvdb1   69G    17G   49G       26%    /home

发现第一块磁盘确实满了,但是不知道那些东西放到第一块磁盘,所以将www目录中的一堆不明所以的数据库进行了删除。

删除之后进行备份发现还是出现#Got errno 28 on write,不明所以。。。。。

此时登陆网站发现登陆不成功,错误原因为Table '***' is marked as crashed and should be repaired。

重启服务器,重新打开nginx、mysql、php、都不行,打开mysql的时候出现错误,提示已经把错误写进日志。

查找到mysql的错误日志位置为:/var/log/mysqld.log.打开查看后发现错误如下

150211 13:49:01 [ERROR] /usr/local/mysql/bin/mysqld: Table './erqilu_87/pw_log_userdefend' is marked as crashed and should be repaired
150211 13:51:21 [ERROR] /usr/local/mysql/bin/mysqld: Table './erqilu_87/pw_log_userdefend' is marked as crashed and should be repaired
150211 13:52:02 [ERROR] /usr/local/mysql/bin/mysqld: Table './erqilu_87/pw_log_userdefend' is marked as crashed and should be repaired

查到错误原因有很多:

1.可能是频繁更新查询dede_archives

2.数据库因为某种原因造成了损坏

经查修复方法如下
找到mysql的安装目录的bin/myisamchk(本站是:/usr/local/mysql/bin  )工具,这里是在命令行中输入:

myisamchk -c -r /目录名/表名.MYI

这里是:myisamchk -c -r /var/lib/mysql/erqilu_87/pw_log_userdefend.MYI


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

二七路网站可以进行正常访问和登陆。

其中连带着还有其他几种修复方法,甚至MYI文件丢失后都可以修复,在此不在赘述。

出现问题修复方法总结

1.先查看日志

2.根据日志进行网上搜索问题解决的办法

3.尝试修复

2015年2月11日14:47:41

备份和恢复数据库的方法经过实践后会另外写出。