Apakah mungkin untuk mengembalikan database mysql dari folder / var / lib / mysql / database?

9

Karena mimpi buruk yang entah bagaimana menjadi nyata, instalasi mysql saya akhirnya diinstal ulang. Saya tidak bisa memulai mysql sebelum menginstal ulang, jadi saya tidak bisa menggunakan mysqldump untuk melakukan pencadangan yang tepat. Namun saya menyalin / var / lib / mysql ke tempat yang aman. Mencoba untuk rsync folder database kembali ke lokasi lama mereka tidak berfungsi - baik itu berfungsi, tapi kemudian wordpress mengalami kehancuran, bahkan dengan izin yang diperbaiki. Jika saya membuat database itu secara manual dan kemudian rsync, mysql tidak akan memulai.

Apakah mungkin mengembalikan folder ini?

EDIT: Saya sekarang memilikinya sehingga saya bisa melihat folder sementara di prompt mysql. Saya dapat MENGGUNAKAN database itu, tetapi mencoba SELECT * FROM wp_posts; memberi saya

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

Terlepas dari kenyataan itu

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)

Jadi jelas ada sesuatu tentang database ini yang hilang mysql, namun ini adalah versi yang sama persis mysql yang saya gunakan sebelumnya.

EDIT 2: Akhirnya mulai pergi ke suatu tempat, tapi aku jauh di dalam lubang kelinci dan aku butuh pembantu innodb di sini ... sekarang mysql gagal memulai dengan ini:

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!

Alasan saya tidak bisa membaca dari tabel adalah karena saya tidak mengembalikan file innodb ke folder mail / var / lib / mysql. Sekarang saya sudah memiliki, tablespace id ini tidak berbaris. Saya tidak tahu bagaimana cara mengeditnya atau apakah itu cara untuk menyelesaikannya. Saya berharap ada cara otomatis untuk memperbaikinya!

Aurelius
sumber

Jawaban:

6

Baiklah, ini dia. Jadi, Anda perlu melakukan pembersihan penuh mysql. Jangan repot-repot mencoba untuk beralih ke mariadb pada saat ini, itu tidak akan berfungsi (tidak dapat mengubah kata sandi root meskipun menghapus setiap file yang terkait dengan mysql).

[EDIT: Saya kemudian menyadari ini karena saya tidak menjalankan mariadb sebagai root. Untuk beberapa alasan, jika Anda telah memasang mariadb, Anda harus memulai prompt dengan sudo mysql -u root -p. Jadi secara teori, mariadb juga bisa digunakan untuk proses ini.]

Anda perlu melakukan instalasi baru mysql-server. Mulailah dengan menghapus semua yang terkait dengan mysql

sudo apt-get purge mysql-server* mariadb*

Kemudian hapus semua folder terkait mysql (pastikan Anda sudah memiliki cadangan yang aman dari seluruh folder / var / lib / mysql).

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

Kemudian instal ulang mysql-server. Jika gagal dengan kesalahan ketergantungan konyol, lakukan

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

(Atau sebaliknya, tidak ingat sekarang) kemudian jalankan

sudo apt-get install mysql-server 

lagi dan biarkan selesai pengaturan. Hentikan server mysql dengan

sudo systemctl stop mysql

Kemudian salin HANYA folder database (dan semua isinya) kembali ke / var / lib / mysql. Kemudian juga salin ib * ke / var / lib / mysql juga (ini adalah kamus innodb dan file lainnya).

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

Pastikan untuk melakukannya

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

Edit /etc/mysql/my.cnf dan tambahkan innodb_force_recovery=5ke [mysqld]bagian (Anda mungkin perlu menambahkan [mysqld]). Sekarang mulai mysql lagi dengan systemctl start mysql. Jika Anda melihat /var/log/mysql/error.logAnda mungkin masih melihat kesalahan, namun coba masuk ke prompt dengan

mysql -u root -p

Jika Anda bisa memulainya, bagus. Jika tidak, lihat lagi status systemctl mysql.service dan lihat apa katanya. Mungkin masalah permisisi. Jika Anda akhirnya bisa masuk ke prompt, segera lakukan

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

jadi kita bisa mendapatkan dump bersih dari database itu. Sekarang kita memiliki dump bersih dari database penting, kita perlu mengulang beberapa langkah pertama di seluruh (setidaknya saya lakukan, untuk memastikan ... Saya dapat memulai WordPress pada saat ini tetapi saya tidak bisa login di). Jadi ulangi beberapa langkah pembersihan pertama, hapus semua direktori mysql setelah menghapus instalan mysql-server. Instal ulang, tetapi kali ini jalankan saja

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

Dan Anda harus menjadi emas! Anda mungkin perlu membuat ulang basis data ( CREATE DATABASE databasename;) Jangan lupa untuk membuat ulang pengguna yang memiliki basis data itu sebelumnya (jika Anda lupa, lihat di /var/www/html/wp-config.php atau di mana pun lain wp-config.php Anda untuk detailnya).

Aurelius
sumber
1
lihat file per tabel dan mesin innodb, Anda mungkin menyukainya ;-)
s1mmel
1
Terima kasih banyak! Namun saya harus mengatur innodb_force_recovery=6di /etc/mysql/my.cnf untuk masuk ke MySQL prompt.
tamu
1
Terima kasih banyak!! Saya harus menghapus file log beberapa kali untuk mendapatkan server untuk memulai, tetapi setelah itu berhasil!
Eric F.