❤️ AZDIGI chính thức cập nhật hệ thống blog mới hoàn chỉnh. Tuy nhiên có thể một số bài viết bị sai lệch hình ảnh, hãy ấn nút Báo cáo bài viết ở cuối bài để AZDIGI cập nhật trong thời gian nhanh nhất. Chân thành cám ơn.
Backup database là một trong những thao tác quan trọng nhất khi quản trị máy chủ Linux. Dù bạn đang chuẩn bị migrate server, cập nhật ứng dụng, hay đơn giản là muốn có bản sao phòng trường hợp sự cố, việc biết cách backup và restore database bằng dòng lệnh sẽ rất hữu ích. Trong bài này, mình sẽ hướng dẫn chi tiết cách backup và import database MySQL/MariaDB, PostgreSQL trên máy chủ Linux.
1. Backup database MySQL cơ bản
Công cụ phổ biến nhất để backup MySQL là mysqldump. Lệnh cơ bản như sau:
mysqldump -u root -p ten_database > backup.sql
Trong đó:
-u root: user MySQL (thay bằng user của bạn).-p: hệ thống sẽ hỏi password sau khi chạy lệnh.ten_database: tên database cần backup.backup.sql: file đầu ra chứa toàn bộ cấu trúc và dữ liệu.
2. Backup tất cả databases
Nếu muốn backup toàn bộ databases trên server, bạn dùng flag --all-databases:
mysqldump -u root -p --all-databases > all_databases.sql
Lệnh này sẽ dump toàn bộ databases bao gồm cả các database hệ thống như mysql, information_schema. Rất hữu ích khi bạn cần migrate toàn bộ server.
3. Backup với các options nâng cao
Trong thực tế, bạn nên thêm một số options để đảm bảo backup đầy đủ và nhất quán:
mysqldump -u root -p --single-transaction --routines --triggers ten_database > backup.sql
Giải thích các options:
--single-transaction: Backup mà không lock bảng (chỉ áp dụng cho InnoDB). Rất quan trọng với database đang chạy production vì không làm gián đoạn dịch vụ.--routines: Bao gồm stored procedures và functions trong bản backup.--triggers: Bao gồm triggers (mặc định đã bật, nhưng thêm vào cho chắc).
4. Import/Restore database
Để import (restore) database từ file backup, bạn dùng lệnh mysql:
mysql -u root -p ten_database < backup.sql
Lưu ý: Database đích phải đã được tạo sẵn trước khi import. Nếu chưa có, bạn tạo bằng lệnh:
mysql -u root -p -e "CREATE DATABASE ten_database;"
Nếu bạn backup bằng --all-databases, khi restore không cần chỉ định tên database:
mysql -u root -p < all_databases.sql
5. Backup nén để tiết kiệm dung lượng
Database lớn có thể tạo ra file backup hàng GB. Để tiết kiệm dung lượng, bạn nén trực tiếp khi backup:
mysqldump -u root -p --single-transaction ten_database | gzip > backup.sql.gz
Khi cần restore từ file nén:
gunzip < backup.sql.gz | mysql -u root -p ten_database
File nén bằng gzip thường nhỏ hơn 5 đến 10 lần so với file SQL gốc, rất đáng để sử dụng.
6. MariaDB trên AlmaLinux
Trên AlmaLinux (và CentOS), MariaDB thường được cài mặc định thay vì MySQL. Tin vui là các lệnh backup/restore hoàn toàn tương thích:
mysqldumpvẫn hoạt động bình thường trên MariaDB.- MariaDB cũng cung cấp lệnh
mariadb-dump(alias mới), dùng lệnh nào cũng được. - Tương tự,
mysqlvàmariadbđều dùng để import.
# Trên AlmaLinux với MariaDB
mariadb-dump -u root -p ten_database > backup.sql
mariadb -u root -p ten_database < backup.sql
7. Backup PostgreSQL
Nếu bạn dùng PostgreSQL thay vì MySQL, công cụ tương ứng là pg_dump và psql:
Backup:
pg_dump -U postgres ten_database > backup.sql
Restore:
psql -U postgres ten_database < backup.sql
Backup tất cả databases PostgreSQL:
pg_dumpall -U postgres > all_databases.sql
8. Tự động backup bằng Cron
Backup thủ công dễ quên. Bạn nên thiết lập cron job để tự động backup hàng đêm. Tạo một script backup:
#!/bin/bash
# /root/backup-db.sh
BACKUP_DIR="/root/db-backups"
DATE=$(date +%Y-%m-%d)
KEEP_DAYS=7
mkdir -p $BACKUP_DIR
# Backup tất cả databases
mysqldump -u root --single-transaction --all-databases | gzip > $BACKUP_DIR/all-db-$DATE.sql.gz
# Xóa backup cũ hơn 7 ngày
find $BACKUP_DIR -name "*.sql.gz" -mtime +$KEEP_DAYS -delete
echo "Backup completed: $DATE"
Cấp quyền thực thi và thêm vào crontab:
chmod +x /root/backup-db.sh
crontab -e
Thêm dòng sau để chạy lúc 2 giờ sáng mỗi ngày:
0 2 * * * /root/backup-db.sh >> /var/log/backup-db.log 2>&1
Lưu ý về mật khẩu: Để cron chạy không cần nhập password, bạn tạo file /root/.my.cnf:
[mysqldump]
user=root
password=mat_khau_cua_ban
Sau đó phân quyền chặt để chỉ root đọc được:
chmod 600 /root/.my.cnf
Tổng kết
Backup database là thao tác không thể thiếu khi quản trị server. Hãy nhớ các điểm chính: dùng mysqldump cho MySQL/MariaDB, pg_dump cho PostgreSQL, luôn thêm --single-transaction cho InnoDB, nén bằng gzip để tiết kiệm dung lượng, và thiết lập cron để tự động hóa. Đừng đợi đến khi mất dữ liệu mới bắt đầu backup!
Chúc bạn thực hiện thành công!
Có thể bạn cần xem thêm
- Backup & Restore dữ liệu Docker Volume
- Backup VPS Linux - rsync, tar và chiến lược sao lưu toàn diện
- Lệnh backup và restore MySQL trên Linux
- Backup và phục hồi sự cố cho VPS Linux - Kế hoạch toàn diện
- Deploy WordPress + MySQL + phpMyAdmin bằng Docker Compose
- Shell Scripting cơ bản trên Linux - Tự động hóa tác vụ VPS
Về tác giả
Quân Đỗ Trung
Mình là Quân, hiện đang công tác tại AZDIGI với vai trò SysAdmin. Mình có niềm đam mê với việc viết blog, vì thông qua việc viết lách, mình có thể trau dồi thêm nhiều kỹ năng, học hỏi được nhiều kiến thức mới. Từ đó, mình mong muốn chia sẻ lại cho mọi người những bài viết và tài liệu hữu ích, mang tính thực tiễn cao.