2009-05-18 35 views
154

Cách khôi phục một trong các cơ sở dữ liệu MySQL của tôi từ các tệp .myd, .myi, .frm?Cách khôi phục cơ sở dữ liệu MySQL từ các tệp .myd, .myi, .frm

+9

Mặc dù tôi đã trả lời điều này, nó thực sự thuộc về Serverfault. – derobert

+26

@chandrajeet bạn thực sự nên chấp nhận câu trả lời được bình chọn nhiều nhất. – Tower

+2

Hey chandrajeet, tại sao bạn không chấp nhận câu trả lời của derobert? Tôi xác nhận nó cũng làm việc cho tôi. Nó không phải dành cho bạn? http://stackoverflow.com/help/someone-answers – bostaf

Trả lời

5

Bạn có thể sao chép tệp vào thư mục thư mục con được đặt tên thích hợp của thư mục dữ liệu miễn là phiên bản chính xác của mySQL và bạn đã giữ lại tất cả các tệp được liên kết trong thư mục đó. Nếu bạn không có tất cả các tệp, tôi chắc chắn bạn sẽ gặp sự cố.

+0

Nếu tôi không có phiên bản MySQL giống CHÍNH XÁC, tôi phải làm gì? –

153

Nếu đây là các bảng MyISAM, sau đó plopping tệp .FRM, .MYD và .MYI vào thư mục cơ sở dữ liệu (ví dụ: /var/lib/mysql/dbname) sẽ làm cho bảng đó khả dụng. Nó không phải là cùng một cơ sở dữ liệu như chúng đến từ, cùng một máy chủ, cùng một phiên bản MySQL, hoặc cùng một kiến ​​trúc. Bạn cũng có thể cần thay đổi quyền sở hữu cho thư mục (ví dụ: chown -R mysql:mysql /var/lib/mysql/dbname)

Lưu ý rằng quyền (GRANT, v.v.) là một phần của cơ sở dữ liệu mysql. Vì vậy, chúng sẽ không được khôi phục cùng với các bảng; bạn có thể cần phải chạy GRANT báo cáo thích hợp để tạo người dùng, cung cấp cho truy cập, vv (Khôi phục cơ sở dữ liệu mysql là có thể, nhưng bạn cần phải cẩn thận với các phiên bản MySQL và bất kỳ chạy cần thiết của tiện ích mysql_upgrade.)

Trên thực tế , bạn có thể chỉ cần .RM (cấu trúc bảng) và .MYD (bảng dữ liệu), nhưng bạn sẽ phải sửa chữa bảng để xây dựng lại .MYI (chỉ mục).

Hạn chế duy nhất là nếu bạn hạ cấp, bạn nên kiểm tra ghi chú phát hành (và có thể chạy bảng sửa chữa). Phiên bản MySQL mới hơn có thêm các tính năng, tất nhiên.

[Mặc dù nó phải rõ ràng, nếu bạn trộn và khớp các bảng, tính toàn vẹn của các mối quan hệ giữa các bảng đó là vấn đề của bạn; MySQL sẽ không quan tâm, nhưng ứng dụng của bạn và người dùng của bạn có thể. Ngoài ra, phương pháp này không làm việc ở tất cả cho các bảng InnoDB. Chỉ MyISAM, nhưng xem xét các tệp bạn có, bạn có MyISAM]

+0

Điều này có thực sự hoạt động nếu không thêm các mục thích hợp vào bảng information_schema không? Tôi có nghĩa là MySQL cần phải biết để tìm những tập tin này phải không? – Zenshai

+3

Các bảng information_schema không thực sự tồn tại, chúng chỉ là các khung nhìn vào trạng thái cơ sở dữ liệu nội bộ. Xem http://dev.mysql.com/doc/refman/5.0/en/information-schema.html –

+4

Wow, tôi cảm thấy dơ bẩn, nhưng bỏ toàn bộ thư mục từ những gì tôi nghĩ là một bản cài đặt MySQL4 vào MySQL5.1 của tôi kỳ diệu tái tạo các bảng. Không khởi động lại hoặc bất cứ điều gì (trên cửa sổ). – Dave

7

Tôi nghĩ rằng .myi bạn có thể sửa chữa từ bên trong mysql.

Nếu bạn thấy các loại thông báo lỗi này từ MySQL: Cơ sở dữ liệu không thực thi được truy vấn (truy vấn) 1016: Không thể mở tệp: 'sometable.MYI'. (errno: 145) Lỗi Msg: 1034: Tệp khóa không chính xác cho bảng: 'sometable'. Cố gắng sửa chữa nó thenb bạn có thể có một bảng bị hỏng hoặc bị hỏng.

Bạn có thể kiểm tra và sửa chữa bàn từ một dấu nhắc mysql như thế này:

check table sometable; 
+------------------+-------+----------+----------------------------+ 
| Table | Op | Msg_type | Msg_text | 
+------------------+-------+----------+----------------------------+ 
| yourdb.sometable | check | warning | Table is marked as crashed | 
| yourdb.sometable | check | status | OK | 
+------------------+-------+----------+----------------------------+ 

repair table sometable; 
+------------------+--------+----------+----------+ 
| Table | Op | Msg_type | Msg_text | 
+------------------+--------+----------+----------+ 
| yourdb.sometable | repair | status | OK | 
+------------------+--------+----------+----------+ 

và bây giờ bảng của bạn nên được tốt:

check table sometable; 
+------------------+-------+----------+----------+ 
| Table | Op | Msg_type | Msg_text | 
+------------------+-------+----------+----------+ 
| yourdb.sometable | check | status | OK | 
+------------------+-------+----------+----------+ 
13

Một điều cần lưu ý:

Các Tệp .RM có cấu trúc bảng của bạn trong đó và cụ thể cho phiên bản MySQL của bạn.

Tệp .MYD KHÔNG dành riêng cho phiên bản, ít nhất không phải là phiên bản nhỏ.

Tệp .MYI là cụ thể, nhưng có thể được bỏ qua và được tạo lại với REPAIR TABLE như các câu trả lời khác nói.

Điểm của câu trả lời này là để cho bạn biết rằng nếu bạn có một bảng lược đồ của các bảng, thì bạn có thể sử dụng nó để tạo cấu trúc bảng, sau đó thay thế các tệp .MYD đó bằng bản sao lưu của bạn, xóa các tệp MYI và sửa chữa tất cả. Bằng cách này, bạn có thể khôi phục các bản sao lưu của mình sang một phiên bản MySQL khác hoặc di chuyển toàn bộ cơ sở dữ liệu của bạn mà không cần sử dụng mysqldump. Tôi đã tìm thấy điều này siêu hữu ích khi di chuyển cơ sở dữ liệu lớn.

23

Lưu ý rằng nếu bạn muốn xây dựng lại các tập tin MYI sau đó sử dụng đúng SỬA CHỮA TABLE là:

SỬA CHỮA TABLE sometable USE_FRM;

Nếu không, bạn có thể sẽ chỉ gặp lỗi khác.

10

Đơn giản! Tạo cơ sở dữ liệu giả (nói abc)

Sao chép tất cả các tệp .myd, .myi, .frm này vào mysql \ data \ abc trong đó mysql \ data \ là nơi .myd, .myi, .frm cho tất cả cơ sở dữ liệu được cất giữ.

Sau đó truy cập phpMyadmin, truy cập db abc và bạn tìm thấy cơ sở dữ liệu của mình.

+0

câu trả lời ngắn nhất và chính xác –

-2

Đối với những người có Windows XP và đã cài đặt máy chủ MySQL 5.5 - vị trí cho cơ sở dữ liệu là C: \ Documents and Settings \ Tất cả người dùng \ Application Data \ MySQL \ MySQL Server 5.5 \ dữ liệu, trừ khi bạn thay đổi vị trí trong giao diện cài đặt MySql Workbench.

+2

Câu hỏi đặt ra là khôi phục từ các loại tệp cụ thể, không phải nơi các tệp đó có thể được tìm thấy trên Windows XP MySQL 5.5. – Danpe

20

Tôi vừa phát hiện ra giải pháp cho việc này. Tôi đang sử dụng MySQL 5.1 hoặc 5.6 trên Windows 7.

  1. Sao chép tập tin .frmibdata1 từ tập tin cũ được đặt vào "C: \ Data Chương trình \ MySQL \ MSQLServer5.1 \ Data "
  2. Ngừng dụ SQL server trong trường hợp SQL hiện
  3. Chuyển đến datafolder nằm ở "C: Data \ Program \ MySQL \ MSQLServer5.1 \ Data"
  4. Dán thư mục ibdata1của cơ sở dữ liệu chứa s .frm tệp từ tệp bạn muốn khôi phục.
  5. Bắt đầu phiên bản MySQL.

Không cần phải định vị tệp .MYI và .MYD để khôi phục.

+0

Thực hiện theo các bước sau (sau khi mọi thứ khác không thành công) và sử dụng cấp 'innodb_force_recovery = 4' (không chắc chắn là cần thiết trong trường hợp này). Ơn Chúa! –

+6

FYI: 'ibdata1' là InnoDB, không phải MyISAM. – derobert

2

Mô tả ở trên không đủ để làm việc cho tôi (có lẽ là dày đặc hoặc lười biếng) vì vậy tôi đã tạo tập lệnh này khi tôi tìm thấy câu trả lời để trợ giúp tôi trong tương lai. Hy vọng nó sẽ giúp những người khác

vim fixperms.sh 

#!/bin/sh 
for D in `find . -type d` 
do 
     echo $D; 
     chown -R mysql:mysql $D; 
     chmod -R 660 $D; 
     chown mysql:mysql $D; 
     chmod 700 $D; 
done 
echo Dont forget to restart mysql: /etc/init.d/mysqld restart; 
3

Tôi tìm thấy một giải pháp để chuyển đổi các tập tin vào một tập tin .sql (sau đó bạn có thể nhập các tập tin .sql đến một máy chủ và phục hồi cơ sở dữ liệu), mà không cần phải truy cập vào thư mục /var, do đó bạn không cần phải là quản trị viên máy chủ để thực hiện việc này.

Yêu cầu XAMPP hoặc MAMP được cài đặt trên máy tính của bạn.

  • Sau khi bạn đã cài đặt XAMPP, điều hướng đến thư mục cài đặt (thường C:\XAMPP), và các thư mục con mysql\data. Đường dẫn đầy đủ nên là C:\XAMPP\mysql\data
  • Bên trong, bạn sẽ thấy các thư mục của bất kỳ cơ sở dữ liệu nào khác mà bạn đã tạo. Sao chép & Dán thư mục đầy đủ các tệp .myd, .myi.frm vào đó. Đường dẫn đến thư mục đó nên

    C:\XAMPP\mysql\data\foldername\.mydfiles

  • Sau đó tham quan localhost/phpmyadmin trong trình duyệt. Chọn cơ sở dữ liệu bạn vừa dán vào thư mục mysql\data và nhấp vào Xuất trong thanh điều hướng. Chọn xuất tệp dưới dạng tệp .sql. Sau đó nó sẽ bật lên hỏi nơi lưu tệp

Và đó là nó! Bạn (hiện tại) có tệp .sql chứa cơ sở dữ liệu ban đầu là các tệp .myd, .myi.frm. Sau đó bạn có thể nhập nó vào máy chủ khác thông qua phpMyAdmin bằng cách tạo cơ sở dữ liệu mới và nhấn 'Nhập' trong thanh điều hướng, sau đó làm theo các bước để nhập

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