คำตอบสั้น ๆ: สำรองฐานข้อมูล MySQL หรือ MariaDB เป็นไฟล์ SQL ด้วย mysqldump แบบไม่ต้องหยุดเว็บไซต์ กู้คืนกลับด้วยคำสั่ง mysql และตั้งให้สำรองอัตโนมัติทุกวัน
คู่มือนี้อธิบาย mysqldump ทีละขั้นตอน พร้อมคำสั่งที่ใช้ได้จริงและปัญหาที่พบบ่อย
mysqldump เป็นเครื่องมือมาตรฐานที่มากับ MySQL และ MariaDB ใช้ส่งออกฐานข้อมูลเป็นไฟล์ข้อความที่มีคำสั่ง SQL สำหรับสร้างตารางและใส่ข้อมูลกลับเข้าไป ไฟล์นี้นำไปกู้คืนบนเซิร์ฟเวอร์เดิมหรือเครื่องใหม่ได้ เหมาะกับฐานข้อมูลขนาดเล็กถึงกลาง (ระดับไม่กี่ GB) ซึ่งครอบคลุมเว็บไซต์ส่วนใหญ่
ควรสำรองก่อนทุกการเปลี่ยนแปลงสำคัญ เช่น อัปเดตปลั๊กอินหรือเวอร์ชันของแอป ย้ายเซิร์ฟเวอร์ หรือแก้ข้อมูลจำนวนมาก สำหรับผู้ใช้ Plesk ที่ต้องการสำรองทุกฐานข้อมูลในเซิร์ฟเวอร์ ดูเพิ่มที่ วิธี backup ฐานข้อมูล MySQL ทั้งหมดผ่าน command-line บน Plesk Linux
สิ่งที่ต้องเตรียม
- เข้าเซิร์ฟเวอร์ผ่าน SSH ได้
- ชื่อผู้ใช้และรหัสผ่านฐานข้อมูลที่มีสิทธิ์อย่างน้อย
SELECT,SHOW VIEW,TRIGGERและLOCK TABLESกับฐานข้อมูลที่จะสำรอง (ผู้ใช้ที่ได้ALL PRIVILEGESของฐานข้อมูลนั้นใช้ได้เลย) - พื้นที่ดิสก์ว่างมากพอ ตรวจด้วย
df -h
บน MariaDB เวอร์ชันใหม่ คำสั่งมีชื่อใหม่ว่า mariadb-dump และ mariadb ส่วน mysqldump และ mysql ยังใช้ได้บน MariaDB 10.x ตัวอย่างในคู่มือใช้ชื่อเดิมเพื่อให้ใช้ได้กับทั้งสองระบบ
ขั้นตอนที่ 1: สำรองฐานข้อมูลเดียว
mysqldump -u shopuser -p --single-transaction --routines --triggers \
--default-character-set=utf8mb4 shopdb > shopdb-2026-09-19.sql--single-transactionสำรองตาราง InnoDB ในสภาพที่สอดคล้องกัน ณ เวลาเดียว โดยไม่ล็อกตาราง เว็บไซต์จึงทำงานต่อได้ระหว่างสำรอง--routinesและ--triggersรวม Stored Procedure, Function และ Trigger ไปด้วย--default-character-set=utf8mb4ป้องกันภาษาไทยเพี้ยน
ใส่รหัสผ่านเมื่อระบบถาม หากไม่มี Error แสดงว่าสำเร็จ ตรวจท้ายไฟล์ได้ด้วย
tail -n 1 shopdb-2026-09-19.sqlบรรทัดสุดท้ายต้องเป็น -- Dump completed on ... หากไม่มี แปลว่าการสำรองหยุดกลางคัน
สำหรับฐานข้อมูลขนาดใหญ่ ให้บีบอัดไปพร้อมกันเพื่อประหยัดพื้นที่
mysqldump -u shopuser -p --single-transaction --routines --triggers \
--default-character-set=utf8mb4 shopdb | gzip > shopdb-2026-09-19.sql.gzหากต้องการสำรองทุกฐานข้อมูลในเซิร์ฟเวอร์ ใช้สิทธิ์ root และ --all-databases แทนชื่อฐานข้อมูล เช่น sudo mysqldump --all-databases --single-transaction --routines --triggers --events | gzip > all-databases.sql.gz
ขั้นตอนที่ 2: กู้คืนฐานข้อมูล
หมายเหตุ: การกู้คืนจะเขียนทับตารางที่มีชื่อเดียวกันในฐานข้อมูลปลายทาง หากฐานข้อมูลนั้นมีข้อมูลที่ยังใช้อยู่ ให้สำรองข้อมูลปัจจุบันเก็บไว้ก่อนเสมอ หรือกู้คืนลงฐานข้อมูลชื่อใหม่เพื่อตรวจสอบก่อน
ไฟล์จาก mysqldump แบบฐานข้อมูลเดียวไม่มีคำสั่งสร้างฐานข้อมูล จึงต้องมีฐานข้อมูลปลายทางก่อน หากยังไม่มีให้สร้างตามคู่มือ สร้างฐานข้อมูลและผู้ใช้ MySQL/MariaDB พร้อมกำหนดสิทธิ์ แล้วกู้คืนด้วย
mysql -u shopuser -p --default-character-set=utf8mb4 shopdb < shopdb-2026-09-19.sqlสำหรับไฟล์ที่บีบอัดไว้
gunzip < shopdb-2026-09-19.sql.gz | mysql -u shopuser -p --default-character-set=utf8mb4 shopdbคำสั่งจะไม่แสดงอะไรหากสำเร็จ ฐานข้อมูลขนาดใหญ่อาจใช้เวลาหลายนาที ห้ามปิดหน้าต่าง SSH ระหว่างนั้น หากกังวลเรื่องการเชื่อมต่อหลุด ให้รันใน tmux หรือ screen