Чи можливо відновити базу даних mysql з папки / var / lib / mysql / database?


9

Через кошмар, який якимось чином став справжнім, моя установка mysql закінчилася перевстановленням. Я не міг запустити mysql перед перевстановленням, тому не міг використовувати mysqldump, щоб зробити належну резервну копію. Однак я копіював / var / lib / mysql у безпечне місце. Спроба rsync папок бази даних на свої старі місця не працює - добре, це працює, але тоді Wordpress зазнає краху навіть при виправлених правах. Якщо я створити цю базу даних вручну і потім rsync її, mysql не запуститься.

Чи можливо якось відновити цю папку?

EDIT: У мене зараз це так, що я можу бачити папку під час запиту 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, яку я використовував раніше.

EDIT 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. Тож теоретично маріадб повинен працювати і для цього процесу.]

Вам потрібно зробити нову установку 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
Завдяки мільйонів!! Мені довелося кілька разів видалити файли журналів, щоб запустити сервер, але після цього він працював!
Ерік Ф.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.