Mục lục
Hướng dẫn này giải thích cách sao lưu và khôi phục cơ sở dữ liệu MySQL hoặc MariaDB từ dòng lệnh bằng tiện ích mysqldump.
Các tệp sao lưu được tạo bởi tiện ích mysqldump về cơ bản là một tập hợp các câu lệnh SQL có thể được sử dụng để tạo lại cơ sở dữ liệu gốc. Lệnh mysqldump cũng có thể tạo các tệp ở định dạng CSV và XML.
Bạn cũng có thể sử dụng tiện ích mysqldump để chuyển cơ sở dữ liệu MySQL của bạn sang một máy chủ MySQL khác.
Nếu bạn không sao lưu cơ sở dữ liệu của mình, lỗi phần mềm hoặc lỗi ổ cứng có thể là thảm họa. Để giúp bạn tiết kiệm rất nhiều thời gian và sự thất vọng, chúng tôi khuyên bạn nên đề phòng thường xuyên sao lưu cơ sở dữ liệu MySQL của mình.
Sao lưu Database
Cú pháp lệnh Mysqldump
mysqldump [options] > file.sql
options
– Các tùy chọn mysqldumpfile.sql
– Tên file (sao lưu)
Trường hợp sử dụng phổ biến nhất của công cụ mysqldump là sao lưu một cơ sở dữ liệu.
Ví dụ: để tạo bản sao lưu cơ sở dữ liệu có tên database_name
người dùng root
và lưu nó vào một tệp có tên database_name.sql
bạn sẽ chạy lệnh sau:
mysqldump -u root -p database_name > database_name.sql
Sao lưu độc lập một cơ sở dữ liệu
Bạn sẽ được nhắc là phải nhập mật khẩu root. Sau khi xác thực thành công, quá trình backup sẽ bắt đầu. Tùy thuộc vào kích thước cơ sở dữ liệu, quá trình có thể mất một thời gian.
Nếu bạn đã đăng nhập với cùng một người dùng mà bạn đang sử dụng để thực hiện xuất và người dùng đó không yêu cầu mật khẩu, bạn có thể bỏ qua các tùy chọn -u
và -p
:
mysqldump database_name > database_name.sql
Sao lưu nhiều cơ sở dữ liệu
Để sao lưu nhiều cơ sở dữ liệu MySQL bằng một lệnh, bạn cần sử dụng --database
tùy chọn theo sau là danh sách các cơ sở dữ liệu bạn muốn sao lưu. Mỗi tên cơ sở dữ liệu phải được phân tách bằng dấu cách.
mysqldump -u root -p --databases database_name_a database_name_b > databases_a_b.sql
Sao lưu tất cả cơ sở dữ liệu
Sử dụng --all-databases
tùy chọn để sao lưu tất cả các cơ sở dữ liệu MySQL:
mysqldump -u root -p --all-databases > all_databases.sql
Giống như với ví dụ trước, lệnh trên sẽ tạo một tệp sao lưu duy nhất chứa tất cả các cơ sở dữ liệu
Sao lưu tất cả cơ sở dữ liệu với các file riêng biệt
Các mysqldump
tiện ích không cung cấp một tùy chọn để sao lưu tất cả các cơ sở dữ liệu các tập tin riêng biệt nhưng chúng ta dễ dàng đạt được điều đó với một đơn giản bash FOR
vòng lặp :
for DB in $(mysql -e 'show databases' -s --skip-column-names); do
mysqldump $DB > "$DB.sql";
done
Sao lưu cơ sở dữ liệu với định dạng file nén
Nếu kích thước cơ sở dữ liệu rất lớn thì nên nén đầu ra. Để làm điều đó, chỉ cần thêm định dạng gzip
và chuyển hướng nó đến một tệp như dưới đây:
mysqldump database_name | gzip > database_name.sql.gz
Sao lưu cơ sở dữ liệu với tham số thời gian
Nếu bạn muốn giữ nhiều bản sao lưu trong cùng một vị trí, thì bạn có thể thêm ngày hiện tại vào tên tệp sao lưu:
mysqldump database_name > database_name-$(date +%Y_%m_%d).sql
Lệnh trên sẽ tạo một tệp có định dạng sau database_name-2020_02_25.sql
Restore MySql như thế nào?
Bạn có thể phục hồi (Restore) lại database với cú pháp như sau
mysqld database_name < file.sql
mysql -u root -p database_name < database_name.sql
Khôi phục Database
Trong hầu hết các trường hợp, bạn sẽ cần tạo một cơ sở dữ liệu để nhập vào. Nếu cơ sở dữ liệu đã tồn tại, trước tiên bạn cần xóa nó.
Trong ví dụ sau, lệnh đầu tiên sẽ tạo một cơ sở dữ liệu có tên database_name và sau đó nó sẽ nhập kết xuất database_name.sql vào nó:
mysql -u root -p -e "create database database_name";
mysql -u root -p database_name < database_name.sql
Nếu bạn đã sao lưu tất cả các cơ sở dữ liệu của mình bằng -all-databases tùy chọn và bạn muốn khôi phục một cơ sở dữ liệu từ một tệp sao lưu có chứa nhiều cơ sở dữ liệu, hãy sử dụng –one-database tùy chọn như dưới đây:
mysql --one-database database_name < all_databases.sql