MySQL中数据备份或转移后出现“使用中”和"doesn’t exist"解决办法

来源:互联网 发布:python 面向对象 编辑:程序博客网 时间:2024/05/22 07:01

MySQL中数据备份中一个重要的问题.
错误表现:

运行页面时显示 Table “xxx” doesn’t exist.
phpMyAdmin中存在的表显示”使用中(in use)”, 无法对表进行操作, 提示如1.


可能的原因:

升级了MySQL版本
改变了安装目录
数据备份不完全
一般来说, 数据备份不完全是引起这个错误的根本原因.

以WordPress数据库来说, 数据表类型分为MyISAM与InnoDB两种.

以表”Table”为例:
如类型是MyISAM, 数据文件则以”Table.frm”"Table.MYD”"Table.MYI”"三个文件存储于”/data/$databasename/”目录中.
如类型是InnoDB, 数据文件则存储在”$innodb_data_home_dir/″中的ibdata1文件中(一般情况),结构文件存在于table_name.frm中.
MySQL的数据库文件直接复制便可以使用,但是那是指“MyISAM”类型的表。
而使用MySQL-Front直接创建表,默认是“InnoDB”类型,这种类型的一个表在磁盘上只对应一个“*.frm”文件,不像MyISAM那样还“*.MYD,*.MYI”文件。
MyISAM类型的表直接拷到另一个数据库就可以直接使用,但是InnoDB类型的表却不行。解决方法就是:

同时拷贝innodb数据库表“*.frm”文件和innodb数据“ibdata1”文件到合适的位置。启动MySQL的Windows服务
由于MySQL这样数据混杂的形式, 往往很容易让使用者在备份时忘记了备份InnoDB, 从而导致了上述错误.
当然了, 解决方法就很简单, 连带Data_InnoDB一起转移便可.
仍然需要注意的是, 仅仅转移可能是不够的: 你可能需要检查my.ini中对于innodb_data_home_dir的定义.
如有, 则将它改成你现在Data_InnoDB的绝对目录路径.
如没有, 则将它加入my.ini中, 由于懒惰就不写冗长的注释了.

innodb_data_home_dir = "C:/Program Files/MySQL/MySQL Server 5.0/data/"

如果数据库目录下面有:ibdata1 那就是它了。 将ibdata1拷到指定的innodb_data_home_dir目录中。

重启mysql服务即可!!!