Можно ли восстановить базу данных mysql из папки / var / lib / mysql / database?

9

Из-за кошмара, который каким-то образом стал реальностью, моя установка 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. Теперь, когда у меня есть, эти идентификаторы табличного пространства не выстраиваются. Я понятия не имею, как их редактировать или даже это способ решить эту проблему. Я хотел бы, чтобы был автоматизированный способ исправить это!

Аврелий
источник

Ответы:

6

Хорошо, здесь идет. Итак, вам нужно сделать полную очистку mysql. На этом этапе даже не пытайтесь переключиться на mariadb, он просто не будет работать (невозможно изменить пароль root, несмотря на удаление всех файлов, связанных с mysql).

[EDIT: я позже понял, что это потому, что я не запускал mariadb от имени root. По какой-то причине, если у вас установлен mariadb, вы должны запустить приглашение с sudo mysql -u root -p. Так что в теории mariadb должен работать и для этого процесса.]

Вам нужно сделать новую установку MySQL-сервера. Начните с удаления всего, что связано с 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-сервер. Если это не удается из-за глупой ошибки зависимости, выполните

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 status mysql.service и посмотрите, что там написано. Это может быть проблема разрешений. Если вы, наконец, смогли получить приглашение, немедленно выполните

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

так что мы можем получить чистый дамп этой базы данных. Теперь, когда у нас есть чистый дамп важных баз данных, мы должны повторить первые несколько шагов (по крайней мере, я сделал, чтобы быть уверенным ... Я смог запустить WordPress на этом этапе, но я не мог войти в). Итак, повторите первые несколько шагов очистки, удалите все каталоги mysql после удаления 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
Бесконечно благодарен!! Мне пришлось удалить файлы журнала пару раз, чтобы запустить сервер, но после этого все заработало!
Эрик Ф.