Làm thế nào để khôi phục một trong những cơ sở dữ liệu MySQL của tôi từ .myd
, .myi
, .frm
file?
Làm thế nào để khôi phục một trong những cơ sở dữ liệu MySQL của tôi từ .myd
, .myi
, .frm
file?
Câu trả lời:
Nếu đây là các bảng MyISAM, thì việc đưa các tệp .RM, .MYD và .MYI vào một thư mục cơ sở dữ liệu (ví dụ /var/lib/mysql/dbname
:) sẽ cung cấp bả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 các quyền ( GRANT
, v.v.) là một phần của mysql
cơ sở dữ liệu. 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 chạy các GRANT
câu lệnh thích hợp để tạo người dùng, cấp quyền truy cập, v.v. (Có thể khôi phục mysql
cơ sở dữ liệu, nhưng bạn cần cẩn thận với các phiên bản MySQL và mọi hoạt động cần thiết của mysql_upgrade
tiện ích.)
Trên thực tế, có lẽ bạn chỉ cần .RR (cấu trúc bảng) và .MYD (dữ liệu bảng), 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 đang hạ cấp, tốt nhất 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 thêm tính năng, tất nhiên.
[Mặc dù nó là hiển nhiên, như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 hoàn toàn không hoạt động đối với các bảng InnoDB. Chỉ MyISAM, nhưng xem xét các tệp bạn có, bạn có MyISAM]
check table sometable;
và sau đó chạy sửa chữa (chỉ khi cần thiết): repair table sometable;
Tôi chỉ 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.
Không cần xác định vị trí tệp .MYI và .MYD để phục hồi này.
innodb_force_recovery = 4
cấp độ (không chắc chắn là cần thiết trong trường hợp này). Ơn Chúa!
ibdata1
là InnoDB, không phải MyISAM.
Một điều cần lưu ý:
Tệp .RM có cấu trúc bảng của bạn trong đó và dành riêng 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ể bị bỏ qua và được tạo lại REPAIR TABLE
giống 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 lược đồ kết xuất các bảng của mình, 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 các bản sao lưu của bạn, xóa các tệp MYI và sửa chữa chúng tất cả. Bằng cách này, bạn có thể khôi phục bản sao lưu của mình sang phiên bản MySQL khác hoặc di chuyển cơ sở dữ liệu của bạn hoàn toàn mà không cần sử dụng mysqldump
. Tôi đã tìm thấy siêu hữu ích này khi di chuyển cơ sở dữ liệu lớn.
Đơn giản! Tạo một 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 lưu trữ .myd, .myi, .frm cho tất cả các cơ sở dữ liệu.
Sau đó vào phpMyadmin, truy cập db abc và bạn tìm thấy cơ sở dữ liệu của mình.
Tôi nghĩ .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ể thực hiện truy vấn (truy vấn) 1016: Không thể mở tệp: 'đôi khi.MYI'. (errno: 145) Lỗi Msg: 1034: Tệp khóa không chính xác cho bảng: 'đôi khi'. Cố gắng sửa chữa nó sau đó 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ảng 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 sẽ ổn:
check table sometable;
+------------------+-------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+------------------+-------+----------+----------+
| yourdb.sometable | check | status | OK |
+------------------+-------+----------+----------+
Tôi đã tìm thấy một giải pháp để chuyển đổi các tệp thành một .sql
tệp (sau đó bạn có thể nhập .sql
tệp vào máy chủ và khôi phục cơ sở dữ liệu), mà không cần phải truy cập vào /var
thư mục, 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.
Nó yêu cầu XAMPP hoặc MAMP được cài đặt trên máy tính của bạn.
C:\XAMPP
) và thư mục con mysql\data
. Đường dẫn đầy đủ phải 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. Copy & Paste thư mục đầy đủ các .myd
, .myi
và .frm
các file vào đó. Đường dẫn đến thư mục đó phải là
C:\XAMPP\mysql\data\foldername\.mydfiles
Sau đó truy cập localhost/phpmyadmin
trong một trình duyệt. Chọn cơ sở dữ liệu bạn vừa dán vào mysql\data
thư mục và nhấp vào Xuất trong thanh điều hướng. Chọn xuất nó dưới dạng .sql
tệp. Sau đó nó sẽ bật lên hỏi nơi lưu tập tin
Và đó là nó! Bạn (nên) bây giờ có một .sql
tập tin có chứa các cơ sở dữ liệu ban đầu .myd
, .myi
và .frm
tập tin. Sau đó, bạn có thể nhập nó vào một 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 nó
Bạn có thể sao chép các tệp vào thư mục thư mục con có tên thích hợp của thư mục dữ liệu miễn là nó là phiên bản CHÍNH XÁC của myQuery 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 vấn đề.
http://forums.devshed.com/mysql-help-4/mysql-installation-probols-197509.html
Nó nói để đổi tên các tập tin ib_ *. Tôi đã làm điều đó và nó đã cho tôi trở lại db.
Mô tả ở trên không đủ để khiến mọi thứ hoạt động với tôi (có thể dày đặc hoặc lười biếng) vì vậy tôi đã tạo ra kịch bản này một khi tôi tìm thấy câu trả lời giúp tôi trong tương lai. Hy vọng nó sẽ giúp 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;
Đối với những người đã cài đặt Windows XP và cài đặt máy chủ MySQL 5.5 - vị trí của cơ sở dữ liệu là C: \ Documents and Settings \ All Users \ Application Data \ MySQL \ MySQL Server 5.5 \ data, trừ khi bạn thay đổi vị trí trong cài đặt MySql Workbench GUI.