web-dev-qa-db-fra.com

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

En raison d'un cauchemar devenu réalité, mon installation de mysql a été réinstallée. Je ne pouvais pas démarrer mysql avant la réinstallation, je ne pouvais donc pas utiliser mysqldump pour effectuer une sauvegarde appropriée. J'ai toutefois copié/var/lib/mysql dans un endroit sûr. Essayer de resynchroniser les dossiers de la base de données dans leur ancien emplacement ne fonctionne pas - bon, cela fonctionne, mais ensuite wordpress connaît un effondrement, même avec les autorisations corrigées. Si je crée cette base de données manuellement, puis rsync, mysql ne démarrera pas.

Est-il possible de restaurer ce dossier en quelque sorte?

EDIT: Je l’ai maintenant pour pouvoir 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)

Donc, il manque évidemment quelque chose à propos de cette base de données qui manque à mysql, cependant c'est la même version de mysql que celle que j'utilisais auparavant.

EDIT 2: Je commence enfin à aller quelque part, mais je suis au fond du terrier et j’ai besoin d’une aide innodb ici ... maintenant, mysql ne parvient pas à démarrer 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 ne pouvais pas lire les tables était parce que je n'avais pas restauré les fichiers innodb dans le dossier mail/var/lib/mysql. Maintenant que j'ai, cependant, ces identifiants de tablespace ne sont pas alignés. Je ne sais pas comment les éditer ou si c'est même le moyen de le résoudre. J'aimerais qu'il y ait un moyen automatisé de les corriger!

7
Aurelius

Bon, voilà. Donc, vous devez faire une purge complète de mysql. Ne cherchez même pas à essayer de passer à mariadb, 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é par la suite que c’était parce que je n’utilisais pas mariadb en tant que root. Pour une raison quelconque, si vous avez installé mariadb, 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*

Supprimez ensuite tous les dossiers liés à mysql (assurez-vous de disposer déjà d'une sauvegarde sécurisée de l'intégralité des dossiers/var/lib/mysql).

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

Puis réinstallez mysql-server. Si cela échoue avec l'erreur de dépendance stupide, faites

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

(ou l'inverse, je ne m'en souviens plus maintenant) puis courez

Sudo apt-get install mysql-server 

encore et laissez-le finir de mettre en place. Arrêtez le serveur mysql avec

Sudo systemctl stop mysql

Copiez ensuite JUSTE les dossiers de la base de données (et tout leur contenu) dans/var/lib/mysql. Ensuite, copiez également ib * dans/var/lib/mysql (il s’agit du 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 

Editez /etc/mysql/my.cnf et ajoutez innodb_force_recovery=5 à la section [mysqld] (vous devrez peut-être ajouter [mysqld]). Maintenant, lancez à nouveau mysql avec systemctl start mysql. Si vous examinez /var/log/mysql/error.log, vous risquez toujours de rencontrer des erreurs. Cependant, essayez de vous lancer dans une invite avec

mysql -u root -p

Si vous êtes capable de le démarrer, génial. Sinon, jetez un autre regard sur systemctl status mysql.service et voyez ce qui est écrit. Ce pourrait être une question de permisssions. Si vous pouviez enfin entrer dans une invite, faites immédiatement

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

afin que nous puissions obtenir un vidage en clair de cette base de données. Maintenant que nous avons une base de données complète des bases de données importantes, nous devons refaire toutes les premières étapes (du moins, je l’ai fait, pour être sûr ... j’ai pu démarrer WordPress à ce stade. mais je ne pouvais pas me connecter). Donc, refaites les premières étapes de nettoyage, supprimez tous les répertoires mysql après la désinstallation de mysql-server. Réinstaller, mais cette fois, lancez

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

Et vous devriez être en or! Vous devrez peut-être recréer les bases de données (CREATE DATABASE databasename;). N'oubliez pas de recréer l'utilisateur qui était propriétaire de cette base de données auparavant (si vous avez oublié, consultez votre /var/www/html/wp-config.php ou partout où votre wp-config.php est pour les détails).

5
Aurelius