MySQL-关于mysql一个被DROP过的表的问题

MySQL-关于mysql一个被DROP过的表的问题

虐人心 发布于 2017-08-08 字数 506 浏览 1100 回复 6

症状:这是一个叫nl_forum的库里边的一个叫phpacl_groups的表。这个表曾经被DROP了,后来直接把备份phpacl_groups.frm拷贝到数据库里面,出现了以下情况:

关于这个表以下语句可以正常执行:
desc nl_forum.phpacl_groups;
select * from nl_forum.phpacl_groups;

但是执行select * from nl_forum.phpacl_groups where forum_id = '1';
就提示:
ERROR 1146 (42S02): Table 'nl_forum.phpacl_groups' doesn't exist
究竟是什么原因?

另外,现在想恢复,然后请问该如何恢复?

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

泛泛之交 2017-10-18 6 楼

你可以先把这个表删除,再用create table建立,不知道你有没有.sql的备份文件,若有把数据倒进去就可以了,备份数据最好要用mysqldump,若你备份的是数据文件,一定要先停库。

虐人心 2017-10-08 5 楼

看你问题里提示"ERROR 1146 (42S02): Table 'nl_forum.phpacl_groups' doesn't exist"的错误和你评论里说“没有phpacl_groups.MYD和phpacl_groups.MYI”,那我猜想你的phpacl_groups表引擎应该是INNODB

而对于Innodb引擎默认所有的数据放到共享表空间(也就是ibdata文件)里了,所以单拷这个phpacl_groups.frm表定义,当然是不行的,而且Innodb引擎的表不能直接拷贝的,你还是通过mysql_dump命令或者是MySQL工具将数据导出来然后再导到另一个库里比较保险。

偏爱自由 2017-09-22 4 楼

分别把phpacl_groups.MYD,phpacl_groups.MYI,phpacl_groups.frm拷到数据库目录下,重启一下mysql,再有问题就修复一下数据文件。

偏爱自由 2017-09-09 3 楼

注意:在拷贝数据库时要停一下你的mysql。比如cp你的phpacl_groups.MYD,phpacl_groups.MYI,phpacl_groups.frm文件从备份到数据库目录下,要先停掉mysql,拷贝完后在重启mysql!

虐人心 2017-08-21 2 楼

我估计你的操作可能是逼不得已的,因为一般的数据备份或者恢复都不会采用这种方式的,问题你应该也触发到了,所以建议你以后对数据库的备份恢复可以采用第三方的,比如使用rsync备份自动化备份数据,这个我们公司以前再用,非常方便:一次备份,后面可以增量备份等等,你可以研究一下...

瑾兮 2017-08-18 1 楼

备份数据库要养成好的习惯,标准流程:锁表-》刷新表到磁盘-》拷贝文件-》解锁。

在备份数据库前,一定要先知道数据库的引擎是啥。如果不知道的话,可以直接使用mysqldump备份,它支持任何引擎备份数据的。

有3种方式来调用mysqldump:
shell> mysqldump [options] db_name [tables]
shell> mysqldump [options] ---database DB1 [DB2 DB3...]
shell> mysqldump [options] --all--database
如果没有指定任何表或使用了---database或--all--database选项,则转储整个数据库。

MyISAM 表备份:

1.sql备份

使用SELECT INTO ...OUTFILE或BACKUP TABLE。这里要注意输出的文件不能先存在,因为覆盖完整的文件会有安全风险。BACKUP TABLE备份时注意输出目录的权限,改方法只是备份MYD和frm文件,不备份索引。

MyISAM三个文件:$tablename.frm文件存储表定义。数据文件的扩展名为$tablename.MYD。索引文件的扩展名是$tablename.MYI ,当看到数据储存这三个文件就知道引擎是MyISAM类型。

2.拷贝数据文件

当mysql服务器停止时,通过复制所有表文件(.frm、.MYD和*.MYI文件)来备份MyISAM数据库。

InnoDB 表备份除了拷贝数据文件方法不能用外,用SELECT INTO ...OUTFILE或mysqldump都可以!