是否可以从/ var / lib / mysql / database文件夹中恢复mysql数据库?

由于噩梦以某种方式成为现实,我的mysql安装最终被重新安装。 我无法在重新安装之前启动mysql,所以我无法使用mysqldump进行正确的备份。 然而,我确实将/ var / lib / mysql复制到安全的地方。 尝试将数据库文件夹rsync回到他们的旧位置是行不通的 – 好吧它有点工作,但是随后wordpress发生了崩溃,即使权限已得到纠正。 如果我手动创建该数据库然后rsync它,mysql将无法启动。

是否有可能以某种方式恢复此文件夹?

编辑:我现在有它,以便我可以在mysql提示符中看到该文件夹​​。 我可以使用该数据库,但尝试SELECT * FROM wp_posts; 给我

mysql> SELECT * FROM wp_posts; ERROR 1146 (42S02): Table 'alfheimwp.wp_posts' doesn't exist 

尽管如此

 mysql> SHOW TABLES; +-------------------------------------------------+ | Tables_in_alfheimwp | +-------------------------------------------------+ | wp_bp_activity | | wp_bp_activity_meta | | wp_bp_friends | | wp_bp_groups | | wp_bp_groups_groupmeta | | wp_bp_groups_members | | wp_bp_messages_messages | | wp_bp_messages_meta | | wp_bp_messages_notices | | wp_bp_messages_recipients | | wp_bp_notifications | | wp_bp_notifications_meta | | wp_bp_user_blogs | | wp_bp_user_blogs_blogmeta | | wp_bp_xprofile_data | | wp_bp_xprofile_fields | | wp_bp_xprofile_groups | | wp_bp_xprofile_meta | | wp_commentmeta | | wp_comments | | wp_links | | wp_options | | wp_postmeta | | wp_posts | | wp_sg_action | | wp_sg_config | | wp_sg_schedule | | wp_signups | | wp_term_relationships | | wp_term_taxonomy | | wp_termmeta | | wp_terms | | wp_ucare_logs | | wp_usermeta | | wp_users | | wp_woocommerce_api_keys | | wp_woocommerce_attribute_taxonomies | | wp_woocommerce_downloadable_product_permissions | | wp_woocommerce_log | | wp_woocommerce_order_itemmeta | | wp_woocommerce_order_items | | wp_woocommerce_payment_tokenmeta | | wp_woocommerce_payment_tokens | | wp_woocommerce_sessions | | wp_woocommerce_shipping_zone_locations | | wp_woocommerce_shipping_zone_methods | | wp_woocommerce_shipping_zones | | wp_woocommerce_tax_rate_locations | | wp_woocommerce_tax_rates | | wp_wpsp_agent_settings | | wp_wpsp_attachments | | wp_wpsp_canned_reply | | wp_wpsp_catagories | | wp_wpsp_custom_fields | | wp_wpsp_custom_priority | | wp_wpsp_custom_status | | wp_wpsp_faq | | wp_wpsp_faq_catagories | | wp_wpsp_panel_custom_menu | | wp_wpsp_ticket | | wp_wpsp_ticket_thread | +-------------------------------------------------+ 61 rows in set (0.00 sec) 

所以这个数据库显然缺少mysql,但是这是我之前使用的完全相同的mysql版本。

编辑2:终于开始到达某个地方了,但我在兔子洞深处,我需要一个innodb助手……现在mysql无法从这开始:

 2017-10-13T01:55:16.625761Z 0 [ERROR] [FATAL] InnoDB: Tablespace id is 1121 in the data dictionary but in file ./mysql/help_relation.ibd it is 6! 

我无法从表中读取的原因是因为我没有将innodb文件恢复到mail / var / lib / mysql文件夹中。 但是,现在我已经拥有了这些表空间ID。 我不知道如何编辑它们,或者甚至是解决它的方法。 我希望有一种自动纠正方法!

好的,这里有。 所以,你需要彻底清除mysql。 在这一点上甚至不打算尝试切换到mariadb,它根本不起作用(尽管删除了与mysql相关的每个文件,但无法更改root密码)。

[编辑:我后来意识到这是因为我没有以root身份运行mariadb。 出于某种原因,如果您安装了mariadb,则必须使用sudo mysql -u root -p启动提示。 所以在理论上,mariadb也应该为这个过程工作。]

你需要重新安装mysql-server。 首先删除与mysql相关的所有内容

 sudo apt-get purge mysql-server* mariadb* 

然后删除所有与mysql相关的文件夹(确保已经有整个/ var / lib / mysql文件夹的安全备份)。

 sudo rm -rf /var/lib/mysql sudo rm -rf /etc/mysql sudo rm -rf /var/log/mysql 

然后重新安装mysql-server。 如果它因愚蠢的依赖性错误而失败,那就行了

 ln -s /etc/mysql/mysql.conf.d /etc/mysql/conf.d 

(或者反过来,现在不记得了)然后跑

 sudo apt-get install mysql-server 

再次让它完成设置。 用它停止mysql服务器

 sudo systemctl stop mysql 

然后将数据库文件夹(及其所有内容)复制回/ var / lib / mysql。 然后还将ib *复制到/ var / lib / mysql(这些是innodb字典和其他文件)。

 sudo rsync -r /ib* /var/lib/mysql/ 

一定要做

 sudo chown -R mysql:mysql /var/lib/mysql 

编辑/etc/mysql/my.cnf并将innodb_force_recovery=5添加到[mysqld]部分(您可能需要添加[mysqld])。 现在用systemctl start mysql再次systemctl start mysql 。 如果查看/var/log/mysql/error.log您可能仍会看到错误,但请尝试进入提示

 mysql -u root -p 

如果你能够启动它,那很好。 如果没有,再看一下systemctl status mysql.service,看看它的内容。 这可能是一个问题。 如果你终于能够进入提示,立即做

 mysqldump -u root -p  > database.sql 

所以我们可以获得该数据库的干净转储。 现在我们有一个干净的重要数据库转储,我们需要重做前面的几个步骤(至少我做了,确定…我能够启动WordPress,但我无法登录在)。 所以重做前几个清理步骤,卸载mysql-server后删除所有mysql目录。 重新安装,但这次只是运行

  mysql -u root -p  < database.sql 

你应该是金色的! 您可能需要重新创建数据库( CREATE DATABASE databasename; )不要忘记以前重新创建拥有该数据库的用户(如果您忘记了,请查看/ var / www / html / wp-config .php或wp-config.php用于详细信息的其他地方)。