สคริปต์สำรอง MySQL อัตโนมัติรายวันพร้อมลบไฟล์เก่า
การสำรองฐานข้อมูลด้วยมือเป็นครั้งคราวไม่พอสำหรับระบบที่ใช้งานจริง เพราะวันที่ต้องกู้คืนมักเป็นวันที่ไม่มีใครได้สำรองไว้ บทความนี้สร้างสคริปต์ Bash ที่สำรองทุกฐานข้อมูลบน MySQL หรือ MariaDB แยกเป็นไฟล์ละฐานข้อมูล บีบอัดด้วย gzip ลบไฟล์ที่เก่ากว่าจำนวนวันที่กำหนด และตั้งให้ทำงานทุกวันด้วย Cron
สคริปต์ออกแบบให้ปลอดภัยต่อการใช้งานจริง คือไม่ใส่รหัสผ่านในสคริปต์หรือใน Command Line ไม่ทิ้งไฟล์ที่สำรองไม่ครบไว้ให้เข้าใจผิดว่าเป็นไฟล์ที่ใช้ได้ และไม่รันซ้อนกันถ้ารอบก่อนยังไม่เสร็จ
สิ่งที่ต้องเตรียม
- เซิร์ฟเวอร์ Linux (Ubuntu 22.04/24.04 หรือ AlmaLinux/Rocky 8-9) ที่ติดตั้ง MySQL 8 หรือ MariaDB 10.x และมีสิทธิ์ root หรือ sudo
- พื้นที่ดิสก์ว่างพอสำหรับไฟล์สำรองหลายวัน ประมาณได้จากขนาดไฟล์สำรองหนึ่งรอบคูณจำนวนวันที่จะเก็บ
- พื้นฐานคำสั่ง mysqldump ดู สำรองและกู้คืนฐานข้อมูล MySQL/MariaDB ด้วย mysqldump
ถ้าใช้ Plesk หรือ DirectAdmin ระบบสำรองของ Control Panel อาจครอบคลุมอยู่แล้ว ดู สำรองและกู้คืนเว็บไซต์ด้วย Backup Manager บน Plesk และ สำรองและกู้คืนข้อมูลบน DirectAdmin สคริปต์ในบทความนี้เหมาะกับเซิร์ฟเวอร์ที่ไม่มี Control Panel หรือต้องการสำรองฐานข้อมูลแยกอีกชั้น
ขั้นตอนที่ 1: สร้างผู้ใช้สำหรับสำรองข้อมูลโดยเฉพาะ
ไม่ควรใช้ root ของฐานข้อมูลในสคริปต์ ให้สร้างผู้ใช้ที่มีสิทธิ์เท่าที่จำเป็นสำหรับการอ่านและ Dump เท่านั้น เข้า mysql ในฐานะผู้ดูแล
sudo mysql
CREATE USER 'backup'@'localhost' IDENTIFIED BY 'ตั้งรหัสผ่านยาวและสุ่ม';
GRANT SELECT, SHOW VIEW, TRIGGER, LOCK TABLES, EVENT, PROCESS, RELOAD ON *.* TO 'backup'@'localhost';
FLUSH PRIVILEGES;
สิทธิ์ PROCESS ใช้สำหรับ Dump ข้อมูล Tablespace บน MySQL 8 และ RELOAD ใช้ในบางกรณีร่วมกับ --single-transaction ผู้ใช้นี้แก้ไขหรือลบข้อมูลไม่ได้
ขั้นตอนที่ 2: เก็บรหัสผ่านในไฟล์ตั้งค่าที่มีสิทธิ์จำกัด
การใส่ -pรหัสผ่าน ใน Command Line จะทำให้รหัสผ่านปรากฏในรายการ Process ที่ผู้ใช้อื่นเห็นได้ ให้เก็บในไฟล์แทน
sudo nano /root/.my-backup.cnf
[client]
user=backup
password=ตั้งรหัสผ่านยาวและสุ่ม
ถ้ารหัสผ่านมีอักขระ # หรือ ; ให้ครอบด้วยเครื่องหมายคำพูด เช่น password="ab#12;cd" จากนั้นจำกัดสิทธิ์ให้ root อ่านได้เท่านั้น
sudo chmod 600 /root/.my-backup.cnf
ทดสอบว่าเชื่อมต่อได้ ตัวเลือก --defaults-extra-file ต้องเป็นตัวเลือกแรกของคำสั่งเสมอ
sudo mysql --defaults-extra-file=/root/.my-backup.cnf -e "SHOW DATABASES;"
ขั้นตอนที่ 3: สร้างสคริปต์สำรองข้อมูล
sudo nano /usr/local/sbin/mysql-backup.sh
ใส่เนื้อหาต่อไปนี้
#!/usr/bin/env bash
# สำรองทุกฐานข้อมูล MySQL/MariaDB แยกไฟล์ และลบไฟล์ที่เก่ากว่า RETENTION_DAYS
set -euo pipefail
BACKUP_DIR="/var/backups/mysql"
RETENTION_DAYS=14
CNF="/root/.my-backup.cnf"
STAMP="$(date +%F_%H%M)"
# MariaDB 11 ใช้ชื่อ mariadb / mariadb-dump ถ้าไม่มี mysql / mysqldump
MYSQL="$(command -v mysql || command -v mariadb)"
DUMP="$(command -v mysqldump || command -v mariadb-dump)"
# ป้องกันการรันซ้อน
exec 9>/run/mysql-backup.lock
flock -n 9 || { echo "$(date '+%F %T') previous backup still running, skip"; exit 1; }
umask 077
mkdir -p "$BACKUP_DIR"
DBS="$("$MYSQL" --defaults-extra-file="$CNF" -N -B -e 'SHOW DATABASES' \
| grep -Ev '^(information_schema|performance_schema|sys|mysql)- Categories:
- Cloud
- Tags:
- Cloud
- Cloud Server
Related Posts
หมวดหมู่ที่น่าสนใจ
- Account Settings
- AD Server
- AI
- Alibaba Cloud
- Anti-Spam Gateway
- AWS Amazon Web Services
- Campaign
- CentOS/AlmaLinux
- Cloud
- Cloud Backup
- Cloud Communication
- Cloud Migration
- Cloud Security
- Cloud Server Management
- Cloud Solution
- Cloud Solution for Government
- Cloud Solutions by Industry
- Cloud Storage
- Cloud VPS App Plus +
- Cloud VPS DirectAdmin
- Cloud VPS Plesk
- CSR
- Cyber Security
- Cybersecurity
- Data Sovereignty
- Database Server
- DDoS
- Digital Tranformation
- Digital Transformation
- Direct Mail
- Directadmin
- Domainname
- Ecommerce
- ERP
- Generative AI
- Getting Started
- Google Cloud
- Google G Suite
- Huawei Cloud
- IT News
- Linux Server
- Managed Cloud Services
- Managed Service Provider
- Manual
- Microsoft
- Microsoft 365
- Microsoft Azure
- News
- On-premise
- Private Mail Server
- Promotion
- Recommend Solution (Enterprise)
- Server
- Sovereign Cloud
- THAI DATA CLOUD Platform
- Ubuntu
- Ubuntu
- Uncategorized
- VMware
- VPS Server
- Web Design
- Web Hosting
- Web Hosting (DirectAdmin)
- Web Hosting (Plesk)
- Web Technologies
- Windows Server
- Wordpress
- Zimbra
- เรื่องราวความประทับใจ
- โซลูชันสำหรับธุรกิจการผลิตและยานยนต์
- โซลูชันสำหรับธุรกิจการศึกษา
- โซลูชันสำหรับธุรกิจการเงิน
- โซลูชันสำหรับธุรกิจขนส่งและกระจายสินค้า
- โซลูชันสำหรับธุรกิจค้าปลีก
- โซลูชันสำหรับธุรกิจท่องเที่ยว
- โซลูชันสำหรับธุรกิจบริการสุขภาพและโรงพยาบาล
- โซลูชันสำหรับธุรกิจประกันภัย
- โซลูชันสำหรับธุรกิจพลังงานและสาธารณูปโภค
- โซลูชันสำหรับธุรกิจสื่อสารมวลชนและเอ็นเตอร์เทนเมนท์
- โซลูชันสำหรับธุรกิจอสังหาริมทรัพย์
- โซลูชันสำหรับธุรกิจเทคโนโลยี


