Khôi phục cơ sở dữ liệu MySQL từ thư mục dữ liệu không có ibdata1 từ các tệp ibd


15

Thư mục WAMP của tôi vô tình bị xóa bởi người dùng khác. Chỉ có thư mục dữ liệu trong MySQLis có sẵn. Và, trong đó chỉ có các thư mục cơ sở dữ liệu (các thư mục trong "\ bin \ mysql \ mysql5.6.12 \ data \" với tên của cơ sở dữ liệu) có sẵn. Tất cả các tệp bao gồm " ibdata1 " trong thư mục gốc của "\ bin \ mysql \ mysql5.6.12 \ data \" cũng bị xóa.

Các thư mục cơ sở dữ liệu chỉ chứa các tệp có phần mở rộng bên dưới.

* .frm, * .ibd

và tệp "db.opt".

Làm thế nào các cơ sở dữ liệu có thể được phục hồi?

Tôi đã cố gắng phục hồi bdata1. Nhưng, không thể lấy lại. Và, một số cơ sở dữ liệu cũng chứa MYISAM.

Câu trả lời:


16

MyISAM

Đối với bảng MyISAM mydb.mytable, bạn nên có ba tệp

  • \bin\mysql\mysql5.6.12\data\mydb\mytable.frm
  • \bin\mysql\mysql5.6.12\data\mydb\mytable.MYD
  • \bin\mysql\mysql5.6.12\data\mydb\mytable.MYI

Chúng phải có thể truy cập dưới dạng bảng vì mỗi tệp chứa dữ liệu cần thiết, siêu dữ liệu và thông tin chỉ mục. Chung, họ tạo thành bảng. Không có mecahnism công cụ lưu trữ bên ngoài để truy cập.

InnoDB

Hãy xem Đại diện hình ảnh này của InnoDB

Kiến trúc InnoDB

Điều duy nhất gắn ibdata1 vào các .ibdtệp là từ điển dữ liệu.

Nhiệm vụ của bạn, nếu bạn quyết định chấp nhận nó, là tạo từng bảng và trao đổi trong .ibd

Trước khi bạn làm bất cứ điều gì, hãy tạo một bản sao đầy đủ của "\ bin \ mysql \ mysql5.6.12 \ data" cho người khác

Đây là một mẫu

Giả sử bạn có một cơ sở dữ liệu mydbvới bảng mytable. Điều này có nghĩa là

  • Bạn có thư mục \bin\mysql\mysql5.6.12\data\mydb
  • Trong thư mục đó, bạn có
    • mytable.frm
    • mytable.ibd

Bạn cần có .frm. Nếu bạn nhìn vào bài viết của tôi, làm thế nào có thể trích xuất lược đồ bảng từ chỉ tệp .frm? , bạn có thể tải xuống một tiện ích MySQL có thể tạo SQL cần thiết để tạo bảng.

Bây giờ bạn nên làm như sau

  • Di chuyển mytable.ibdđến\bin\mysql\mysql5.6.12\data
  • Chạy SQL để tạo bảng InnoDB
  • Đăng nhập vào mysql và chạy ALTER TABLE mydb.mytable DISCARD TABLESPACE;(Điều này sẽ xóa \bin\mysql\mysql5.6.12\data\mydb\mytable.ibd)
  • Sao chép \bin\mysql\mysql5.6.12\data\mytable.ibdvào\bin\mysql\mysql5.6.12\data\mydb
  • Đăng nhập vào mysql và chạy ALTER TABLE mydb.mytable IMPORT TABLESPACE;(Điều này sẽ đăng ký \bin\mysql\mysql5.6.12\data\mydb\mytable.ibdvào từ điển dữ liệu)

Sau này, bảng mydb.mytablenên có thể truy cập đầy đủ. Bạn có thể kiểm tra khả năng truy cập đó bằng cách chạy đơn giản:

SELECT * FROM mydb.mytable LIMIT 10;

Hãy thử một lần !!!

UỐNG (Phục hồi dữ liệu Kết hợp kiến ​​thức cần thiết) Có trách nhiệm


Để hoàn thành câu trả lời tuyệt vời này, đối với innodb, bạn sẽ cần xóa mọi ràng buộc FK tham chiếu bảng trước khi loại bỏ vùng bảng của nó. Sau khi nhập, bạn nên tạo lại FK.
SebaGra

sau khi nhập không gian bảng, information_schema.key_column_usage(có thể cả các bảng khác) sẽ không trả lại dữ liệu đầu tiên, selectdo đó bạn phải thực hiện ít nhất một truy vấn và đợi vài giây trước khi truy vấn tiếp theo có thể hoạt động. (mysql Ver 14,14 Phân phối 5.7.19, cho linux-glibc2.12 (x86_64) bằng cách sử dụng trình bao bọc EditLine)
user3338098
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.