Hướng dẫn tự động sao lưu dữ liệu MySQL hoặc MariaDB
Hướng dẫn tự động sao lưu dữ liệu MySQL hoặc MariaDB, cách backup database MySQL hoặc MariaDB auto để tránh những cuộc tấn công từ web.
Database Backup
1. Đăng nhập vào cơ sở dữ liệu MySQL hoặc MariaDB của bạn, chạy lệnh bên dưới để tạo cơ sở dữ liệu người dùng db_user_backups để xử lý các bản sao lưu:
GRANT LOCK TABLES, SELECT, SHOW VIEW, REPLICATION CLIENT ON *.* TO 'db_user_backups'@'%' IDENTIFIED BY '{COMPLEX-PASSWORD}';
Đồng thời, chạy lệnh bên dưới để đảm bảo MySQL được cấu hình để khôi phục đúng với quy trình đã lưu:
SET GLOBAL log_bin_trust_function_creators = 1;
2. Thiết lập cấu trúc thư mục và các tập tin cần thiết
# create backup directory with environment and log file sudo mkdir /backups && cd /backups sudo touch .env db-backup.sh db-backup.log sudo chmod -R 775 /backups sudo chmod -R g+s /backups sudo chmod +x db-backup.sh # add mysql backup user credentials into environment file echo "export MYSQL_USER=db_user_backups" > /backups/.env echo "export MYSQL_PASS={COMPLEX-PASSWORD}" >> /backups/.env
3. Mở db-backup.sh nano /backups/db-backup.sh và dán lệnh bên dưới, sau đó lưu lại file (Ctrl+X -> Y -> hit Enter)
DB_NAMES=( 'db-vultr-site' 'db-vultr-blog' 'db-vultr-app' ) #replace with your own database name(s) BKUP_NAMES=() BKUP_DIR="/backups" # get total number of directories total_dbs=${#DB_NAMES[@]} # create backup file names for (( i=0; i<${total_dbs}; i++ )); do BKUP_NAMES[$i]="`date +%Y%m%d%H%M`-backup-$${DB_NAMES[$i]}.sql.gz" done # get backup users credentials source $BKUP_DIR/.env # create backups for (( i=0; i<${total_dbs}; i++ )); do # NOTE: --routines flag makes sure stored procedures are also backed up mysqldump --routines -u ${MYSQL_USER} -p${MYSQL_PASS} | gzip > ${BKUP_DIR}/${BKUP_NAMES[$i]} done
Cronjob Setup
Setup một cronjob để chạy mỗi nửa đêm, nó sẽ chạy tập lệnh sao lưu và lưu kết quả/đầu ra vào nhật ký dự phòng.
1. Mở crontab
crontab -e
2. Thêm mục dưới đây và crontab
0 0 * * * /usr/bin/env bash /backups/db-backup.sh &>> /backups/db-backup.log
Lưu ý: Trong khi testing, bạn có thể đặt crontab để chạy 1 phút thay vì như bên dưới.
* * * * * /usr/bin/env bash /backups/db-backup.sh &>> /backups/db-backup.log
-OR- cứ mỗi 5 phút (thay số 5 bằng số phút bạn mong muốn)
*/5 * * * * /usr/bin/env bash /backups/db-backup.sh &>> /backups/db-backup.log
Trên đây là hướng dẫn tự động backup MySQL Database/MariaDB database cho người mới. Chúc các bạn thành công!