สร้าง Backup MariaDB Custom Script Debian 12 (2026) - คู่มือละเอียด

KP
กิตติภูมิ แสงทอง
DevOps & Cloud Engineer
📅 20 May 2026
⏱️ อ่าน 3 นาที
How-to: สร้าง Custom Script เพื่อ Backup Database MariaDB บน Debian 12 ในปี 2026

How-to: สร้าง Custom Script เพื่อ Backup Database MariaDB บน Debian 12 ในปี 2026

นั่งดู GitHub เมื่อคืน แล้วเจอ repo ที่น่าสนใจมาก... บทความจากต่างประเทศเกี่ยวกับวิธีสร้าง custom script backup database MariaDB บน Debian 12 ปี 2026 ผมอ่านแล้วรู้สึกว่ามีหลายอย่างที่พอจะนำมาปรับใช้กับสภาพแวดล้อมของเราได้เลย ผมเลยอยากมาเล่าให้เพื่อน dev ไทยที่อาจจะเจอปัญหาแบบนี้บ้าง มาฟังกันครับ

1. ทำไมต้อง Backup เอง?

Computer screen displaying lines of code
Photo by Bernd 📷 Dittrich on Unsplash

ปกติเรามักจะใช้ tools สำเร็จรูปสำหรับ backup database อยู่แล้ว แต่บางทีก็รู้สึกว่ามันยุ่งยากเกินไป หรือไม่ตรงกับความต้องการของเราเท่าไหร่ เช่น อาจจะต้องการ backup เฉพาะบางตาราง หรือต้องการบันทึกผลลัพธ์เป็น format ที่เราต้องการมากกว่า การเขียน script เองจะทำให้เราควบคุมได้มากขึ้น และปรับแต่งได้ตามใจชอบ เหมือนกับการทำอาหารเองที่บ้าน แทนที่จะสั่งอาหารสำเร็จรูปทุกที มันอาจจะเสียเวลาหน่อย แต่ได้รสชาติที่ถูกปากเราที่สุดครับ

2. เครื่องมือที่เราใช้

ในบทความนั้นเขาใช้เครื่องมือหลักๆ คือ `mysqldump` ซึ่งเป็น command-line utility ที่มาพร้อมกับ MariaDB มันช่วยให้เราสร้างไฟล์ dump ของ database ได้ ไฟล์ dump นี้ก็คือไฟล์ที่มีข้อมูลทั้งหมดของ database ที่เราจะเอาไป restore ได้ ผมว่ามันใช้ง่ายและมีประสิทธิภาพดีครับ ถ้าเทียบกับ tools อื่นๆ ที่ซับซ้อนกว่า


# mysqldump -u [username] -p[password] [database_name] > backup.sql

คำสั่งนี้จะ backup database ชื่อ `[database_name]` โดยใช้ username `[username]` และ password `[password]` แล้วบันทึกผลลัพธ์เป็นไฟล์ชื่อ `backup.sql` ข้อดีคือฟรีครับ ไม่มีค่าใช้จ่ายอะไรเลย แต่ต้องระวังเรื่องความปลอดภัยด้วยนะครับ อย่าปล่อย password ให้คนอื่นรู้

3. สร้าง Script Backup (ตัวอย่าง)

Computer screen displaying code and project files
Photo by Bernd 📷 Dittrich on Unsplash

ผมลองเขียน script ง่ายๆ เพื่อ automate การ backup database แล้ว ซึ่งก็คือการรันคำสั่ง `mysqldump` ด้วยตัวเอง เราสามารถใช้ shell script (เช่น Bash) เพื่อจัดการการรันคำสั่งนี้ได้ และเราสามารถเพิ่มการจัดการไฟล์ หรือส่งอีเมลแจ้งเตือนได้ด้วย


#!/bin/bash

# Configuration
DB_USER="your_db_user"
DB_PASSWORD="your_db_password"
DB_NAME="your_db_name"
BACKUP_DIR="/path/to/backup/directory"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
BACKUP_FILE="${BACKUP_DIR}/${DB_NAME}_${TIMESTAMP}.sql.gz"

# Backup command
mysqldump -u ${DB_USER} -p${DB_PASSWORD} ${DB_NAME} | gzip > ${BACKUP_FILE}

# Check if backup was successful
if [ $? -eq 0 ]; then
  echo "Backup successful: ${BACKUP_FILE}"
  # Add email notification here
  # echo "Backup complete - send email"
else
  echo "Backup failed!"
  exit 1
fi

**คำอธิบาย:**

  • `#!/bin/bash`: บอกว่า script นี้ใช้ Bash interpreter
  • `DB_USER`, `DB_PASSWORD`, `DB_NAME`, `BACKUP_DIR`: ตัวแปรที่เรากำหนดค่าต่างๆ ควรเปลี่ยนเป็นค่าจริงของคุณ
  • `TIMESTAMP`: สร้าง timestamp เพื่อใช้เป็นชื่อไฟล์ backup ทำให้เราสามารถจัดเรียง backup ได้ง่าย
  • `mysqldump ...`: คำสั่ง backup database เราใช้ `gzip` เพื่อบีบอัดไฟล์ backup ทำให้มันมีขนาดเล็กลง
  • `if [ $? -eq 0 ]`: ตรวจสอบว่าคำสั่ง `mysqldump` สำเร็จหรือไม่ ถ้าสำเร็จ (`$?` จะเป็น 0) แสดงข้อความว่า backup สำเร็จ

**ผมคิดว่า:** Script นี้เหมาะสำหรับคนที่ต้องการ backup database เองแบบง่ายๆ แต่ถ้าต้องการความยืดหยุ่นมากขึ้น หรือต้องการ backup database หลายๆ database พร้อมกัน อาจจะต้องเขียน script ที่ซับซ้อนขึ้น

4. การจัดการ Backup และ Retention Policy

การ backup เพียงอย่างเดียวไม่พอ เราต้องจัดการ backup เหล่านั้นด้วย เช่น การเก็บไว้ระยะเวลานานแค่ไหน หรือจะลบออกเมื่อเกินกำหนด เรื่องนี้เรียกว่า “Retention Policy” ถ้าไม่มี retention policy backup ของเราจะเยอะจนไม่มีประโยชน์

เราสามารถใช้คำสั่ง `find` เพื่อค้นหาไฟล์ backup แล้วใช้คำสั่ง `rm` เพื่อลบไฟล์ backup ที่เก่าเกินไป แต่ต้องระวังไม่ให้ลบไฟล์ backup ที่เราต้องการไว้ด้วย


# Find backups older than 30 days and delete them
find /path/to/backup/directory -name "*.sql.gz" -type f -mtime +30 -delete

**ข้อควรระวัง:** ก่อนที่จะลบไฟล์ backup ให้ตรวจสอบให้แน่ใจว่าเราต้องการลบจริงๆ หรือจะลอง restore ไฟล์ backup นั้นก่อนก็ได้ อย่าลืมสำรองข้อมูล backup ที่เรากำลังจะลบด้วยนะครับ เหมือนกับการสำรองข้อมูลสำคัญก่อนที่จะลบอะไรไป

5. การ Integrate กับ CI/CD

ถ้าเรามี CI/CD pipeline การ backup database ก็ควรจะอยู่ใน pipeline ด้วย เช่น เราสามารถใช้ script ที่ผมเขียนไว้ แล้วรันมันเป็น part ของ CI/CD pipeline ได้ เพื่อให้ backup database ทำงานอัตโนมัติทุกครั้งที่ code ถูก commit มันจะช่วยให้เรามั่นใจได้ว่า database ของเราจะถูก backup เสมอ

ตัวอย่าง: เราสามารถใช้ `cron` job เพื่อรัน script backup ทุกวัน หรือทุกสัปดาห์ หรือเราสามารถใช้ CI/CD tool (เช่น Jenkins, GitLab CI) เพื่อรัน script backup ทุกครั้งที่ code ถูก build

ถ้าคุณใช้ tools อย่าง Gitlab CI, คุณสามารถเพิ่ม job ที่รัน script นี้ได้เลยครับ ก็แค่กำหนด environment variables ที่จำเป็น เช่น username, password, database name และให้ CI/CD tool รัน script นั้นในทุก stage ของ pipeline

เชื่อมโยงบทความ: แก้ไข DNS ล้มเหลว CentOS Stream 9: ตรวจสอบและแก้ปัญหาอย่างรวดเร็ว Migrate MySQL to MongoDB 2026: ข้อผิดพลาด & วิธีแก้ปัญหา 5 ข้อผิดพลาด Transformer Chatbot 2026: ป้องกัน & พัฒนา

a close up of a computer screen with text
Photo by Markus Spiske on Unsplash

FAQ

  1. Q: ผมควรเก็บ backup ไว้ที่ไหน?

    A: ควรเก็บ backup ไว้ที่ location ที่ปลอดภัย และแยกจาก server จริง เพื่อป้องกันความเสียหายในกรณีที่ server เสียหาย แนะนำให้ใช้ cloud storage เช่น AWS S3 หรือ Google Cloud Storage ครับ

  2. Q: ผมควร backup database บ่อยแค่ไหน?

    A: ขึ้นอยู่กับความถี่ในการเปลี่ยนแปลงข้อมูลใน database ของคุณ ถ้าข้อมูลมีการเปลี่ยนแปลงบ่อย ควร backup database บ่อยๆ เช่น ทุกชั่วโมง หรือทุกวัน แต่ถ้าข้อมูลเปลี่ยนแปลงน้อย อาจจะ backup database ทุกวัน หรือทุกสัปดาห์ก็ได้

  3. Q: ถ้า backup ไฟล์เสียหาย ผมจะทำยังไง?

    A: ควรมี backup หลายๆ copies และควรทดสอบการ restore backup เป็นประจำ เพื่อตรวจสอบว่า backup ทำงานได้ถูกต้อง ถ้า backup ไฟล์เสียหาย ให้ลอง restore จาก backup copy อื่น หรือให้ติดต่อผู้เชี่ยวชาญเพื่อช่วยแก้ไขปัญหาครับ

ว่าแล้วกันครับ เคยเจอปัญหาแบบนี้บ้างไหมครับ?

Boonyadol Morruchai (Senior Full-stack Developer)

ผมเป็น IT Professional ที่มีประสบการณ์ในสายงานมากว่า 20 ปี เชี่ยวชาญการออกแบบระบบ Enterprise และ Automation Tools ปัจจุบันมุ่งเน้นการประยุกต์ใช้ AI (Gemini/OpenAI) เพื่อเพิ่มประสิทธิภาพในการเขียน Code และการจัดการข้อมูลขนาดใหญ่ บล็อกนี้สร้างขึ้นเพื่อแชร์ "ประสบการณ์หน้างาน" ปัญหาจริงที่เจอ และวิธีแก้ปัญหาฉบับ Senior Dev ครับ

แสดงความคิดเห็น

ใหม่กว่า เก่ากว่า