是否可以从/ var / lib / mysql / database文件夹还原mysql数据库?


9

由于一场噩梦以某种方式成为现实,我的mysql安装最终被重新安装。重新安装之前,我无法启动mysql,因此无法使用mysqldump进行正确的备份。但是我确实将/ var / lib / mysql复制到一个安全的地方。尝试将数据库文件夹重新同步回它们的旧位置不起作用-确实可以正常工作,但是即使纠正了权限,wordpress也会崩溃。如果我手动创建该数据库,然后重新同步它,则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文件还原到邮件/ var / lib / mysql文件夹中。但是,既然有了这些表空间ID,它们就不会排队了。我不知道如何编辑它们,或者那是否就是解决它的方法。我希望有一种自动的方法来纠正这些问题!

Answers:


6

好了,去。因此,您需要完全清除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 <backedupfolder>/ib* /var/lib/mysql/

确保做

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

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

mysql -u root -p

如果您能够启动它,那就太好了。如果不是,请再次查看systemctl状态mysql.service并查看其内容。这可能是一个许可问题。如果您终于能够进入提示状态,请立即执行

mysqldump -u root -p <databasename> > database.sql 

这样我们就可以对该数据库进行干净的转储。既然我们已经对重要数据库进行了干净的转储,我们需要重新做头几步(至少我做了,以确保……我现在可以启动WordPress了,但是我无法登录在)。因此,请重做前几个清洁步骤,在卸载mysql-server之后删除所有mysql目录。重新安装,但是这次只是运行

 mysql -u root -p <databasename> < database.sql

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


1
看一下每个表和innodb引擎的文件,您可能会喜欢它;-)
s1mmel

1
非常感谢!但是我必须innodb_force_recovery=6在/etc/mysql/my.cnf中进行设置才能进入MySQL提示符。
来宾

1
太感谢了!!我必须删除日志文件几次才能启动服务器,但是之后就可以了!
埃里克·F
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.