¿Es posible restaurar una base de datos mysql desde la carpeta / var / lib / mysql / database?

9

Debido a una pesadilla que de alguna manera se hizo realidad, mi instalación de mysql terminó siendo reinstalada. No podía iniciar mysql antes de la reinstalación, por lo que no podía usar mysqldump para hacer una copia de seguridad adecuada. Sin embargo, copié / var / lib / mysql en un lugar seguro. Intentar sincronizar las carpetas de la base de datos en sus ubicaciones anteriores no funciona, bueno, funciona, pero Wordpress tiene una crisis, incluso con los permisos corregidos. Si creo esa base de datos manualmente y luego la sincronizo, mysql no se iniciará.

¿Es posible restaurar esta carpeta de alguna manera?

EDITAR: ahora lo tengo para poder ver la carpeta mientras estoy en el indicador de mysql. Puedo UTILIZAR esa base de datos, pero probando SELECT * FROM wp_posts; me da

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

A pesar de 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)

Obviamente, hay algo en esta base de datos que mysql falta, sin embargo, esta es exactamente la misma versión de mysql que estaba usando antes.

EDITAR 2: Finalmente comencé a llegar a algún lado, pero estoy en el fondo del conejo y necesito un ayudante innodb aquí ... ahora mysql no puede comenzar con esto:

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 razón por la que no pude leer de las tablas fue porque no restauré los archivos innodb en la carpeta mail / var / lib / mysql. Ahora que tengo, sin embargo, estos identificadores de espacio de tabla no se están alineando. No tengo idea de cómo editarlos o si esa es la forma de resolverlo. ¡Ojalá hubiera una forma automatizada de corregirlos!

Aurelio
fuente

Respuestas:

6

Muy bien, aquí va. Por lo tanto, debe hacer una purga completa de mysql. No se moleste en intentar cambiar a mariadb en este momento, simplemente no funcionará (no puede cambiar la contraseña de root a pesar de eliminar todos los archivos relacionados con mysql).

[EDITAR: más tarde me di cuenta de que esto se debía a que no estaba ejecutando mariadb como root. Por alguna razón, si tiene instalado mariadb, debe iniciar una solicitud con sudo mysql -u root -p. Entonces, en teoría, mariadb también debería funcionar para este proceso.]

Necesita hacer una nueva instalación de mysql-server. Comience eliminando todo lo relacionado con mysql con

sudo apt-get purge mysql-server* mariadb*

Luego, elimine todas las carpetas relacionadas con mysql (asegúrese de tener una copia de seguridad segura de todas las carpetas / var / lib / mysql).

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

Luego reinstale el servidor mysql. Si falla con el error de dependencia tonto, haga

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

(o al revés, no puedo recordar ahora) luego corre

sudo apt-get install mysql-server 

de nuevo y deja que termine de configurarse. Detenga el servidor mysql con

sudo systemctl stop mysql

Luego copie SOLO las carpetas de la base de datos (y todo su contenido) de nuevo a / var / lib / mysql. Luego también copie ib * a / var / lib / mysql también (estos son el diccionario innodb y otros archivos).

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

Asegúrate de hacer

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

Edite /etc/mysql/my.cnf y agréguelo innodb_force_recovery=5a la [mysqld]sección (es posible que deba agregar [mysqld]). Ahora comience mysql nuevamente con systemctl start mysql. Si observa, /var/log/mysql/error.loges posible que todavía vea errores, sin embargo, intente ingresar a un mensaje con

mysql -u root -p

Si puedes iniciarlo, genial. Si no, eche otro vistazo al estado de systemctl mysql.service y vea lo que dice. Puede ser un problema de permisos. Si finalmente pudo entrar en un aviso, haga inmediatamente

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

para que podamos obtener un volcado limpio de esa base de datos. Ahora que tenemos un volcado limpio de las bases de datos importantes, necesitamos rehacer los primeros pasos por completo (al menos lo hice, para estar seguro ... pude iniciar WordPress en este punto pero no pude iniciar sesión en). Así que rehaga los primeros pasos de limpieza, elimine todos los directorios de mysql después de desinstalar mysql-server. Vuelva a instalar, pero esta vez solo ejecute

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

¡Y deberías ser dorado! Es posible que deba volver a crear las bases de datos ( CREATE DATABASE databasename;) No olvide volver a crear el usuario que poseía esa base de datos antes (si lo ha olvidado, busque en su /var/www/html/wp-config.php o donde sea de lo contrario, su wp-config.php es para los detalles).

Aurelio
fuente
1
eche un vistazo a los archivos por tablas y al motor innodb, puede que le guste ;-)
s1mmel
1
¡Muchas gracias! Sin embargo, tuve que configurar innodb_force_recovery=6en /etc/mysql/my.cnf para acceder al indicador de MySQL.
invitado
1
¡¡Un millón de gracias!! Tuve que eliminar los archivos de registro un par de veces para que el servidor se iniciara, ¡pero después funcionó!
Eric F.