2012-01-26 37 views
15

tôi sao lưu cơ sở dữ liệu sản xuất của tôi với lệnh sau:mysql khôi phục cơ sở dữ liệu khác nhau

mysqldump -u root --opt --skip-extended-insert --databases my_production_db 

Kết quả là tập tin dump có những dòng sau gần đầu:

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `my_production_db` /*!40100 DEFAULT CHARACTER SET latin1 */; 
USE `my_production_db `; 

Để khôi phục lại cơ sở dữ liệu đến một điểm đến khác. my_debvelopment_db Tôi phải mở tệp kết xuất và chỉnh sửa các bit trong đó cơ sở dữ liệu được đặt tên.

Sau đó, tôi chạy:

mysql -u root -p <password> < mydumpfile 

tôi đã không tìm ra một cách khác để làm điều đó.

Khi cơ sở dữ liệu trở nên lớn hơn, điều này trở nên không thực tế.

Tôi có thiếu gì đó không? Cant tôi bằng cách nào đó xác định nơi tôi muốn khôi phục lại cơ sở dữ liệu? Tôi có cần lệnh sao lưu khác không?

Trả lời

9

Nếu bạn thả tùy chọn --databases nhưng vẫn chỉ định tên cơ sở dữ liệu, bạn sẽ KHÔNG nhận được câu lệnh tạo cơ sở dữ liệu. tức là:

mysqldump -u root --opt --skip-extended-insert my_production_db 

Trên máy tính của bạn, bạn chỉ cần tạo bất kỳ cơ sở dữ liệu nào bạn muốn khôi phục.

+2

Mặc dù không có một 'tùy chọn --databases', dường như' mysqldump' vẫn có thể tạo tham chiếu đến tên cơ sở dữ liệu trong kết xuất. Ít nhất tôi gặp vấn đề với một số 'ALTER DATABASE \' dbname \ 'CHARACTER SET utf8 COLLATE utf8_bin' trong một kết xuất cơ sở dữ liệu, trong khi không sử dụng tùy chọn' --databases'. Và có hai trong số đó, lần thứ hai ghi đè đầu tiên. – Hibou57

41

@minaz câu trả lời là tốt, nhưng tôi muốn nối thêm một chút nữa.

Sự cố được gây ra bởi --databases từ khóa. Nếu bạn bỏ qua từ khóa, nó sẽ không chứa bất kỳ nội dung tạo cơ sở dữ liệu nào.

Vì vậy, Dump không có từ khóa --databases.

mysqldump -u username -p database_name > dump.sql 

Và khôi phục nó bằng tên cơ sở dữ liệu đích.

mysql -u username -p target_database_name < dump.sql 

Ngoài ra, có một số cách để thực hiện việc này. Xem vấn đề tương tự trên here (dba.stackexchange).

+0

Tôi tin rằng có một lỗi với '-p database_name', vì tên tùy chọn' -p' là tên viết tắt của tùy chọn '--password'. – Hibou57

+10

@ Hibou57 Cảm ơn bạn đã bình luận. Có, '-p' có nghĩa là' --password' như bạn đã đề cập. Nhưng '-p' thực sự có nghĩa là 'Tôi sẽ đặt mật khẩu của mình qua dấu nhắc'. Nếu bạn muốn đặt mật khẩu thông qua tùy chọn lệnh, không được để trống (khoảng trống) như '-p ' không phải '-p '. – lqez

+0

http://dev.mysql.com/doc/refman/5.5/en/mysql-command-options.html#option_mysql_password – lqez

0

Nếu bạn đã có kết xuất, bạn có thể tách các lệnh để tạo và sử dụng cơ sở dữ liệu. Đơn giản chỉ cần loại bỏ thứ tư và dòng thứ năm mới.

sed '4d' dump.sql | sed '5d' > dump-striped.sql 
+0

Tốt hơn là chỉ hiển thị các dòng cần xóa. Chỉ có hai. Phương pháp bạn đưa ra là tùy ý - đặc biệt nếu định dạng thay đổi hoặc có các chỉnh sửa thủ công khác .. – bshea

1

Trên cửa sổ xampp tôi đã sử dụng lệnh sau đây để đạt được điều này

Xuất

mysqldump -u root -p mydb > mydb.sql 

nhập

mysql -u root -p mynewdb < mydb.sql 
Các vấn đề liên quan