È possibile ripristinare un database mysql dalla cartella / var / lib / mysql / database?


9

A causa di un incubo che in qualche modo è diventato reale, la mia installazione di mysql ha finito per essere reinstallata. Non è stato possibile avviare mysql prima della reinstallazione, quindi non è stato possibile utilizzare mysqldump per eseguire un backup corretto. Ho comunque copiato / var / lib / mysql in un posto sicuro. Cercare di risincronizzare le cartelle del database nelle loro vecchie posizioni non funziona - beh, in un certo senso funziona, ma WordPress ha un tracollo, anche con i permessi corretti. Se creo manualmente quel database e quindi lo risincronizzo, mysql non si avvia.

È possibile ripristinare questa cartella in qualche modo?

EDIT: ora ce l'ho in modo che io possa vedere la cartella mentre nel prompt di mysql. Posso UTILIZZARE quel database, ma provando SELECT * FROM wp_posts; mi da

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

Nonostante ciò

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)

Quindi c'è ovviamente qualcosa in questo database che manca a mysql, tuttavia questa è esattamente la stessa versione di mysql che stavo usando prima.

EDIT 2: Finalmente sto iniziando ad arrivare da qualche parte, ma sono in fondo alla tana del coniglio e ho bisogno di un aiuto innodb qui ... ora mysql non riesce a iniziare con questo:

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!

Il motivo per cui non sono riuscito a leggere dalle tabelle è perché non ho ripristinato i file innodb nella cartella mail / var / lib / mysql. Ora che ho, però, questi ID tablespace non sono in fila. Non ho idea di come modificarli o se questo è anche il modo di risolverlo. Vorrei che ci fosse un modo automatizzato per correggerli!

Risposte:


6

Bene, ecco qui. Quindi, devi fare una purga completa di mysql. Non preoccuparti nemmeno di provare a passare a mariadb a questo punto, semplicemente non funzionerà (impossibile cambiare la password di root nonostante elimini tutti i file relativi a mysql).

[EDIT: In seguito mi sono reso conto che questo non era perché non eseguivo mariadb come root. Per qualche motivo, se hai installato mariadb devi avviare un prompt con sudo mysql -u root -p. Quindi in teoria mariadb dovrebbe funzionare anche per questo processo.]

Devi fare una nuova installazione di mysql-server. Inizia rimuovendo tutto ciò che riguarda mysql

sudo apt-get purge mysql-server* mariadb*

Quindi rimuovere tutte le cartelle relative a mysql (assicurarsi di disporre di un backup sicuro dell'intera cartella / var / lib / mysql).

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

Quindi reinstallare mysql-server. Se fallisce con l'errore sciocco di dipendenza, fallo

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

(o viceversa, non ricordo ora) quindi corri

sudo apt-get install mysql-server 

di nuovo e lascia terminare la configurazione. Arrestare il server mysql con

sudo systemctl stop mysql

Quindi copiare SOLO le cartelle del database (e tutto il loro contenuto) nuovamente in / var / lib / mysql. Quindi copia anche ib * in / var / lib / mysql (questi sono il dizionario innodb e altri file).

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

Assicurati di fare

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

Modifica /etc/mysql/my.cnf e aggiungi innodb_force_recovery=5alla [mysqld]sezione (potrebbe essere necessario aggiungere [mysqld]). Ora ricomincia mysql con systemctl start mysql. Se guardi /var/log/mysql/error.logpotresti ancora vedere degli errori, tuttavia prova a entrare in un prompt con

mysql -u root -p

Se riesci ad avviarlo, fantastico. In caso contrario, dai un'occhiata allo stato di systemctl mysql.service e guarda cosa dice. Potrebbe essere un problema di permissioni. Se sei stato finalmente in grado di entrare in un prompt, fallo immediatamente

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

così possiamo ottenere un dump pulito di quel database. Ora che abbiamo un dump pulito dei database importanti, dobbiamo ripetere i primi passi dappertutto (almeno, per essere sicuro ... Sono stato in grado di avviare WordPress a questo punto ma non sono riuscito a accedere in). Quindi ripetere i primi passaggi di pulizia, rimuovere tutte le directory mysql dopo aver disinstallato mysql-server. Reinstalla, ma questa volta basta eseguire

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

E dovresti essere d'oro! Potrebbe essere necessario ricreare i database ( CREATE DATABASE databasename;) Non dimenticare di ricreare l'utente che possedeva quel database prima (se hai dimenticato, cerca nel tuo /var/www/html/wp-config.php o ovunque altrimenti il ​​tuo wp-config.php è per i dettagli).


1
dai un'occhiata ai file per tabella e al motore innodb, ti potrebbe piacere ;-)
s1mmel,

1
Molte grazie! Tuttavia, ho dovuto impostare innodb_force_recovery=6in /etc/mysql/my.cnf per accedere al prompt di MySQL.
ospite

1
Grazie mille!! Ho dovuto eliminare i file di registro un paio di volte per avviare il server, ma dopo ha funzionato!
Eric F.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.