Có thể khôi phục cơ sở dữ liệu mysql từ thư mục / var / lib / mysql / cơ sở dữ liệu không?


9

Do một cơn ác mộng bằng cách nào đó đã trở thành sự thật, cài đặt mysql của tôi cuối cùng đã được cài đặt lại. Tôi không thể khởi động mysql trước khi cài đặt lại, vì vậy tôi không thể sử dụng mysqldump để thực hiện sao lưu thích hợp. Tuy nhiên tôi đã sao chép / var / lib / mysql đến nơi an toàn. Cố gắng để đồng bộ hóa các thư mục cơ sở dữ liệu trở lại các vị trí cũ của chúng không hoạt động - đó cũng là một loại công việc, nhưng sau đó wordpress có một sự thay đổi, ngay cả khi các quyền được sửa. Nếu tôi tạo cơ sở dữ liệu đó theo cách thủ công và sau đó rsync nó, mysql sẽ không bắt đầu.

Có thể khôi phục thư mục này bằng cách nào đó?

EDIT: Bây giờ tôi có nó để tôi có thể thấy thư mục trong khi ở dấu nhắc mysql. Tôi có thể sử dụng cơ sở dữ liệu đó, nhưng thử CHỌN * TỪ wp_posts; đưa cho tôi

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

Mặc dù thực tế là

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)

Vì vậy, rõ ràng có một cái gì đó về cơ sở dữ liệu này mà mysql bị thiếu, tuy nhiên đây là phiên bản chính xác của mysql mà tôi đang sử dụng trước đây.

EDIT 2: Cuối cùng bắt đầu đi đến một nơi nào đó, nhưng tôi đang ở sâu trong hố thỏ và tôi cần một người trợ giúp innodb ở đây ... bây giờ mysql không bắt đầu với điều này:

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!

Lý do tôi không thể đọc được từ các bảng là vì tôi đã không khôi phục các tệp innodb vào thư mục mail / var / lib / mysql. Tuy nhiên, bây giờ tôi có các id không gian bảng này không xếp hàng. Tôi không biết làm thế nào để chỉnh sửa chúng hoặc nếu đó thậm chí là cách để giải quyết nó. Tôi ước có một cách tự động để sửa những thứ này!

Câu trả lời:


6

Được rồi, đi đây. Vì vậy, bạn cần phải thực hiện một cuộc thanh trừng đầy đủ của mysql. Đừng bận tâm thậm chí cố gắng chuyển sang mariadb vào thời điểm này, nó chỉ đơn giản là không hoạt động (không thể thay đổi mật khẩu gốc mặc dù đã xóa mọi tệp liên quan đến mysql).

[EDIT: Sau đó tôi nhận ra điều này là do tôi không chạy mariadb với quyền root. Vì một số lý do, nếu bạn đã cài đặt mariadb, bạn phải bắt đầu một dấu nhắc với sudo mysql -u root -p. Vì vậy, trong lý thuyết mariadb cũng nên hoạt động cho quá trình này.]

Bạn cần cài đặt mới máy chủ mysql. Bắt đầu bằng cách loại bỏ mọi thứ liên quan đến mysql với

sudo apt-get purge mysql-server* mariadb*

Sau đó xóa tất cả các thư mục liên quan đến mysql (đảm bảo bạn đã có bản sao lưu an toàn cho toàn bộ thư mục / var / lib / mysql).

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

Sau đó cài đặt lại máy chủ mysql. Nếu nó không thành công với lỗi phụ thuộc ngớ ngẩn, hãy làm

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

(hoặc ngược lại, không thể nhớ bây giờ) sau đó chạy

sudo apt-get install mysql-server 

một lần nữa và để cho nó hoàn thành thiết lập. Dừng máy chủ mysql với

sudo systemctl stop mysql

Sau đó sao chép CHỈ các thư mục cơ sở dữ liệu (và tất cả nội dung của chúng) trở lại / var / lib / mysql. Sau đó, cũng sao chép ib * vào / var / lib / mysql (đây là từ điển innodb và các tệp khác).

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

Hãy chắc chắn để làm

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

Chỉnh sửa /etc/mysql/my.cnf và thêm innodb_force_recovery=5vào [mysqld]phần (bạn có thể cần thêm [mysqld]). Bây giờ bắt đầu lại mysql với systemctl start mysql. Nếu bạn nhìn vào /var/log/mysql/error.logbạn vẫn có thể thấy lỗi, tuy nhiên hãy thử vào một dấu nhắc với

mysql -u root -p

Nếu bạn có thể khởi động nó, thật tuyệt. Nếu không, hãy xem xét lại trạng thái systemctl mysql.service và xem nó nói gì. Nó có thể là một vấn đề cho phép. Nếu cuối cùng bạn đã có thể nhận được một lời nhắc, ngay lập tức làm

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

vì vậy chúng ta có thể có được một bãi chứa sạch của cơ sở dữ liệu đó. Bây giờ chúng ta đã có một cơ sở dữ liệu quan trọng, chúng ta cần làm lại vài bước đầu tiên (ít nhất là tôi đã làm, để chắc chắn ... Tôi đã có thể khởi động WordPress vào thời điểm này nhưng tôi không thể đăng nhập trong). Vì vậy, làm lại vài bước làm sạch đầu tiên, loại bỏ tất cả các thư mục mysql sau khi gỡ cài đặt máy chủ mysql. Cài đặt lại, nhưng lần này chỉ cần chạy

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

Và bạn nên là vàng! Bạn có thể cần phải tạo lại cơ sở dữ liệu ( CREATE DATABASE databasename;) Đừng quên tạo lại người dùng sở hữu cơ sở dữ liệu đó trước đó (nếu bạn quên, hãy tìm trong /var/www/html/wp-config.php hoặc bất cứ nơi nào khác wp-config.php của bạn là để biết chi tiết).


1
hãy xem các tệp trên mỗi bảng và công cụ innodb, bạn có thể thích nó ;-)
s1mmel

1
Cảm ơn rất nhiều! Tuy nhiên, tôi đã phải thiết lập innodb_force_recovery=6/etc/mysql/my.cnf để vào dấu nhắc của MySQL.
khách

1
Cảm ơn rất nhiều!! Tôi đã phải xóa các tệp nhật ký một vài lần để máy chủ khởi động, nhưng sau đó nó đã hoạt động!
Eric F.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.