2009-01-27 8 views
93

Có thể khôi phục cơ sở dữ liệu MySQL từ các tệp cơ sở dữ liệu vật lý không. Tôi có một thư mục đó có loại tệp sau:Khôi phục cơ sở dữ liệu MySQL từ các tệp vật lý

client.frm
client.MYD
client.MYI

nhưng đối với khoảng 20 nhiều bảng.

Tôi thường sử dụng mysqldump hoặc một công cụ tương tự để lấy mọi thứ trong 1 tệp SQL, vậy cách xử lý các loại tệp này là gì?

Trả lời

99

Một MySQL bảng MyISAM là sự kết hợp của ba tác phẩm:

  • File FRM là định nghĩa bảng.
  • Tệp MYD là nơi lưu trữ dữ liệu thực tế.
  • Tệp MYI là nơi các chỉ mục được tạo trên bảng được lưu trữ.

Bạn sẽ có thể khôi phục lại bằng cách sao chép chúng vào thư mục cơ sở dữ liệu của bạn (Trong Linux, vị trí mặc định là /var/lib/mysql/)

Bạn nên làm điều đó trong khi máy chủ không hoạt động.

+58

điều này chỉ đúng đối với các bảng MyISAM. InnoDB lưu trữ các bảng và chỉ mục của nó trong một vùng bảng * duy nhất, theo mặc định bao gồm 3 tệp ibdata1, ib_logfile0 và ib_logfile1. để khôi phục cơ sở dữ liệu, bạn cũng sẽ cần những tệp đó. * không gian bảng trên bàn là có thể, nhưng không phải là mặc định –

+14

Anh ấy nói rằng anh ấy có tệp .frm .myi và .myd. Sau đó tôi giả định đó là các bảng MyISAM. – Vincent

+0

right - point taken :) –

1

Vâng! Chỉ cần thêm chúng vào thư mục cơ sở dữ liệu của bạn (tùy thuộc vào hệ điều hành) và chạy một lệnh như "MySQL Fix Permissions". Điều này được lưu trữ lại cơ sở dữ liệu. Xem quá nó rằng các quyền chính xác được thiết lập trên các tập tin là tốt.

+0

Tôi đã làm điều đó, nhưng tôi không nhận ra các bảng.Như tôi đã nói trong bình luận của tôi về câu trả lời trước. – orezvani

0

Tôi đã sao chép các tệp này vào thư mục lưu trữ cơ sở dữ liệu cho cơ sở dữ liệu mysql đang hoạt động, khởi động db và chờ nó "sửa" các tệp, sau đó trích xuất chúng bằng mysqldump.

2

Với MySql 5.1 (Win7). Để tạo lại các DB (InnoDbs), tôi đã thay thế tất cả nội dung của các thư mục sau (my.ini params):

datadir="C:/ProgramData/MySQL/MySQL Server 5.1/Data/" 
innodb_data_home_dir="C:/MySQL Datafiles/" 

Sau đó, tôi bắt đầu dịch vụ MySql và tất cả hoạt động tốt.

5

Nếu bạn đang khôi phục thư mục đừng quên chown các tập tin vào mysql: mysql

chown -R mysql:mysql /var/lib/mysql-data

nếu không bạn sẽ nhận được lỗi khi cố gắng thả một cơ sở dữ liệu hoặc thêm cột mới vv ..

và khởi động lại MySQL

service mysql restart 
+1

điều này không thực sự là câu trả lời cho câu hỏi nhưng rất hữu ích. –

+0

thực tế bạn không nên chown tất cả mọi thứ để mysql, thư mục cơ sở dữ liệu mysql nên giữ lại nhóm gốc – Galvani

+0

oww công trình này, cảm ơn. – Offboard

6

Tôi có cùng sự cố nhưng không khôi phục thành công cơ sở dữ liệu dựa trên hướng dẫn ở trên.

Tôi chỉ nhận được thư mục cơ sở dữ liệu mysql đã khôi phục từ hệ điều hành Ubuntu của mình. Vấn đề của tôi là làm thế nào để khôi phục lại cơ sở dữ liệu của tôi với những thư mục dữ liệu mysql không đọc được. Bây giờ tôi chuyển về hệ điều hành win7 cho môi trường phát triển.

* LƯU Ý Tôi có một máy chủ cơ sở dữ liệu hiện có đang chạy trong win7 và tôi chỉ cần một vài tệp cơ sở dữ liệu để truy xuất từ ​​các tệp đã khôi phục. Để khôi phục thành công các tệp cơ sở dữ liệu từ hệ điều hành Ubuntu, tôi cần phải cài đặt phiên bản mới của máy chủ cơ sở dữ liệu mysql mới từ hệ điều hành Ubuntu trong hệ điều hành win7 để phục hồi mọi thứ trong máy chủ cơ sở dữ liệu cũ đó.

  1. Tạo một phiên bản máy chủ cơ sở dữ liệu mysql mới khác từ tệp được khôi phục.

  2. Ngừng máy chủ mysql

  3. sao chép các thư mục phục hồi và dán vào (C: \ ProgramData \ MySQL \ MySQL 5,5 \ data Server) cơ sở dữ liệu mysql là lưu trữ.

  4. sao chép tệp ibdata1 nằm trong thư mục linux mysql đã cài đặt và dán vào (C: \ ProgramData \ MySQL \ MySQL Server 5.5 \ data). Chỉ cần trên ngay hiện tại hoặc thực hiện sao lưu trước khi thay thế.

  5. khởi động máy chủ mysql và kiểm tra xem bạn đã khôi phục thành công các tệp cơ sở dữ liệu chưa.

  6. Để sử dụng cơ sở dữ liệu đã khôi phục trong máy chủ mysql hiện đang sử dụng , chỉ cần xuất cơ sở dữ liệu đã khôi phục và nhập máy chủ mysql hiện tại .

Hy vọng điều này sẽ giúp ích bởi vì tôi không tìm được giải pháp cho vấn đề của mình.

+1

cũng hoạt động trên ubuntu/debian với các tệp ibdata1, ib_logfile0 và ib_logfile1 và thư mục cơ sở dữ liệu. người dùng sẽ không được sao chép, nhưng sau đó bạn có thể thêm người dùng mới vào cơ sở dữ liệu và kết xuất nó với điều đó. – bokorben

11

Từ câu trả lời của @Vicent, tôi đã khôi phục cơ sở dữ liệu MySQL như sau:

Bước 1. Shutdown máy chủ Mysql

Bước 2. Cơ sở dữ liệu Sao chép trong thư mục cơ sở dữ liệu của bạn (trong linux, vị trí mặc định là/var/lib/mysql). Giữ cùng tên của cơ sở dữ liệu và cùng tên cơ sở dữ liệu trong chế độ mysql.

sudo cp -rf /mnt/ubuntu_426/var/lib/mysql/database1 /var/lib/mysql/ 

Bước 3: Thay đổi sở hữu và thay đổi chế độ thư mục:

sudo chown -R mysql:mysql /var/lib/mysql/database1 
sudo chmod -R 660 /var/lib/mysql/database1 
sudo chown mysql:mysql /var/lib/mysql/database1 
sudo chmod 700 /var/lib/mysql/database1 

Bước 4: Sao chép ibdata1 trong thư mục cơ sở dữ liệu của bạn

sudo cp /mnt/ubuntu_426/var/lib/mysql/ibdata1 /var/lib/mysql/ 

sudo chown mysql:mysql /var/lib/mysql/ibdata1 

Bước 5: sao chép file ib_logfile0 và ib_logfile1 trong thư mục cơ sở dữ liệu của bạn.

sudo cp /mnt/ubuntu_426/var/lib/mysql/ib_logfile0 /var/lib/mysql/ 

sudo cp /mnt/ubuntu_426/var/lib/mysql/ib_logfile1 /var/lib/mysql/ 

Ghi thay đổi sở hữu và thay đổi gốc rễ của những tập tin:

sudo chown -R mysql:mysql /var/lib/mysql/ib_logfile0 

sudo chown -R mysql:mysql /var/lib/mysql/ib_logfile1 

hoặc

sudo chown -R mysql.mysql /var/lib/mysql 

Bước 6 (Không bắt buộc): Trang web của tôi có cấu hình để lưu trữ tập tin trong một địa điểm cụ thể, sau đó tôi sao chép chúng vào vị trí tương ứng, chính xác.

Bước 7: Khởi động máy chủ Mysql của bạn. Mọi thứ trở lại và tận hưởng nó.

Tức là.

xem thêm tại: https://biolinh.wordpress.com/2017/04/01/restoring-mysql-database-from-physical-files-debianubuntu/

+2

+1 để biết hướng dẫn từng bước chi tiết. Nhưng tôi đã chỉnh sửa một số câu nói để thực sự phản ánh những gì họ nên làm. – Peter