DevOps

Automate Database Backup และส่งไป Cloud Storage อัตโนมัติ

เผยแพร่ · แก้ไขล่าสุด

บทนำ

ข้อมูลในฐานข้อมูลเป็นสิ่งสำคัญที่สุดของธุรกิจใดๆ การสูญหาย์ข้อมูล อาจทำให้เสียหายอย่างมหาศาล วิธีที่ดีที่สุดในการป้องกันคือการสำรองข้อมูลแบบอัตโนมัติ บทความนี้จะสอนวิธีใช้ mysqldump หรือ pg_dump เพื่อสำรองข้อมูลโดยอัตโนมัติ และส่งไปยังที่เก็บข้อมูลบนคลาวด์ เช่น Amazon S3, Backblaze B2 หรือใช้ rclone ในการจัดการ

เตรียมความพร้อมก่อนเริ่มต้น

คุณต้องติดตั้ง mysqldump (สำหรับ MySQL/MariaDB) หรือ pg_dump (สำหรับ PostgreSQL) อยู่แล้ว และติดตั้ง rclone เพื่อให้สามารถส่งข้อมูลไปยังคลาวด์ได้ หากใช้ Cloud VPS จาก Dot Enterprise (https://de.co.th/cloud-vps) คุณสามารถเข้าถึง Full Control ของเซิร์ฟเวอร์เพื่อติดตั้ง Tool ต่างๆ ได้อย่างอิสระ

ติดตั้ง mysqldump และ rclone

ขั้นแรกให้ติดตั้ง mysqldump และ rclone:

<!-- wp:code --><code>sudo apt update
sudo apt install -y mysql-client-core-8.0
# หรือสำหรับ PostgreSQL
sudo apt install -y postgresql-client</code><!-- /wp:code -->

จากนั้นติดตั้ง rclone:

<!-- wp:code --><code>curl https://rclone.org/install.sh | sudo bash</code><!-- /wp:code -->

ตั้งค่า rclone สำหรับ S3 หรือ Backblaze B2

เพื่อให้ rclone สามารถส่งข้อมูลไปยังคลาวด์ได้ ให้ทำการตั้งค่า:

<!-- wp:code --><code>rclone config</code><!-- /wp:code -->

เลือก "n" เพื่อสร้าง Remote ใหม่ และทำตามขั้นตอนในการตั้งค่า S3 หรือ Backblaze B2

สร้างสคริปต์ Backup สำหรับ MySQL

สร้างไฟล์ Bash Script สำหรับ Backup ฐานข้อมูล MySQL:

<!-- wp:code --><code>#!/bin/bash
DB_USER="your_db_user"
DB_PASSWORD="your_db_password"
DB_NAME="your_database"
BACKUP_DIR="/home/backup"
S3_BUCKET="s3:your-bucket/backups"
DATE=$(date +\%Y-\%m-\%d_\%H-\%M-\%S)

mkdir -p $BACKUP_DIR

# Dump Database
mysqldump -u $DB_USER -p$DB_PASSWORD $DB_NAME > $BACKUP_DIR/$DB_NAME-$DATE.sql

# Compress
gzip $BACKUP_DIR/$DB_NAME-$DATE.sql

# Upload to S3
rclone copy $BACKUP_DIR/$ S3_BUCKET --include "*-$DATE.sql.gz"

# Clean local backup (optional)
rm $BACKUP_DIR/$DB_NAME-$DATE.sql.gz</code><!-- /wp:code -->

สำหรับ PostgreSQL

หากใช้ PostgreSQL ให้สร้างสคริปต์เดียวกัน แต่ใช้ pg_dump แทน:

<!-- wp:code --><code>#!/bin/bash
DB_USER="your_db_user"
DB_NAME="your_database"
BACKUP_DIR="/home/backup"
BLACKBLAZE_BUCKET="b2:your-bucket/backups"
DATE=$(date +\%Y-\%m-\%d_\%H-\%M-\%S)

mkdir -p $BACKUP_DIR

# Dump Database
pg_dump -U $DB_USER $DB_NAME > $BACKUP_DIR/$DB_NAME-$DATE.sql

# Compress
gzip $BACKUP_DIR/$DB_NAME-$DATE.sql

# Upload to Backblaze B2
rclone copy $BACKUP_DIR/$ BLACKBLAZE_BUCKET --include "*-$DATE.sql.gz"

# Clean local backup
rm $BACKUP_DIR/$DB_NAME-$DATE.sql.gz</code><!-- /wp:code -->

ตั้งค่า Cron Job สำหรับ Backup อัตโนมัติ

เพื่อให้การ Backup เกิดขึ้นทุกวัน ให้ตั้งค่า Cron Job:

<!-- wp:code --><code>sudo crontab -e</code><!-- /wp:code -->

เพิ่มบรรทัดต่อไปนี้:

<!-- wp:code --><code>0 2 * * * /usr/local/bin/backup-database.sh >> /var/log/backup.log 2>&1</code><!-- /wp:code -->

บรรทัดนี้จะรันสคริปต์ Backup ทุกวันเวลา 2 โมงเช้า และเก็บ Log ไว้ใน /var/log/backup.log

สรุป

การสำรองข้อมูลฐานข้อมูลแบบอัตโนมัติช่วยให้ข้อมูลปลอดภัยและไม่เสียหายจากอุบัติเหตุ เมื่อใช้ Cloud VPS จาก Dot Enterprise (https://de.co.th/cloud-vps) คุณสามารถตั้งค่า mysqldump, pg_dump และ rclone ได้อย่างเต็มที่ การสำรองข้อมูลไปยัง S3, Backblaze B2 หรือที่เก็บอื่นจะช่วยให้ข้อมูลของคุณปลอดภัยเสมอ

  • CI/CD Pipeline ด้วย GitHub Actions
  • Docker Compose สำหรับ Deployment
  • ตั้งค่า Jenkins CI/CD
  • GitLab CI/CD Pipeline
  • Terraform Infrastructure as Code