Czy można przywrócić bazę danych mysql z folderu / var / lib / mysql / database?

9

Z powodu koszmaru, który w jakiś sposób stał się rzeczywistością, moja instalacja mysql została ponownie zainstalowana. Nie mogłem uruchomić mysql przed ponowną instalacją, więc nie mogłem użyć mysqldump do wykonania właściwej kopii zapasowej. Skopiowałem / var / lib / mysql w bezpieczne miejsce. Próba zsynchronizowania folderów bazy danych z powrotem do ich starych lokalizacji nie działa - to dobrze działa, ale potem Wordpress się załamał, nawet z poprawionymi uprawnieniami. Jeśli utworzę tę bazę danych ręcznie, a następnie zsynchronizuję ją, mysql nie uruchomi się.

Czy można jakoś przywrócić ten folder?

EDYCJA: Mam go teraz, dzięki czemu mogę zobaczyć folder w wierszu polecenia mysql. Mogę UŻYWAĆ tej bazy danych, ale próbuję WYBRAĆ * wp_posts; daje mi

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

Pomimo faktu, że

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)

Więc oczywiście w tej bazie danych brakuje mysql, jednak jest to dokładnie ta sama wersja mysql, której wcześniej używałem.

EDYCJA 2: W końcu gdzieś się dostaję, ale jestem głęboko w króliczej nory i potrzebuję tutaj pomocnika innodb ... teraz mysql nie zaczyna od tego:

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!

Powodem, dla którego nie mogłem czytać z tabel, było to, że nie przywróciłem plików innodb do folderu mail / var / lib / mysql. Teraz, gdy już mam, te identyfikatory przestrzeni tabel nie są w kolejce. Nie mam pojęcia, jak je edytować lub czy to nawet sposób na ich rozwiązanie. Chciałbym, aby istniał zautomatyzowany sposób ich naprawienia!

Aureliusz
źródło

Odpowiedzi:

6

Dobra, proszę bardzo. Musisz więc wykonać pełne czyszczenie mysql. Nie przejmuj się nawet próbą przejścia na mariadb w tym momencie, po prostu nie zadziała (nie można zmienić hasła roota pomimo usunięcia każdego pliku związanego z mysql).

[EDYCJA: Później zrozumiałem, że to dlatego, że nie uruchomiłem mariadbu jako root. Z jakiegoś powodu, jeśli masz zainstalowany mariadb, musisz zacząć od pytania sudo mysql -u root -p. Teoretycznie mariadb powinien również działać w tym procesie.]

Musisz wykonać nową instalację serwera mysql. Zacznij od usunięcia wszystkiego, co dotyczy mysql

sudo apt-get purge mysql-server* mariadb*

Następnie usuń wszystkie foldery związane z mysql (upewnij się, że masz już bezpieczną kopię zapasową wszystkich folderów / var / lib / mysql).

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

Następnie zainstaluj ponownie serwer mysql. Jeśli nie powiedzie się głupi błąd zależności, zrób

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

(lub odwrotnie, nie pamiętam teraz), a następnie uruchom

sudo apt-get install mysql-server 

ponownie i pozwól mu zakończyć konfigurację. Zatrzymaj serwer mysql za pomocą

sudo systemctl stop mysql

Następnie skopiuj TYLKO foldery bazy danych (i całą ich zawartość) z powrotem do / var / lib / mysql. Następnie skopiuj również ib * do / var / lib / mysql (są to słowniki innodb i inne pliki).

sudo rsync -r <backedupfolder>/ib* /var/lib/mysql/

Pamiętaj, aby zrobić

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

Edytuj /etc/mysql/my.cnf i dodaj innodb_force_recovery=5do [mysqld]sekcji (może być konieczne dodanie [mysqld]). Teraz uruchom ponownie mysql za pomocą systemctl start mysql. Jeśli na to spojrzysz /var/log/mysql/error.log, nadal możesz zobaczyć błędy, ale spróbuj uzyskać monit z

mysql -u root -p

Jeśli możesz to uruchomić, świetnie. Jeśli nie, spójrz ponownie na status systemctl mysql.service i zobacz, co mówi. Może to być problem z uprawnieniami. Jeśli w końcu udało Ci się uzyskać monit, natychmiast zrób to

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

dzięki czemu możemy uzyskać czysty zrzut tej bazy danych. Teraz, gdy mamy czysty zrzut ważnych baz danych, musimy ponownie wykonać kilka pierwszych kroków (przynajmniej tak zrobiłem, aby się upewnić ... W tym momencie mogłem uruchomić WordPress, ale nie mogłem się zalogować w). Powtórz więc kilka pierwszych kroków czyszczenia, usuń wszystkie katalogi mysql po odinstalowaniu serwera mysql. Zainstaluj ponownie, ale tym razem po prostu uruchom

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

I powinieneś być złoty! Konieczne może być ponowne utworzenie baz danych ( CREATE DATABASE databasename;) Nie zapomnij ponownie utworzyć użytkownika, który był właścicielem tej bazy danych (jeśli zapomniałeś, zajrzyj do /var/www/html/wp-config.php lub gdziekolwiek w przeciwnym razie twój wp-config.php jest dla szczegółów).

Aureliusz
źródło
1
spójrz na pliki w tabelach i silnik innodb, może ci się spodobać ;-)
s1mmel
1
Wielkie dzięki! Jednak musiałem ustawić innodb_force_recovery=6w /etc/mysql/my.cnf, aby dostać się do monitu MySQL.
gość
1
Stukrotne dzięki!! Musiałem usunąć pliki dziennika kilka razy, aby uruchomić serwer, ale potem zadziałało!
Eric F.