2008-09-22 39 views
9

Tôi phải khôi phục cơ sở dữ liệu đã vô tình DROPped trong MySQL 5.0. Từ kiểm tra các tập tin sao lưu, tôi chỉ có vẻ có các tập tin .FRM để giữ dữ liệu cơ sở dữ liệu.Cơ sở dữ liệu MySQL InnoDB khôi phục

Bất cứ ai có thể tư vấn cho dù đây là tất cả những gì tôi cần để thực hiện khôi phục/nhập lại cơ sở dữ liệu từ bản sao lưu hoặc có các tệp khác mà tôi phải có để hoàn tất việc này không?

Trả lời

14

tệp .frm không phải là tệp dữ liệu, chúng chỉ lưu trữ "thông tin từ điển dữ liệu" (xem MySQL manual). InnoDB lưu trữ dữ liệu của nó trong các tệp ib_logfile *. Đó là những gì bạn cần để thực hiện sao lưu/khôi phục. Để biết thêm chi tiết, xem here.

+0

InnoDB yêu cầu tệp ibdata, ib_logfile * và/hoặc * .ibd ngoài tệp * .frm. – silfreed

+0

nếu bạn chỉ có tệp ib_logfile * và .frm (cùng với bản sao lưu cũ)? bất kỳ cơ hội nào để phục hồi trong kịch bản đó? hoặc bạn cần ibdata để phục hồi bất cứ điều gì cả? – eglasius

6

Ồ, tôi ... bạn đang gặp sự cố. Tắt cơ sở dữ liệu. Sao lưu tệp innodb. Xin cầu nguyện rằng bạn KHÔNG làm gì sau khi bạn bỏ cơ sở dữ liệu.

Những người ở Percona (bao gồm tác giả của MySQL Performance Blog) sẽ có thể giúp bạn: Percona emergency support.

Nếu bạn tự mạo hiểm, hãy mang theo bên mình: Data Recovery Toolkit for Innodb.

Hậu cần của nó? Bạn phải đọc tất cả các trang (trang thuật ngữ máy tính ... khối 16k trong trường hợp Innodb) và xây dựng lại dữ liệu của bạn theo cách đó. Công việc rất thấp (chúng tôi đang nói mở trình soạn thảo hex của bạn và bắt đầu đếm byte nếu bộ công cụ không làm điều đó cho bạn), và nếu bạn không phải là lập trình viên có kinh nghiệm, bạn sẽ bị tổn thương .

7

Khôi phục InnoDB: (giả sử thư mục dữ liệu của bạn là C: \ ProgramData \ MySQL \ MySQL Server 5.5 \ data)

  1. Sao chép các thư mục trong cơ sở dữ liệu (đặt tên theo tên cơ sở dữ liệu) bạn muốn khôi phục tới C: \ ProgramData \ MySQL \ MySQL Server 5.5 \ dữ liệu
  2. Sao chép 3 tệp ibdata vào thư mục dữ liệu cũ. (C: \ ProgramData \ MySQL \ MySQL Server 5.5 \ data)

    _ib_logfile0 
    _ib_logfile1 
    _ibdata1 
    
  3. Lấy kích thước của _ib_logfile0 trong MB (nó phải giống như _ib_logfile1) bởi File Nhấp chuột phải -> Properties

  4. chỉnh sửa file mysql cấu hình (mysql \ bin \ my.ini) cho innodb_log_file_size = 343M để được chính xác các tập tin kích thước ibdata

  5. Run

    mysqld --defaults-file = mysql \ bin \ my.ini --standalone giao diện điều khiển --innodb_force_recovery = 6

  6. Bây giờ dữ liệu của bạn nên trở lại trong cơ sở dữ liệu của bạn.Xuất chúng bằng cách sử phpmysql hoặc bất kỳ công cụ khác

+0

không hoạt động với tôi - trong phpMyAdmin tôi có thể thấy các bảng InnoDb, nhưng không thể truy cập chúng –

+0

Bước 3/4 không chắc chắn liệu chúng có làm được gì không. Đã phải loại bỏ các tập tin theo thứ tự cho nó để thực sự khởi động lại mysql. Không chắc chắn bước 5 nào ... Nhưng bước 1,2,5 và khởi động lại mysql dường như hoạt động! – msponagle

+0

Giống như @msponagle nói. Tôi không thể hoàn thành tất cả các bước nhưng defenetly bước 1, 2, có thể 3 sau đó khởi động lại dịch vụ và nếu nó sẽ không bắt đầu cố gắng khởi động lại máy. Điều đó làm việc cho tôi. – ingkevin

-2

Các giải pháp chi tiết, bạn có thể tìm thấy ở đây:

http://www.unilogica.com/mysql-innodb-recovery/ (Điều Tiếng Bồ Đào Nha)

Bên cạnh những lá cờ của innodb_force_recovery, tôi thấy một giải pháp khác: innodb_file_per_table, chia tách các bảng InnoDB trong mỗi tệp như bảng MyISAM.

Trong khôi phục sự cố, bạn có thể mất ít dữ liệu hơn trong một tệp ibdata1.

Các vấn đề liên quan