Hướng dẫn này hướng dẫn 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 cách sử dụng tiện ích mysqldump.
Các tệp sao lưu được tạo bởi tool 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 tệp ở định dạng CSV và XML.
Bạn cũng có thể sử dụng mysqldump để chuyển cơ sở dữ liệu MySQL của mình sang máy chủ MySQL khác.
Nếu bạn không sao lưu cơ sở dữ liệu của mình, một lỗi phần mềm hoặc lỗi ổ cứng có thể là một thảm họa. Để giúp bạn tiết kiệm nhiều thời gian và sự cố, bạn nên đề phòng thường xuyên sao lưu cơ sở dữ liệu MySQL của mình.
Cú pháp lệnh Mysqldump
Trước khi đi vào cách sử dụng lệnh mysqldump, chúng ta hãy bắt đầu bằng cách xem lại cú pháp cơ bản.
Các biểu thức mysqldump có dạng sau:
mysqldump [options] > file.sql
options
– Các tùy chọn mysqldumpfile.sql
– Tệp đầu ra (sao lưu)
Để sử dụng lệnh mysqldump, máy chủ MySQL phải có thể truy cập và đang chạy.
Sao lưu một cơ sở dữ liệu MySQL
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 một bản sao lưu của cơ sở dữ liệu được đặt tên database_name
bằng cách sử dụng 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
Bạn sẽ được nhắc nhập mật khẩu root. Sau khi xác thực thành công, quá trình export sẽ bắt đầu. Tùy thuộc vào kích thước cơ sở dữ liệu, quá trình này có thể mất một khoảng thời gian.
Nếu bạn đăng nhập bằng chính 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 MySQL
Để sao lưu nhiều cơ sở dữ liệu MySQL bằng một lệnh, bạn cần sử dụng tùy chọn --database
theo sau là danh sách 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
Lệnh trên sẽ tạo một tệp kết xuất chứa cả hai cơ sở dữ liệu.
Sao lưu tất cả cơ sở dữ liệu MySQL
Sử dụng tùy chọn --all-databases
để sao lưu tất cả cơ sở dữ liệu MySQL:
mysqldump -u root -p --all-databases > all_databases.sql
Tương tự như ví dụ trước, lệnh trên sẽ tạo một tệp kết xuất 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 MySQL thành các tệp riêng biệt
Công cụ mysqldump
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 vòng lặp bash FOR
:
for DB in $(mysql -e 'show databases' -s --skip-column-names); do mysqldump $DB > "$DB.sql"; done
Lệnh trên sẽ tạo một tệp dump riêng cho từng cơ sở dữ liệu bằng cách sử dụng tên cơ sở dữ liệu làm tên tệp.
Tạo bản sao lưu cơ sở dữ liệu được nén MySQL
Nếu kích thước cơ sở dữ liệu rất lớn, bạn nên nén đầu ra. Để làm điều đó, chỉ cần chuyển đầu ra đến tool gzip
và chuyển hướng nó đến một tệp như được hiển thị bên dưới:
mysqldump database_name | gzip > database_name.sql.gz
Tạo bản sao lưu với Dấu thời gian
Nếu bạn muốn giữ nhiều bản sao lưu ở 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-20180617.sql
Khôi phục MySQL dump
Bạn có thể khôi phục kết xuất MySQL bằng mysql
công cụ này. Cú pháp chung của lệnh như sau:
mysql database_name < file.sql
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ẽ import database_name.sql
vào đó:
mysql -u root -p -e "create database database_name";mysql -u root -p database_name < database_name.sql
Khôi phục một cơ sở dữ liệu MySQL duy nhất từ một MySQL Dump đầy đủ
Nếu bạn đã sao lưu tất cả cơ sở dữ liệu của mình bằng cách sử dụng tùy chọn -all-databases
và bạn muốn khôi phục một cơ sở dữ liệu từ tệp sao lưu chứa nhiều cơ sở dữ liệu, hãy sử dụng tùy chọn --one-database
như được hiển thị bên dưới:
mysql --one-database database_name < all_databases.sql
Xuất và nhập cơ sở dữ liệu MySQL trong một lệnh
Thay vì tạo tệp dump từ một cơ sở dữ liệu và sau đó nhập bản sao lưu vào cơ sở dữ liệu MySQL khác, bạn có thể sử dụng câu lệnh như sau:
mysqldump -u root -p database_name | mysql -h remote_host -u root -p remote_database_name
Lệnh trên sẽ chuyển đầu ra đến một máy khách mysql trên máy chủ từ xa và nó sẽ nhập nó vào cơ sở dữ liệu có tên remote_database_name
. Trước khi chạy lệnh, hãy đảm bảo rằng cơ sở dữ liệu đã tồn tại trên máy chủ từ xa.
Tự động hóa sao lưu với Cron
Tự động hóa quá trình sao lưu cơ sở dữ liệu đơn giản như tạo một cronjob sẽ chạy lệnh mysqldump tại thời điểm xác định.
Để thiết lập sao lưu tự động cơ sở dữ liệu MySQL bằng cronjob, hãy làm theo các bước bên dưới:
Tạo một tệp có tên .my.cnf
trong thư mục chính người dùng của bạn:
sudo nano ~/.my.cnf
Sao chép và dán văn bản sau vào tệp .my.cnf.
[client] user = dbuser password = dbpasswd
Đừng quên thay thế dbuser
và dbpasswd
bằng người dùng cơ sở dữ liệu và mật khẩu của người dùng.Hạn chế quyền đối với tệp thông tin xác thực để chỉ người dùng của bạn mới có quyền truy cập vào tệp đó:
chmod 600 ~/.my.cnf
Tạo một thư mục để lưu trữ các bản sao lưu:
mkdir ~/db_backups
Mở tệp crontab người dùng của bạn:
crontab -e
Thêm công việc cron sau đây sẽ tạo bản sao lưu tên cơ sở dữ liệu mydb
mỗi ngày vào lúc 3 giờ sáng:
0 3 * * * /usr/bin/mysqldump -u dbuser mydb > /home/username/db_backups/mydb-$(date +\%Y\%m\%d).sql
Đừng quên thay thế username
bằng tên người dùng thực của bạn.
Bạn cũng có thể tạo một cronjob khác để xóa mọi bản sao lưu cũ hơn 30 ngày:
find /path/to/backups -type f -name "*.sql" -mtime +30 -delete
Tất nhiên, bạn cần điều chỉnh lệnh theo vị trí sao lưu và tên tệp của mình. Để tìm hiểu thêm về lệnh find, hãy xem hướng dẫn Cách Tìm Tệp trong Linux .
Phần kết luận
Hướng dẫn này chỉ bao gồm những điều cơ bản, nhưng nó sẽ là một khởi đầu tốt cho bất kỳ ai muốn tìm hiểu cách tạo và khôi phục cơ sở dữ liệu MySQL từ dòng lệnh bằng tiện ích mysqldump.
Nếu bạn muốn tìm hiểu thêm về cách làm việc với MySQL từ dòng lệnh, hãy xem hướng dẫn Cách quản lý cơ sở dữ liệu và tài khoản người dùng MySQL .
Nếu bạn có bất kỳ câu hỏi hoặc phản hồi nào, vui lòng để lại bình luận.