Hướng dẫn khôi phục InnoDB MYSQL từ ibdata và .FRM

May 6th, 2014 by No comments | Last Modified: May 6th, 2014

Hướng dẫn này giúp bạn làm thế nào để khôi phục lại các bảng MySQL khi tất cả hay một số các bảng bị mất, hoặc khi MySQL không tải dữ liệu bảng.

Một trong những lý do cho điều này xảy ra là khi bảng dữ liệu bị hỏng.

Trong trường hợp cụ thể này, khi bạn kết nối với các máy chủ cơ sở dữ liệu MySQL, bạn không thể nhìn thấy một thêm bảng, như họ đang mất tích.

Trong trường hợp này, log file của MySQL chứa các thông điệp sau đây:

InnoDB: Error: log file ./ib_logfile0 is of different size 0 50331648 bytes
InnoDB: than specified in the .cnf file 0 5242880 bytes!
[ERROR] Plugin ‘InnoDB’ init function returned error.
[ERROR] Plugin ‘InnoDB’ registration as a STORAGE ENGINE failed.
[ERROR] Unknown/unsupported storage engine: InnoDB
[ERROR] Aborting

Phương pháp làm dưới đây sẽ làm việc chỉ cho cơ sở dữ liệu InnoDB.

Lưu ý: Trước khi bạn làm bất cứ điều gì, bạn lên tạo một bản sao lưu của tất cả các tập tin MySQL và cơ sở dữ liệu hiện tại, và giữ cho nó một nơi nào đó an toàn.

drwx—— 2 mysql mysql 4096 Oct 11 2012 performance_schema
drwx—— 2 mysql mysql 4096 Dec 10 2012 ndbinfo
drwx–x–x 2 mysql mysql 4096 Dec 10 2012 mysql
-rw-rw—- 1 mysql mysql 56 Dec 19 2012 auto.cnf
drwx—— 2 mysql mysql 4096 Jul 30 2013 bugs
-rw-r—– 1 mysql mysql 50331648 Mar 18 10:35 ib_logfile0
-rw-r—– 1 mysql mysql 50331648 Apr 22 2013 ib_logfile1
-rw-r—– 1 mysql mysql 35651584 Mar 18 10:35 ibdata1

  • Ibdata1-các tập tin này là không gian bàn hệ thống InnoDB, chứa nhiều InnoDB bảng và các chỉ số liên kết.
  • .frm-tổ chức thông tin siêu dữ liệu cho tất cả các bảng MySQL. Những tập tin nằm trong thư mục của cơ sở dữ liệu MySQL tương ứng. (ví dụ, bên trong “lỗi” thư mục)
    ib_logfile
  • tất cả dữ liệu thay đổi được viết lưu vào các tập tin log. Điều này là tương tự như các khái niệm bản ghi lưu trữ chúng tôi tìm thấy trong các cơ sở dữ liệu RDBMS.
Sao chép các tập tin
Để khôi phục dữ liệu từ các tập tin trên, đầu tiên ta phải tắt MySQL.

service mysqld stop

Sao chép các tập tin ibdata, và các file dữ liệu vào folder khác. Chúng ta sẽ sử dụng chúng để khôi phục databas lỗi của chúng ta. Trong trường hợp này, chúng ta sẽ copy nó đến /tmp.

cp –r ibdata* ib_logfile* /tmp

cp –r schema_name/ /tmp/schema_name/

Khởi động lại MSQL server

service mysqld start

Restore the Data

Tiếp theo, khôi phục các bảng dữ liệu như được diễn tả bên dưới.

Trong tập tin cấu hình my.cnf, thiết lập giá trị của các tham số sau đây để kích thước hiện tại của các tập tin ib_logfile0. Trong ví dụ sau đây, mình đã đặt nó vào 48M, vì đó là kích thước tôi nhìn thấy cho các tập tin ib_logfile0 khi mình đã làm “ls -lh ib_logfile0″

innodb_log_file_size=48M

Lưu ý: Kích thước ib_logfile và ib_logfile1 phải giống nhau.
Sao chép ibdata vào vị trí tương ứng bên trong thư mục mysql

cp –r /tmp/ibdata* /var/lib/mysql/

Tạo một folder rỗng bên trong folder mysql, folder này có tên trùng với tên của database bạn đang cố gắng sửa lỗi. Bạn copy tất cả các file .frm trong folder bằng lệnh:

cp –r /tmp/ib_logfile* /var/lib/mysql/
cp –r /tmp/schema_name/*.frm /var/lib/mysql/schema_name/

Với schema_name là tên database bạn cần sửa lỗi.

KHởi động lại Mysql server

service mysqld restart

Bình luận của bạn

Bạn vui lòng sử dụng tên thật hay nickname và không sử dụng từ khóa trong phần điền tên. Nếu vi phạm, mình xin phép không cho hiện comment trên site. Cảm ơn bạn.



:xauho: :roll: :oops: :nono: :mrgreen: :mofat: :macf: :data: :cry: :claps: :bye: :batfa: :ZZZM: :D ::tholoz: ::meney: ::kiss:: ::fulltime: ::cuoiroile:: ::chugun: ::chenhca: ::cave: ::bank: ::CRTTS: :-| :-D :-? 8)
KHUYẾN MẠI ĐẶC BIỆT ! VULTR Đang Tặng 52 USD Cho Tài Khoản Mới ! GET COUPON NOW
Hello. Add your message here.