Est-il possible de restaurer une base de données mysql à partir du dossier / var / lib / mysql / database?


9

En raison d'un cauchemar devenu réalité, mon installation mysql a finalement été réinstallée. Je ne pouvais pas démarrer mysql avant la réinstallation, donc je ne pouvais pas utiliser mysqldump pour faire une sauvegarde correcte. J'ai cependant copié / var / lib / mysql dans un endroit sûr. Essayer de resynchroniser les dossiers de la base de données dans leurs anciens emplacements ne fonctionne pas - eh bien, cela fonctionne, mais Wordpress a un effondrement, même avec les autorisations corrigées. Si je crée cette base de données manuellement puis la rsync, mysql ne démarre pas.

Est-il possible de restaurer ce dossier d'une manière ou d'une autre?

EDIT: Je l'ai maintenant pour que je puisse voir le dossier dans l'invite mysql. Je peux UTILISER cette base de données, mais en essayant SELECT * FROM wp_posts; Donne moi

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

En dépit du fait que

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)

Il y a donc évidemment quelque chose dans cette base de données qui manque à mysql, mais c'est exactement la même version de mysql que j'utilisais auparavant.

EDIT 2: Enfin, je commence à arriver quelque part, mais je suis au fond du terrier du lapin et j'ai besoin d'un assistant innodb ici ... maintenant mysql ne commence pas avec ceci:

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!

La raison pour laquelle je n'ai pas pu lire les tableaux est parce que je n'ai pas restauré les fichiers innodb dans le dossier mail / var / lib / mysql. Maintenant que j'ai, cependant, ces identifiants d'espace de table ne sont pas alignés. Je n'ai aucune idée de comment les modifier ou si c'est même le moyen de le résoudre. Je souhaite qu'il y ait un moyen automatisé de les corriger!

Réponses:


6

D'accord, c'est parti. Vous devez donc effectuer une purge complète de mysql. Ne vous embêtez même pas à essayer de passer à mariadb à ce stade, cela ne fonctionnera tout simplement pas (impossible de changer le mot de passe root malgré la suppression de tous les fichiers liés à mysql).

[EDIT: J'ai réalisé plus tard que c'était parce que je n'exécutais pas mariadb en tant que root. Pour une raison quelconque, si mariadb est installé, vous devez lancer une invite avec sudo mysql -u root -p. Donc, en théorie, mariadb devrait également fonctionner pour ce processus.]

Vous devez faire une nouvelle installation de mysql-server. Commencez par supprimer tout ce qui est lié à mysql avec

sudo apt-get purge mysql-server* mariadb*

Ensuite, supprimez tous les dossiers liés à mysql (assurez-vous que vous disposez déjà d'une sauvegarde sûre de tous les dossiers / var / lib / mysql).

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

Réinstallez ensuite mysql-server. S'il échoue avec l'erreur de dépendance idiote, faites

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

(ou l'inverse, je ne me souviens plus maintenant) puis exécutez

sudo apt-get install mysql-server 

et laissez-le terminer la configuration. Arrêtez le serveur mysql avec

sudo systemctl stop mysql

Copiez ensuite JUST les dossiers de la base de données (et tout leur contenu) dans / var / lib / mysql. Ensuite, copiez également ib * dans / var / lib / mysql (ce sont le dictionnaire innodb et d'autres fichiers).

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

Assurez-vous de faire

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

Modifiez /etc/mysql/my.cnf et ajoutez-le innodb_force_recovery=5à la [mysqld]section (vous devrez peut-être ajouter [mysqld]). Maintenant, redémarrez mysql avec systemctl start mysql. Si vous regardez, /var/log/mysql/error.logvous pouvez toujours voir des erreurs, mais essayez d'entrer dans une invite avec

mysql -u root -p

Si vous êtes en mesure de le démarrer, tant mieux. Sinon, jetez un autre coup d'oeil à l'état de systemctl mysql.service et voyez ce qu'il dit. Ce pourrait être un problème de permission. Si vous avez finalement pu entrer dans une invite, faites immédiatement

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

afin que nous puissions obtenir un vidage net de cette base de données. Maintenant que nous avons un vidage net des bases de données importantes, nous devons refaire les premières étapes partout (du moins je l'ai fait, pour être sûr ... J'ai pu démarrer WordPress à ce stade mais je n'ai pas pu me connecter dans). Donc, refaites les premières étapes de nettoyage, supprimez tous les répertoires mysql après avoir désinstallé mysql-server. Réinstallez, mais exécutez cette fois

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

Et tu devrais être doré! Vous devrez peut-être recréer les bases de données ( CREATE DATABASE databasename;) N'oubliez pas de recréer l'utilisateur qui possédait cette base de données auparavant (si vous avez oublié, consultez votre /var/www/html/wp-config.php ou n'importe où sinon votre wp-config.php est pour les détails).


1
jetez un oeil aux fichiers par tables et au moteur innodb, ça pourrait vous plaire ;-)
s1mmel

1
Merci beaucoup! Cependant, j'ai dû définir innodb_force_recovery=6dans /etc/mysql/my.cnf pour accéder à l'invite MySQL.
invité le

1
Mille mercis!! J'ai dû supprimer les fichiers journaux plusieurs fois pour que le serveur démarre, mais après cela a fonctionné!
Eric F.
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.