我运行的是Windows 10,在本地主机上安装了XAMPP和几十个Drupal站点。这几个月来一切都很好。
今天早上,我从两天前的还原点执行了Windows恢复,以摆脱不需要的Windows更新。在我这样做之后,我的MySQL停止工作了。我尝试删除文件ibdata1
(我现在知道这是一个坏主意),但是当情况变得更糟时,我恢复了我删除的初始ibdata1
。所有的表数据(.frm
和.ibd
文件)仍在C:xamppmysqldata
中。现在MySQL至少可以启动了,但是所有的表都"消失"了……我可以在浏览器中加载phpMyAdmin,当我下拉左边的数据库时,所有的表显示…但当我试着点击一个表时,它告诉我"没有找到表"。
在mysql_error.log
中有几个错误,如InnoDB: Cannot open table mysql/slave_master_info from the internal data dictionary of InnoDB though the .frm file for the table exists.
。错误消息中提到的URL应该告诉你如何解决这个问题,但它是没有信息的。
我不认为 ibdata1
是损坏的…所有关于恢复数据的文章都复杂到与问题不成比例的程度。没有人有一个简单明了的解决方案。我谷歌错了吗?这种情况在我身上至少发生过两次,每次都是在我开始按照网上找到的长达10个小时的程序进行操作之前,问题自行解决了。不幸的是,这次没有。我肯定错过了一些简单的东西。我在几十个数据库中有成百上千的表,试图为每个表找到模式并手动插入它似乎是无望的,而大多数恢复文章似乎都建议这样做。
数据库不应该只知道如何读取.frm
和.ibd
文件,而且,你知道…工作吗?感觉就像有一个值不在合适的地方,如果我能找到它,所有的东西都会"弹出"回到合适的位置。
为我们做的工作是这个链接(恢复每个表的孤立文件ibd文件)。
简单地说,你可以这样做:
ALTER TABLE ..... DISCARD TABLESPACE;
对于每个受影响的表。然后,对于每个受影响的表:
ALTER TABLE .... IMPORT TABLESPACE; SHOW WARNINGS;
您可以在同一模式上执行此操作,也可以在其他数据库中创建新模式并复制所有*。炎症性肠病的文件。在本例中:
- 用表定义创建新的模式。
- 对所有表执行丢弃表空间。
- 复制新的*。
删除所有表空间
重要!新模式最好与旧模式同名
我成功的秘诀:
https://dba.stackexchange.com/a/42932我的db是InnoDB,所以id有问题,当升级macos时,我得到了这个。我将引用主要部分:
你必须有:
-ibdata1
-ib_logfile0
-ib_logfile1
-。mysql_database文件夹中的FRM文件
-您愿意销毁(如果需要的话)的MAMP/MAMP Pro的新安装
- SSH到你的web服务器(开发,生产,没有区别),并浏览到你的mysql文件夹(我是在/var/lib/mysql for a PleskLinux上的安装)
压缩mysql文件夹- 下载mysql文件夹的存档文件,其中应该包含所有mysql数据库,无论是MyISAM还是innoDB(您可以scp该文件,或移动
安装MAMP (Mac, Apache, MySQL, PHP)- 浏览到/Applications/MAMP/db/mysql/
- 备份/Applications/MAMP/db/mysql到一个zip文件(以防万一)
从生产服务器(在我的情况下是mt Plesk环境)复制mysql文件夹存档中包含的所有文件夹和文件除非不要覆盖:
——/应用程序/MAMP/db/mysql/mysql/
-/应用程序/MAMP/db/mysql/mysql_upgrade_info
-/应用程序/MAMP/db/mysql/performance_schema
在我的例子中,我正在恢复备份(由galera-arbitrator和xtrabackup完成)。使用第一个,我们获取了Percona_XtraDB_Cluster的状态快照,使用最后一个,我们备份了物理数据。因此,在将备份的数据放到新mysql服务器的/var/lib/mysql
目录后,我们执行了以下select
查询,得到了错误。
$ mysql -uroot -p$MYSQL_ROOT_PASSWORD -h<NEW_SERVER_HOST_NAME> -e 'show columns from <MY_DB>.<MY_TABLE>'
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1146 (42S02) at line 1: Table 'playground.equipment' doesn't exist
服务器日志是:
[Warning] InnoDB: Cannot open table <MY_DB>/<MY_TABLE> from the internal data dictionary of InnoDB though the .frm file for the table exists. Please refer to http://dev.mysql.com/doc/refman/5.7/en/innodb-troubleshooting.html for how to resolve the issue.
我们刚刚重新启动了容器的新数据。这就是
只需将slave_master_info. from重命名为slave_master_info.BAK即可。重新启动mysql服务