因为数据库的表出现问题了,通过命令:

    myisamchk -r -q *.MYI

    执行了修复,可是通过mysqldump数据的时候,老是报Couldn't execute 'show fields from...这样的问题,然后dump就结束不执行了,心理那可是真痛呀,以为是修复命令没有起作用,心想这数据可怎么样弄出来呀。

    想到的第一步是把数据文件拷贝出来,拿到待恢复的服务器上面去恢复,因为前面因为服务器挂了也做了这样的操作,只是需要在原服务器上面先建立相应的表结构即可,然后拿数据文件及表结构文件过去覆盖就可以了,可以参看我前面的文件通过Mysql数据文件进行数据库还原。我还心理得意着呢,把文件拷贝完后,在目标服务器使用原来的备份文件进行导入,也就是建立了相应的表结构,就等着把文件拷贝过去再覆盖就可以了。可是我突然想到,目标服务器的MYSQL版本是5.5,而现在的服务器的MYSQL的版本是5.1,这肯定就不能够使用文件覆盖的方式了,5.1的文件格式肯定不会被5.5支持的。

    心想这一着不起作用,我就把源服务器上面的MYSQL数据文件下载到本地总可以吧,于是就把数据文件及表结构打包好,通过WEB下载,可是发现下载速度居然只有几十K,这个几百M的文件得下载多久呀,不过慢归慢,这个还得继续下呀。

    在文件下载的同时,我就在网上搜了搜,有人也遇到类似的问题,提到的是my.cnf中的tmpdir路径设置的问题,我突然一下想起了,我刚才不是改过这个配置项吗,因为数据库所在分区的盘满了,我就想把tmpdir改到其它盘,后面才好继续备份。于是我赶紧把数据库停了,把这个配置项的值修改为原来默认的/tmp,再通过mysqldump,我靠,居然成功了。

    后来发现这是目录权限的问题:

/tmp的目录权限如下,任何人都可以写:
    drwxrwxrwt   2 root root 69632 2011-11-02 17:17 tmp/
    而我设定的目录权限为只允许自己才可以写:
    drwxr-xr-x  2 fenglibin webusers  4096 2011-11-02 17:31 temp/