Ist es möglich, eine MySQL-Datenbank aus dem Ordner / var / lib / mysql / database wiederherzustellen?


8

Aufgrund eines Alptraums, der irgendwie real wurde, wurde meine MySQL-Installation neu installiert. Ich konnte mysql vor der Neuinstallation nicht starten, daher konnte ich mysqldump nicht für eine ordnungsgemäße Sicherung verwenden. Ich habe jedoch / var / lib / mysql an einen sicheren Ort kopiert. Der Versuch, die Datenbankordner wieder an ihren alten Speicherort zu synchronisieren, funktioniert nicht - nun, es funktioniert irgendwie, aber dann hat WordPress einen Zusammenbruch, selbst wenn die Berechtigungen korrigiert wurden. Wenn ich diese Datenbank manuell erstelle und sie dann erneut synchronisiere, wird MySQL nicht gestartet.

Ist es möglich, diesen Ordner irgendwie wiederherzustellen?

BEARBEITEN: Ich habe es jetzt, damit ich den Ordner in der MySQL-Eingabeaufforderung sehen kann. Ich kann diese Datenbank verwenden, versuche aber SELECT * FROM wp_posts; gibt mir

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

Trotz der Tatsache dass

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)

Es gibt also offensichtlich etwas an dieser Datenbank, das MySQL fehlt. Dies ist jedoch genau die gleiche Version von MySQL, die ich zuvor verwendet habe.

EDIT 2: Endlich irgendwo anfangen, aber ich bin tief im Kaninchenbau und brauche hier einen Innodb-Helfer ... jetzt fängt MySQL nicht damit an:

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!

Der Grund, warum ich nicht aus den Tabellen lesen konnte, war, dass ich die innodb-Dateien nicht im Ordner mail / var / lib / mysql wiederhergestellt habe. Jetzt, da ich es habe, stehen diese Tablespace-IDs nicht mehr in einer Reihe. Ich habe keine Ahnung, wie ich sie bearbeiten soll oder ob das überhaupt der Weg ist, sie zu lösen. Ich wünschte, es gäbe eine automatisierte Möglichkeit, diese zu korrigieren!

Antworten:


5

Okay, hier geht. Sie müssen also eine vollständige Bereinigung von MySQL durchführen. Versuchen Sie an dieser Stelle nicht einmal, zu Mariadb zu wechseln, es funktioniert einfach nicht (das Root-Passwort kann nicht geändert werden, obwohl alle mit MySQL verbundenen Dateien gelöscht wurden).

[EDIT: Ich habe später festgestellt, dass dies daran liegt, dass ich Mariadb nicht als Root ausgeführt habe. Wenn Sie Mariadb installiert haben, müssen Sie aus irgendeinem Grund eine Eingabeaufforderung mit starten sudo mysql -u root -p. Theoretisch sollte Mariadb auch für diesen Prozess funktionieren.]

Sie müssen eine Neuinstallation von MySQL-Server durchführen. Entfernen Sie zunächst alles, was mit MySQL zu tun hat

sudo apt-get purge mysql-server* mariadb*

Entfernen Sie dann alle MySQL-bezogenen Ordner (stellen Sie sicher, dass Sie bereits eine sichere Sicherung der gesamten Ordner / var / lib / mysql haben).

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

Dann installieren Sie mysql-server neu. Wenn dies mit dem dummen Abhängigkeitsfehler fehlschlägt, tun Sie dies

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

(oder umgekehrt, kann mich jetzt nicht erinnern) dann laufen

sudo apt-get install mysql-server 

wieder und lassen Sie es fertig einrichten. Stoppen Sie den MySQL-Server mit

sudo systemctl stop mysql

Kopieren Sie dann NUR die Datenbankordner (und ihren gesamten Inhalt) zurück nach / var / lib / mysql. Kopieren Sie dann auch ib * nach / var / lib / mysql (dies sind das innodb-Wörterbuch und andere Dateien).

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

Stellen Sie sicher, dass Sie es tun

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

Bearbeiten Sie /etc/mysql/my.cnf und fügen Sie innodb_force_recovery=5es dem [mysqld]Abschnitt hinzu (möglicherweise müssen Sie [mysqld] hinzufügen). Starten Sie jetzt MySQL erneut mit systemctl start mysql. Wenn Sie sich das ansehen /var/log/mysql/error.log, werden möglicherweise immer noch Fehler angezeigt. Versuchen Sie jedoch, eine Eingabeaufforderung mit zu erhalten

mysql -u root -p

Wenn Sie es starten können, großartig. Wenn nicht, schauen Sie sich den systemctl-Status mysql.service noch einmal an und sehen Sie, was darin steht. Möglicherweise handelt es sich um ein Genehmigungsproblem. Wenn Sie endlich in der Lage waren, eine Eingabeaufforderung zu erhalten, tun Sie dies sofort

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

So können wir einen sauberen Speicherauszug dieser Datenbank erhalten. Jetzt, da wir einen sauberen Speicherauszug der wichtigen Datenbanken haben, müssen wir die ersten Schritte noch einmal wiederholen (zumindest habe ich das getan, um sicher zu sein ... Ich konnte WordPress zu diesem Zeitpunkt starten, konnte mich aber nicht anmelden im). Wiederholen Sie also die ersten Reinigungsschritte und entfernen Sie alle MySQL-Verzeichnisse, nachdem Sie MySQL-Server deinstalliert haben. Neu installieren, aber diesmal einfach ausführen

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

Und du solltest golden sein! Möglicherweise müssen Sie die Datenbanken neu erstellen ( CREATE DATABASE databasename;). Vergessen Sie nicht, den Benutzer neu zu erstellen, dem diese Datenbank zuvor gehörte (wenn Sie dies vergessen haben, schauen Sie in Ihre /var/www/html/wp-config.php oder wo auch immer sonst ist deine wp-config.php für die Details).


1
Werfen Sie einen Blick auf Dateien pro Tabellen und die Innodb-Engine, es könnte Ihnen gefallen
;-)

1
Vielen Dank! Ich musste jedoch innodb_force_recovery=6/etc/mysql/my.cnf einstellen, um zur MySQL-Eingabeaufforderung zu gelangen.
Gast

1
Tausend Dank!! Ich musste die Protokolldateien ein paar Mal löschen, um den Server zu starten, aber danach funktionierte es!
Eric F.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.