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

Để 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 mysqlcô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.

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments