2010-08-29 40 views
15

Tôi có một bãi chứa mysql với 5 cơ sở dữ liệu và muốn biết nếu có một cách để nhập khẩu chỉ là một trong những người (sử dụng mysqldump hoặc khác).Làm cách nào để khôi phục một cơ sở dữ liệu từ mysqldump chứa nhiều cơ sở dữ liệu?

Đề xuất được đánh giá cao.

+0

Tôi không nghĩ là có. Nhập tất cả các cơ sở dữ liệu, và loại bỏ mọi thứ ngoại trừ cái bạn muốn giữ lại, là điều tốt nhất bạn có thể làm - nhưng bạn không bao giờ biết, có thể ai đó đến với cái gì đó –

Trả lời

15

Bạn có thể đặt đường dẫn SQL được bán phá giá qua sed và yêu cầu trích xuất cơ sở dữ liệu cho bạn. Một cái gì đó như:

cat mysqldumped.sql | \ 
sed -n -e '/^CREATE DATABASE.*`the_database_you_want`/,/^CREATE DATABASE/ p' | \ 
sed -e '$d' | \ 
mysql 

Hai sed lệnh:

  1. Chỉ in các dòng phù hợp giữa CREATE DATABASE dòng (bao gồm cả CREATE DATABASE dòng), và
  2. Xóa ngoáiCREATE DATABASE dòng từ đầu ra vì chúng tôi không muốn mysqld tạo cơ sở dữ liệu thứ hai.

Nếu bãi chứa của bạn không chứa các dòng CREATE DATABASE, bạn cũng có thể đối sánh với các dòng USE.

+0

Trong một dòng, và với các tùy chọn '-u' và' -p': 'cat all-databases.sql | sed -n -e '/^TẠO ĐẶT LẠI. * \ 'the_database_you_want \' /,/^ TẠO DATABASE/p' | sed -e '$ d' | mysql -u my_username -p' –

27

Bạn có thể sử dụng tùy chọn dòng lệnh myone - tùy chọn cơ sở dữ liệu.

Tất nhiên, hãy cẩn thận khi bạn thực hiện việc này.

Bạn cũng có thể sử dụng mysql dumpsplitter.

+0

Tôi đã thử điều này, nhưng luôn gặp lỗi "ERROR 1049 (42000): Cơ sở dữ liệu không xác định 'redmine' ". Các trạng thái tài liệu: "Điều này rất hữu ích cho việc bỏ qua các bản cập nhật cho các cơ sở dữ liệu khác trong nhật ký nhị phân." Đây không phải là nhật ký nhị phân (tôi nghĩ) để nó không hoạt động. –

+1

Tôi tìm thấy một báo cáo lỗi thú vị liên quan đến tính năng này: http://bugs.mysql.com/bug.php?id=40477 –

+1

@ThePixelDeveloper: Một cơ sở dữ liệu trống cần phải tồn tại trước tiên, sau đó nó hoạt động. –

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