Làm cách nào để khôi phục tệp kết xuất từ ​​mysqldump?


544

Tôi đã được cấp một tệp cơ sở dữ liệu MySQL mà tôi cần khôi phục làm cơ sở dữ liệu trên máy Windows Server 2008 của mình.

Tôi đã thử sử dụng MySQL Administrator, nhưng tôi gặp lỗi sau:

Tệp đã chọn được tạo bởi mysqldump và không thể khôi phục bằng ứng dụng này.

Làm thế nào để tôi làm việc này?

Câu trả lời:


587

Nó nên đơn giản như chạy này:

mysql -u <user> -p < db_backup.dump

Nếu kết xuất là của một cơ sở dữ liệu, bạn có thể phải thêm một dòng ở đầu tệp:

USE <database-name-here>;

Nếu đó là một bãi chứa nhiều cơ sở dữ liệu, các câu lệnh sử dụng đã có sẵn trong đó.

Để chạy các lệnh này, hãy mở một dấu nhắc lệnh (trong Windows) và cdđến thư mục chứa mysql.exetệp thực thi (bạn có thể phải tìm xung quanh một chút cho nó, nó sẽ phụ thuộc vào cách bạn cài đặt mysql, tức là độc lập hoặc là một phần của một gói như WAMP). Khi bạn đang ở trong thư mục đó, bạn sẽ có thể chỉ cần gõ lệnh như tôi có ở trên.


1
Tôi có sử dụng "MySQL Command Line Client" không? Tôi chưa bao giờ sử dụng MySQL trước đây.
Zack Peterson

1
Mở tệp kết xuất trong trình soạn thảo văn bản, khá dễ dàng để chọn, nếu có bất kỳ câu lệnh "sử dụng" nào, thì đó là nhiều cơ sở dữ liệu, nếu không có, bạn sẽ phải thêm một ở trên cùng trước khi bạn có thể chạy lệnh đó
Justin Bennett

6
Tất nhiên cơ sở dữ liệu mà bạn đặt trong câu lệnh "bằng cách sử dụng" sẽ phải tồn tại trước tiên.
Justin Bennett

113
xem vogs trả lời. Cú pháp là mysql -u<user> -p mydatabasename < db_backup.dump không cần một USEtuyên bố ở đầu tệp
Toskan

1
Đề xuất "Mở tệp kết xuất trong trình soạn thảo văn bản" có vẻ lạ. Điều đó có thể hoạt động với cơ sở dữ liệu nhỏ hoặc trình soạn thảo văn bản được đệm như EditPad, nhưng với mọi thứ khác, nó sẽ bị sặc. Sẽ thật tuyệt nếu bạn không phải thực hiện bước này.
mikato

719

Nếu cơ sở dữ liệu bạn muốn khôi phục không tồn tại, bạn cần tạo nó trước.

Trên dòng lệnh, nếu bạn đang ở trong cùng thư mục chứa tệp bị đổ, hãy sử dụng các lệnh này (với các thay thế phù hợp):

C:\> mysql -u root -p

mysql> create database mydb;
mysql> use mydb;
mysql> source db_backup.dump;

52
Cá nhân tôi thích phương pháp này. nó cho thấy sự tiến bộ của bãi chứa và cũng chính xác thời gian sử dụng sql khác nhau.
ToughPal

11
@Phrogz Trên thực tế, bạn có thể cung cấp mật khẩu trên dòng lệnh bằng cách sử dụng mysql -u root -psecret mà không có khoảng trắng , nhưng có nhược điểm là mật khẩu của bạn hiển thị ở dạng văn bản rõ ràng trong danh sách quy trình và tệp nhật ký. Như bạn đề xuất, tốt hơn là sử dụng sản phẩm nào -pvà gõ nó vào dấu nhắc.
Joe Holloway

Phương pháp này có lợi ích là cho phép các biến dựa trên phiên (ví dụ FOREIGN_KEY_CHECKS) được đặt mà không phải chỉnh sửa tệp kết xuất
Chris Cooper

Điều này là tốt và tuyệt vời khi làm điều này bằng tay, nhưng không hoạt động từ một tập lệnh bash.
chacham15

1
Một nhược điểm: nó không thể tải kết xuất được nén (ví dụ: được tạo bằng mysqldump db | gzip -9 > dumpfile.sql.gz)
Marinos An

246

Bạn chỉ cần chạy cái này:

mysql -p -u[user] [database] < db_backup.dump

Nếu kết xuất chứa nhiều cơ sở dữ liệu, bạn nên bỏ qua tên cơ sở dữ liệu:

mysql -p -u[user] < db_backup.dump

Để chạy các lệnh này, hãy mở một dấu nhắc lệnh (trong Windows) và cdđến thư mục chứamysql.exe tệp thực thi (bạn có thể phải tìm xung quanh một chút cho nó, nó sẽ phụ thuộc vào cách bạn cài đặt mysql, tức là độc lập hoặc là một phần của một gói như WAMP). Khi bạn đang ở trong thư mục đó, bạn sẽ có thể chỉ cần gõ lệnh.



33

Khi chúng ta tạo một tệp kết xuất với mysqldump, cái chứa trong đó là một tập lệnh SQL lớn để tạo lại nội dung dữ liệu. Vì vậy, chúng tôi khôi phục nó bằng cách sử dụng khởi động máy khách dòng lệnh của MySQL:

mysql -uroot -p 

( roottên người dùng quản trị viên của chúng tôi cho MySQL) và sau khi được kết nối với cơ sở dữ liệu, chúng tôi cần các lệnh để tạo cơ sở dữ liệu và đọc tệp trong đó:

create database new_db;
use new_db;
\. dumpfile.sql

Chi tiết sẽ thay đổi tùy theo tùy chọn đã được sử dụng khi tạo tệp kết xuất.


19

Chạy lệnh để vào DB

 # mysql -u root -p 

Nhập mật khẩu cho người dùng Sau đó tạo DB mới

mysql> create database MynewDB;
mysql> exit

Và thực hiện exit.Afetr that.Run Lệnh này

# mysql -u root -p  MynewDB < MynewDB.sql

Sau đó nhập vào db và gõ

mysql> show databases;
mysql> use MynewDB;
mysql> show tables;
mysql> exit

Đó là ........ bãi rác của bạn sẽ được khôi phục từ DB này sang DB khác

Hoặc nếu không, có một cách khác để khôi phục kết xuất

# mysql -u root -p 

Sau đó nhập vào db và gõ

mysql> create database MynewDB;
mysql> show databases;
mysql> use MynewDB;
mysql> source MynewDB.sql;
mysql> show tables;
mysql> exit

14

Tôi đã làm cho nó hoạt động theo các bước này

  1. Mở Quản trị viên MySQL và kết nối với máy chủ

  2. Chọn "Danh mục" ở bên trái

  3. Nhấp chuột phải vào hộp phía dưới bên trái và chọn "Tạo lược đồ mới"

    Quản trị viên MySQL http://img204.imageshack.us/img204/7528/adminsx9.th.gif phóng to hình ảnh

  4. Đặt tên cho lược đồ mới (ví dụ: "dbn")

    Lược đồ mới của MySQL http://img262.imageshack.us/img262/4374/newwa4.th.gif phóng to hình ảnh

  5. Mở Windows Command Prompt (cmd)

    Windows Command Prompt http://img206.imageshack.us/img206/941/startef7.th.gif phóng to hình ảnh

  6. Thay đổi thư mục thành thư mục cài đặt MySQL

  7. Thực thi lệnh:

    mysql -u root -p dbn < C:\dbn_20080912.dump

    'Trong đó "root" là tên của người dùng, "dbn" là tên cơ sở dữ liệu và "C: \ dbn_20080912.dump" là đường dẫn / tên tệp của tệp mysqldump .dump

    MySQL dump khôi phục dòng lệnh http://img388.imageshack.us/img388/2361/cmdjx0.th.gif phóng to hình ảnh

  8. Thưởng thức!


12

Bạn có thể thử công cụ 'Thực thi tập lệnh SQL' của SQLyog để nhập tệp sql / dump.

nhập mô tả hình ảnh ở đây


11

Nếu bạn muốn xem tiến trình của bãi chứa, hãy thử điều này:

pv -i 1 -p -t -e /path/to/sql/dump | mysql -u USERNAME -p DATABASE_NAME

Tất nhiên bạn sẽ cần cài đặt 'pv'. Lệnh này chỉ hoạt động trên * nix.


10

Như một ví dụ cụ thể của câu trả lời trước:

Tôi cần khôi phục bản sao lưu để có thể nhập / di chuyển nó vào SQL Server. Tôi chỉ cài đặt MySql, nhưng không đăng ký nó như một dịch vụ hoặc thêm nó vào đường dẫn của tôi vì tôi không có nhu cầu duy trì hoạt động.

Tôi đã sử dụng windows explorer để đặt tệp kết xuất của mình vào C: \ code \ dump.sql. Sau đó mở MySql từ mục menu bắt đầu. Tạo DB, sau đó chạy lệnh nguồn với đường dẫn đầy đủ như vậy:

mysql> create database temp
mysql> use temp
mysql> source c:\code\dump.sql

9

Sử dụng tệp kết xuất 200 MB được tạo trên Linux để khôi phục trên Windows w / mysql 5.5, tôi đã thành công hơn với

source file.sql

cách tiếp cận từ dấu nhắc mysql hơn với

mysql  < file.sql

Cách tiếp cận trên dòng lệnh, điều đó gây ra một số lỗi 2006 "máy chủ đã biến mất" (trên windows)

Thật kỳ lạ, dịch vụ được tạo trong quá trình cài đặt (mysql) đề cập đến tệp my.ini không tồn tại. Tôi đã sao chép tệp ví dụ "lớn" vào my.ini mà tôi đã sửa đổi với mức tăng được khuyên dùng.

Giá trị của tôi là

[mysqld]
max_allowed_packet = 64M
interactive_timeout = 250
wait_timeout = 250

9
./mysql -u <username> -p <password> -h <host-name like localhost> <database-name> < db_dump-file

Đây là giống như một vài câu trả lời khác, và đây là một câu hỏi tám năm tuổi.
miken32

2
Mặc dù câu trả lời được chọn là rất tốt, nhưng câu trả lời này thực sự hữu ích hơn đối với tôi. Tệp cơ sở dữ liệu của tôi là LỚN và việc mở nó trong Notepad ++ là một cơn ác mộng, nó chỉ không thể xử lý kích thước và không cho phép tôi thêm tên cơ sở dữ liệu ở đầu tệp sql. Trong trường hợp có thể chỉ định tên db từ dòng lệnh thực sự hữu ích hơn.
Najeeb

Các mysqllệnh không chấp nhận khoảng trống giữa các tùy chọn và lập luận của họ. Nó phải được -u<username>thay thế và mật khẩu không nên được cung cấp trên dòng lệnh.
Roland Illig

4

Bạn không thể sử dụng menu Khôi phục trong Quản trị viên MySQL nếu sao lưu / kết xuất không được tạo từ đó. Đó là giá trị một shot mặc dù. Nếu bạn chọn "bỏ qua lỗi" với hộp kiểm cho điều đó, nó sẽ nói rằng nó đã hoàn thành thành công, mặc dù nó thoát rõ ràng chỉ với một phần nhỏ của hàng được nhập ... đây là một bãi chứa, hãy nhớ đến bạn.


2

Lệnh One-liner để khôi phục SQL được tạo từ mysqldump

mysql -u <username> -p<password> -e "source <path to sql file>;"

1
ví dụmysql -u root -p12345678 -e "source /tmp/backup.sql;"
Jossef Harush

Đừng sử dụng mật khẩu như thế này, chỉ sử dụng -p và dòng lệnh sẽ nhắc bạn yêu cầu mật khẩu an toàn sau khi bạn nhấn enter.
user2473015

Khi bạn có thể đủ khả năng tương tác nhanh chóng, bạn là chính xác. Khi bạn không thể (ví dụ: tập lệnh không giám sát), bạn có thể sẽ sử dụng nó theo dòng
Jossef Harush

1

Bạn cũng có thể sử dụng menu khôi phục trong MySQL Administrator. Bạn chỉ cần mở tệp sao lưu, và sau đó nhấp vào nút khôi phục.


0

Cách khôi phục cơ sở dữ liệu MySQL với MySQLWorkbench

Bạn có thể chạy thả và tạo lệnh trong tab truy vấn.

Bỏ lược đồ nếu nó hiện tồn tại

DROP DATABASE `your_db_name`;

Tạo một lược đồ mới

CREATE SCHEMA `your_db_name`;

Mở tệp kết xuất của bạn

MySQLWorkbench mở tập tin sql

  1. Nhấp vào Mở tập lệnh SQL trong biểu tượng tab truy vấn mới và chọn tệp kết xuất db của bạn.
  2. Sau đó bấm Chạy SQL Script ...
  3. Sau đó, nó sẽ cho phép bạn xem trước các dòng đầu tiên của tập lệnh kết xuất SQL.
  4. Sau đó, bạn sẽ chọn Tên lược đồ mặc định
  5. Tiếp theo, chọn Bộ ký tự mặc định utf8 thường là đặt cược an toàn, nhưng bạn có thể nhận ra nó khi nhìn vào các dòng xem trước cho một cái gì đó như character_set .
  6. Bấm Chạy
  7. Hãy kiên nhẫn cho các tập lệnh khôi phục DB lớn và xem khi không gian ổ đĩa của bạn tan chảy! 🎉

0

Giả sử bạn đã tạo cơ sở dữ liệu trống, bạn cũng có thể khôi phục cơ sở dữ liệu từ dòng lệnh như thế này:

sudo mysql databasename < backup.sql
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.