Đang tải xuống MySQL từ dòng lệnh


306

Tôi đang rời khỏi Linode vì tôi không cần các kỹ năng sysadmin của Linux; trước khi tôi hoàn thành việc chuyển đổi sang một dịch vụ thân thiện hơn, tôi cần tải xuống nội dung của cơ sở dữ liệu MySQL. Có cách nào tôi có thể làm điều này từ dòng lệnh?



mysqldump là những gì bạn đang tìm kiếm.
Faruk Sahin

1
@AZinkey Tôi nghĩ bạn sẽ tìm thấy câu trả lời được chấp nhận của bản sao bài đăng đó và dán nội dung câu trả lời của tôi (từng chữ) vào phần đầu của câu trả lời của họ vài tháng sau ...
nickhar

Câu trả lời:


656

Bạn có thể thực hiện điều này bằng cách sử dụng mysqldump chức năng dòng lệnh .

Ví dụ:

Nếu đó là toàn bộ DB, thì:

   $ mysqldump -u [uname] -p db_name > db_backup.sql

Nếu đó là tất cả các DB, thì:

   $ mysqldump -u [uname] -p --all-databases > all_db_backup.sql

Nếu đó là các bảng cụ thể trong DB, thì:

   $ mysqldump -u [uname] -p db_name table1 table2 > table_backup.sql

Bạn thậm chí có thể tự động nén đầu ra bằng cách sử dụng gzip (nếu DB của bạn rất lớn):

   $ mysqldump -u [uname] -p db_name | gzip > db_backup.sql.gz

Nếu bạn muốn thực hiện việc này từ xa và bạn có quyền truy cập vào máy chủ được đề cập, thì điều sau đây sẽ hoạt động (giả sử máy chủ MySQL nằm trên cổng 3306):

   $ mysqldump -P 3306 -h [ip_address] -u [uname] -p db_name > db_backup.sql

Nó sẽ thả .sqltập tin vào thư mục bạn chạy dòng lệnh từ đó.

EDIT: Được cập nhật để tránh đưa mật khẩu vào các lệnh CLI, sử dụng -ptùy chọn không có mật khẩu. Nó sẽ nhắc bạn cho nó và không ghi lại nó.


1
Câu trả lời của bạn kết hợp với stackoverflow.com/questions/2989724/ mài - Nên làm những gì anh ta yêu cầu, vì anh ta đã bao gồm anh ta cần tải xuống. Đó là hoặc một wgethoặc scpsẽ cần thiết để truy xuất tệp đã nói khi được tạo.
Zak

47
Lưu ý nhỏ rằng an toàn hơn là không nhập mật khẩu ngay trong lệnh. Chỉ sử dụng tùy chọn -p không có mật khẩu sẽ nhắc mật khẩu khi chạy, theo cách đó mật khẩu không được lưu trong lịch sử lệnh của bạn (và có khả năng được truy xuất). Vì vậy, sử dụng lệnh sau: mysqldump -P 3306 -h [ip_address] -u [uname] -p db_name> db_backup.sql
Pitt

3
Thay vì sử dụng >để lưu, tôi thay vì sử dụng -rđể tránh rắc rối với các ký tự nước ngoài, hoặc cơn ác mộng liên quan đến các vấn đề mã hóa, như đã nêu trong bài viết này .
Pathros

1
Đối với các dữ liệu lớn / được cập nhật tích cực, hãy sử dụng tham số - giao dịch đơn lẻ. Điều này tạo ra một điểm kiểm tra và giúp đảm bảo tính nhất quán. Ngoài ra, sử dụng các công tắc
accord_guy

1
Bạn nên sử dụng --result-file=db_backup.sqlthay vì > db_backup.sql. Trích dẫn từ tài liệu MySQL : "UTF-16 không được phép dưới dạng bộ ký tự kết nối (xem Bộ ký tự khách hàng không thể chấp nhận ), vì vậy tệp kết xuất sẽ không tải chính xác. Để khắc phục sự cố này, hãy sử dụng --result-filetùy chọn tạo đầu ra trong Định dạng ASCII ".
Martin Braun

13

Trong các phiên bản mới nhất của mysql, ít nhất là của tôi, bạn không thể đặt pass của mình trực tiếp vào lệnh.

Bạn phải chạy:

mysqldump -u [uname] -p db_name > db_backup.sql

và sau đó nó sẽ hỏi mật khẩu.


2
xóa khoảng -p
trắng

8

Nếu tải xuống từ máy chủ từ xa, đây là một ví dụ đơn giản:

mysqldump -h my.address.amazonaws.com -u my_username -p db_name > /home/username/db_backup_name.sql

-P cho biết bạn sẽ nhập mật khẩu, nó không liên quan đến db_name. Sau khi nhập lệnh, bạn sẽ được nhắc nhập mật khẩu. Nhập nó vào và nhấn enter.


5

Trên các cửa sổ, bạn cần chỉ định thùng mysql nơi mysqldump.exe nằm.

cd C:\xampp\mysql\bin

mysqldump -u[username] -p[password] --all-databases > C:\localhost.sql

lưu cái này vào một tệp văn bản như backup.cmd


hoặc thường có mysql trong biến PATH của bạn để bạn có thể chạy mysqlcác lệnh từ mọi nơi mà không có trong thư mục của nó.
Behz4d

2

Mở Dấu nhắc lệnh và gõ trực tiếp lệnh này. Đừng vào bên trong mysql và sau đó gõ lệnh này.

mysqldump -u [uname] -p[pass] db_name > db_backup.sql

1
Sao chép dòng mã đầu tiên từ câu trả lời được chấp nhận cho câu hỏi 5 năm tuổi là một chiến lược táo bạo cho việc nuôi nghiệp.
Phillip Copley

Tôi đã thử lệnh MySQLdump này trong dấu nhắc Mysql và không hoạt động. vì vậy chỉ cần trả lời :-)
Nithin Raja

2

Đi đến thư mục cài đặt MySQL và mở cmd từ đó. Sau đó thực hiện lệnh dưới đây để có được bản sao lưu cơ sở dữ liệu của bạn.

mysqldump -u root -p --add-drop-database --databases db> C:\db-dontdelete\db.sql

1

Chỉ cần gõ mysqldumphoặc mysqldump --helptrong cmd của bạn sẽ hiển thịhow to use

Đây là kết quả cmd của tôi

C:\Program Files\MySQL\MySQL Server 5.0\bin>mysqldump
Usage: mysqldump [OPTIONS] database [tables]
OR     mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
OR     mysqldump [OPTIONS] --all-databases [OPTIONS]
For more options, use mysqldump --help

1

Nếu bạn đang chạy MySQL ngoài cổng mặc định:

mysqldump.exe -u username -p -P PORT_NO database > backup.sql

1

Đối với những người muốn nhập mật khẩu trong dòng lệnh. Có thể nhưng khuyên bạn nên chuyển nó bên trong dấu ngoặc kép để ký tự đặc biệt sẽ không gây ra vấn đề gì.

mysqldump -h'my.address.amazonaws.com' -u'my_username' -p'password' db_name > /path/backupname.sql

-1

Sử dụng cái này Nếu bạn có cơ sở dữ liệu với tên archiedb, hãy sử dụng mysql -p --database archiedb> /home/database_backup.sql

Giả sử đây là linux, chọn nơi lưu tập tin sao lưu.


shell> mysqldump -p mypassword - cơ sở dữ liệu mydb> /home/backup.sql.
Nabaasa Archie

-1

Đối với người dùng Windows, bạn có thể vào thư mục mysql để chạy lệnh

ví dụ

cd c:\wamp64\bin\mysql\mysql5.7.26\bin
mysqldump -u root -p databasename > dbname_dump.sql

1
Câu hỏi gợi ý rằng MySQL đang chạy trên Linux.
gmauch

-1

Lưu ý: Bước này chỉ xuất hiện sau khi bỏ tệp MySQL của bạn (mà hầu hết các câu trả lời ở trên đã giải quyết).

Nó giả định rằng bạn có tệp kết xuất đã nói trong máy chủ từ xa và bây giờ bạn muốn đưa nó xuống máy tính cục bộ của mình.

Để tải .sqltệp bị đổ từ máy chủ từ xa về máy tính cục bộ của bạn, hãy làm

scp -i YOUR_SSH_KEY your_username@IP:name_of_file.sql ./my_local_project_dir
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.