É possível restaurar um banco de dados mysql da pasta / var / lib / mysql / database?

8

Devido a um pesadelo que de alguma forma se tornou real, minha instalação do mysql acabou sendo reinstalada. Eu não consegui iniciar o mysql antes da reinstalação, então não pude usar o mysqldump para fazer um backup adequado. No entanto, copiei / var / lib / mysql para um local seguro. Tentar sincronizar novamente as pastas do banco de dados em seus locais antigos não funciona - bem, funciona, mas o wordpress tem um colapso, mesmo com as permissões corrigidas. Se eu criar esse banco de dados manualmente e depois o sincronizar novamente, o mysql não será iniciado.

É possível restaurar esta pasta de alguma forma?

EDIT: Agora eu tenho isso para que eu possa ver a pasta enquanto estiver no prompt do mysql. Eu posso usar esse banco de dados, mas tentando SELECT * FROM wp_posts; me dá

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

Apesar do fato 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)

Então, obviamente, há algo nesse banco de dados que está faltando no mysql, no entanto, essa é exatamente a mesma versão do mysql que eu estava usando antes.

EDIT 2: Finalmente começando a chegar a algum lugar, mas estou no fundo do buraco do coelho e preciso de um ajudante innodb aqui ... agora o mysql falha ao começar com isso:

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!

O motivo pelo qual não consegui ler as tabelas foi porque não restaurei os arquivos innodb na pasta mail / var / lib / mysql. Agora que eu tenho, porém, esses IDs de espaço de tabela não estão alinhados. Não faço ideia de como editá-los ou se é esse o caminho para resolvê-lo. Eu gostaria que houvesse uma maneira automatizada de corrigir isso!

Aurelius
fonte

Respostas:

5

Tudo bem, aqui vai. Então, você precisa fazer uma limpeza completa do mysql. Não se preocupe em tentar mudar para o mariadb neste momento, ele simplesmente não funcionará (incapaz de alterar a senha do root, apesar de excluir todos os arquivos relacionados ao mysql).

[EDIT: Mais tarde, percebi que era porque não estava executando o mariadb como root. Por alguma razão, se você tiver o mariadb instalado, deverá iniciar um prompt com sudo mysql -u root -p. Portanto, em teoria, o mariadb também deve funcionar nesse processo.]

Você precisa fazer uma nova instalação do mysql-server. Comece removendo tudo relacionado ao mysql com

sudo apt-get purge mysql-server* mariadb*

Em seguida, remova todas as pastas relacionadas ao mysql (verifique se você já possui um backup seguro de todas as pastas / var / lib / mysql).

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

Em seguida, reinstale o mysql-server. Se falhar com o erro de dependência boba, faça

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

(ou vice-versa, não lembro agora) e execute

sudo apt-get install mysql-server 

novamente e deixe terminar de configurar. Pare o servidor mysql com

sudo systemctl stop mysql

Em seguida, copie APENAS as pastas do banco de dados (e todo o seu conteúdo) para / var / lib / mysql. Copie também ib * para / var / lib / mysql (estes são o dicionário innodb e outros arquivos).

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

Certifique-se de fazer

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

Edite /etc/mysql/my.cnf e adicione innodb_force_recovery=5à [mysqld]seção (pode ser necessário adicionar [mysqld]). Agora inicie o mysql novamente com systemctl start mysql. Se você observar /var/log/mysql/error.logque ainda poderá encontrar erros, tente entrar em um prompt com

mysql -u root -p

Se você é capaz de iniciá-lo, ótimo. Caso contrário, dê uma outra olhada no status do systemctl mysql.service e veja o que diz. Pode ser um problema de permissão. Se você finalmente conseguiu entrar em um prompt, imediatamente

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

para que possamos obter um despejo limpo desse banco de dados. Agora que temos um despejo limpo dos bancos de dados importantes, precisamos refazer todos os primeiros passos (pelo menos eu fiz, para ter certeza ... Eu era capaz de iniciar o WordPress neste momento, mas não conseguia registrar no). Então refaça as primeiras etapas de limpeza, remova todos os diretórios do mysql após desinstalar o mysql-server. Reinstale, mas desta vez apenas execute

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

E você deveria ser dourado! Pode ser necessário recriar os bancos de dados ( CREATE DATABASE databasename;) Não se esqueça de recriar o usuário que possuía esse banco de dados antes (se você esqueceu, consulte seu /var/www/html/wp-config.php ou qualquer outro local caso contrário, seu wp-config.php é para detalhes).

Aurelius
fonte
11
dar uma olhada em arquivos por tabelas e o motor InnoDB, você pode gostar dele ;-)
s1mmel
11
Muito obrigado! No entanto, eu tive que definir innodb_force_recovery=6no /etc/mysql/my.cnf para entrar no prompt do MySQL.
guest
11
Graças um milhão !! Eu tive que excluir os arquivos de log algumas vezes para iniciar o servidor, mas depois disso funcionou!
Eric F.