1. บทนำ
MySQL เป็นหนึ่งในระบบจัดการฐานข้อมูลเชิงสัมพันธ์ (RDBMS) ที่ใช้กันอย่างแพร่หลายที่สุดสำหรับบริการเว็บและแอปพลิเคชันทางธุรกิจ ฐานข้อมูลที่สร้างด้วย MySQL มักทำหน้าที่เป็นแกนหลักของการดำเนินงานและบริการประจำวัน หากข้อมูลสูญหายเนื่องจากความล้มเหลวของระบบหรือข้อผิดพลาดของมนุษย์ อาจส่งผลกระทบอย่างสำคัญต่อความต่อเนื่องของธุรกิจ
นี่คือจุดที่ “การสำรองข้อมูล” มีความสำคัญอย่างยิ่ง MySQL มีเครื่องมือบรรทัดคำสั่งอย่างเป็นทางการชื่อ “mysqldump” ซึ่งช่วยให้คุณสามารถส่งออกเนื้อหาฐานข้อมูลได้อย่างง่ายดายและบันทึกเป็นไฟล์สำรอง
โดยการใช้เครื่องมือนี้ คุณสามารถจัดการความต้องการการดำเนินงานต่าง ๆ เช่น การกู้คืนจากภัยพิบัติ การย้ายไปยังสภาพแวดล้อมอื่น และการจัดเก็บสำรองเป็นระยะ
ในบทความนี้ เราจะอธิบายวิธีการส่งออกฐานข้อมูล MySQL ด้วย “mysqldump” ครอบคลุมตั้งแต่การใช้งานพื้นฐานจนถึงการกำหนดค่าขั้นสูง แม้ผู้เริ่มต้นก็สามารถทำตามได้ เนื่องจากเรามีคำอธิบายโดยละเอียดพร้อมตัวอย่างคำสั่งที่ใช้งานจริง
2. การใช้งานพื้นฐานของ mysqldump
mysqldump เป็นเครื่องมือบรรทัดคำสั่งที่ใช้ส่งออกเนื้อหาของฐานข้อมูล MySQL ไปเป็นไฟล์ SQL ไวยากรณ์พื้นฐานนั้นง่ายมาก และสามารถสร้างการสำรองข้อมูลได้ด้วยเพียงไม่กี่บรรทัดของคำสั่ง ในส่วนนี้ เราจะอธิบายวิธีการส่งออกที่ใช้บ่อย
การส่งออกฐานข้อมูลเดียว
กรณีการใช้งานที่พบบ่อยที่สุดคือการส่งออกฐานข้อมูลเดียวทั้งหมด
mysqldump -u username -p database_name > backup.sql
หลังจากดำเนินการ คุณจะถูกขอให้ใส่รหัสผ่าน และเนื้อหาของฐานข้อมูลที่ระบุจะถูกส่งออกไปยังไฟล์ชื่อ backup.sql
การส่งออกหลายฐานข้อมูล
หากคุณต้องการสำรองหลายฐานข้อมูลพร้อมกัน ให้ใช้ตัวเลือก --databases
mysqldump -u username -p --databases db1 db2 db3 > multi_backup.sql
ในรูปแบบนี้ จะมีคำสั่ง CREATE DATABASE สำหรับแต่ละฐานข้อมูล ซึ่งทำให้การกู้คืนเป็นไปอย่างน่าเชื่อถือและสะดวกยิ่งขึ้น
การส่งออกฐานข้อมูลทั้งหมด
เพื่อสำรองฐานข้อมูลทั้งหมดบนเซิร์ฟเวอร์ ให้ใช้ตัวเลือก --all-databases
mysqldump -u username -p --all-databases > all_backup.sql
คำสั่งนี้จะส่งออกฐานข้อมูลทั้งหมดที่มีอยู่บนเซิร์ฟเวอร์ MySQL (รวมถึง mysql, information_schema, performance_schema และอื่น ๆ )
ตัวอย่าง: รวมวันที่ในชื่อไฟล์ผลลัพธ์
สำหรับการสำรองข้อมูลตามกำหนดเวลา การรวมวันที่ในชื่อไฟล์ผลลัพธ์ทำให้การจัดการง่ายขึ้น ด้านล่างเป็นตัวอย่างการใช้เชลล์ UNIX:
mysqldump -u username -p database_name > backup_$(date +%F).sql
ด้วยวิธีนี้ จะมีไฟล์เช่น backup_2025-04-13.sql ถูกสร้างโดยอัตโนมัติ ทำให้การจัดการการสำรองข้อมูลเป็นระบบระเบียบมากขึ้น
3. รูปแบบการส่งออก
mysqldump สามารถทำได้มากกว่าการส่งออกฐานข้อมูลทั้งหมดเท่านั้น มันยังรองรับตัวเลือกการส่งออกที่ยืดหยุ่นตามความต้องการของคุณ ในส่วนนี้ เราจะแนะนำเทคนิคขั้นสูง เช่น การส่งออกตารางเฉพาะ การส่งออกเฉพาะสคีมาหรือข้อมูล และการส่งออกข้อมูลที่กรองด้วยเงื่อนไข
การส่งออกตารางเฉพาะ
หากคุณต้องการสำรองเฉพาะตารางบางตารางในฐานข้อมูล คุณสามารถระบุชื่อของตารางได้โดยตรง
mysqldump -u username -p database_name table1 table2 > selected_tables.sql
ตัวอย่าง:
mysqldump -u root -p mydb users orders > users_orders.sql
คำสั่งนี้จะส่งออกเฉพาะตาราง users และ orders จากฐานข้อมูล mydb
การส่งออกเฉพาะข้อมูลหรือเฉพาะสคีมา
mysqldump มีตัวเลือกให้ส่งออกเฉพาะคำนิยามสคีมาหรือเฉพาะข้อมูล
- ส่งออกสคีมา (โครงสร้าง) เท่านั้น:
mysqldump -u username -p --no-data database_name > schema_only.sql
- ส่งออกข้อมูลเท่านั้น (ยกเว้นคำสั่ง CREATE TABLE):
mysqldump -u username -p --no-create-info database_name > data_only.sql
ตัวเลือกเหล่านี้มีประโยชน์เมื่อแชร์สคีมาเท่านั้นระหว่างสภาพแวดล้อมการพัฒนาและการผลิต หรือเมื่อทำการนำเข้าข้อมูลแบบเพิ่มขั้น
การส่งออกข้อมูลด้วยเงื่อนไข (–where)
หากต้องการส่งออกเฉพาะส่วนย่อยของข้อมูล ให้ใช้ตัวเลือก --where ซึ่งใช้ไวยากรณ์เดียวกับเงื่อนไข WHERE ของ SQL.
mysqldump -u username -p database_name table_name --where="condition" > filtered_data.sql
ตัวอย่าง:
mysqldump -u root -p mydb users --where="created_at >= '2025-01-01'" > users_2025.sql
ในตัวอย่างนี้ จะส่งออกเฉพาะบันทึกที่สร้างตั้งแต่ปี 2025 เป็นต้นไปจากตาราง users เท่านั้น.
4. ตัวเลือกที่ใช้บ่อยและคำอธิบายของมัน
แม้ว่า mysqldump จะใช้งานง่าย การรวมตัวเลือกต่าง ๆ จะทำให้การสำรองข้อมูลปลอดภัยและมีประสิทธิภาพมากขึ้น ในส่วนนี้ เราจะอธิบายตัวเลือกที่ใช้บ่อยในสภาพแวดล้อมการทำงานจริง.
–single-transaction: รักษาความสอดคล้องของธุรกรรม
mysqldump -u username -p --single-transaction database_name > backup.sql
ตัวเลือกนี้มีประสิทธิภาพเมื่อใช้เครื่องเก็บข้อมูลที่รองรับธุรกรรม เช่น InnoDB มันทำกระบวนการ dump ภายในธุรกรรมเดียว ทำให้มั่นใจว่าข้อมูลสอดคล้องกันระหว่างการส่งออกโดยไม่ต้องใช้การล็อกการอ่าน ซึ่งเป็นประโยชน์อย่างยิ่งเมื่อคุณต้องการให้บริการทำงานต่อเนื่องระหว่างการสำรองข้อมูล.
หมายเหตุ: ตัวเลือกนี้ไม่มีผลต่อเครื่องเก็บข้อมูลที่ไม่รองรับธุรกรรม เช่น MyISAM.
–quick: ลดการใช้หน่วยความจำ
mysqldump -u username -p --quick database_name > backup.sql
ด้วยตัวเลือกนี้ mysqldump จะดึงแถวข้อมูลทีละแถวแทนการโหลดข้อมูลทั้งหมดเข้าสู่หน่วยความจำพร้อมกัน ซึ่งช่วยลดการใช้หน่วยความจำและเพิ่มความเสถียรขณะส่งออกตารางขนาดใหญ่.
–routines และ –events: รวมขั้นตอนจัดเก็บและเหตุการณ์
โดยค่าเริ่มต้น ขั้นตอนจัดเก็บและเหตุการณ์จะไม่ถูกรวมในการส่งออก ใช้ตัวเลือกต่อไปนี้เพื่อรวมเข้าด้วยกัน:
mysqldump -u username -p --routines --events database_name > backup_with_logic.sql
--routines: รวมขั้นตอนจัดเก็บและฟังก์ชัน--events: รวมเหตุการณ์ที่กำหนดเวลา
หากตรรกะทางธุรกิจถูกดำเนินการอย่างหนักที่ระดับฐานข้อมูล อย่าลืมใช้ตัวเลือกเหล่านี้.
–add-drop-table: มีประโยชน์สำหรับการเขียนทับตาราง
mysqldump -u username -p --add-drop-table database_name > backup.sql
ตัวเลือกนี้จะเพิ่มคำสั่ง DROP TABLE IF EXISTS ก่อนการกำหนดโครงสร้างของแต่ละตาราง หากมีตารางที่มีชื่อเดียวกันอยู่แล้วในสภาพแวดล้อมเป้าหมาย ตารางเหล่านั้นจะถูกลบก่อนที่จะสร้างใหม่.
–lock-tables: มีประสิทธิภาพสำหรับ MyISAM
mysqldump -u username -p --lock-tables database_name > backup.sql
แม้ว่ามักไม่จำเป็นสำหรับ InnoDB ตัวเลือกนี้จะล็อกตารางเพื่อป้องกันการเขียนระหว่างการส่งออกเมื่อใช้ MyISAM ซึ่งเป็นประโยชน์เมื่อความสอดคล้องเป็นสิ่งสำคัญ.

5. วิธีนำเข้าไฟล์ที่ส่งออก
ไฟล์ SQL ที่ส่งออกด้วย mysqldump สามารถกู้คืน (นำเข้า) ได้โดยใช้วิธีการนำเข้ามาตรฐานของ MySQL ในส่วนนี้ เราจะอธิบายพื้นฐานการนำเข้าจากไฟล์สำรอง ตัวอย่างการกู้คืนเชิงปฏิบัติ และข้อควรระวังสำคัญ.
คำสั่งนำเข้าพื้นฐาน
ไฟล์ SQL ที่ส่งออกสามารถนำเข้าได้อย่างง่ายดายโดยใช้คำสั่ง mysql ไวยากรณ์พื้นฐานมีดังนี้:
mysql -u username -p database_name < backup.sql
ตัวอย่าง:
mysql -u root -p mydb < backup.sql
เมื่อคุณรันคำสั่งนี้ คำสั่ง SQL ที่อยู่ใน backup.sql จะถูกดำเนินการตามลำดับ และฐานข้อมูลจะกลับสู่สภาพเดิม.
การนำเข้าไปยังฐานข้อมูลใหม่
เนื่องจากไฟล์สำรองอาจไม่มีคำสั่ง CREATE DATABASE หากคุณต้องการนำเข้าไปยังฐานข้อมูลที่มีชื่อแตกต่างกัน คุณต้องสร้างฐานข้อมูลใหม่ก่อนล่วงหน้า.
ตัวอย่าง: สร้างฐานข้อมูลใหม่ “mydb_restore” และนำเข้า
CREATE DATABASE mydb_restore;
mysql -u root -p mydb_restore < backup.sql
หมายเหตุ: SQL ที่ส่งออกด้วยตัวเลือก --databases จะรวมคำสั่ง CREATE DATABASE ดังนั้นควรทราบว่าขั้นตอนจะแตกต่างในกรณีนั้น.
การนำเข้าไฟล์บีบอัด (.gz)
หากไฟล์สำรองของคุณถูกบีบอัดด้วย gzip หรือคล้ายกัน คุณสามารถนำเข้าโดยตรงพร้อมกับการแตกไฟล์ได้:
gunzip < backup.sql.gz | mysql -u username -p database_name
This method allows you to restore quickly while saving disk space.
ข้อผิดพลาดทั่วไปในการนำเข้าและวิธีแก้ไข
| Error | Cause | Solution |
|---|---|---|
ERROR 1049 (42000): Unknown database | The target database does not exist | Create it in advance with CREATE DATABASE |
Access denied | Insufficient permissions or incorrect credentials | Recheck the username, password, and privileges |
ERROR 1064 (42000): You have an error in your SQL syntax | SQL format incompatibility between versions | Verify the dump matches the MySQL version you are using |
สรุป: ถือการนำเข้าเป็นส่วนหนึ่งของกระบวนการสำรองข้อมูล
ไฟล์สำรองที่สร้างด้วย mysqldump จะไม่มีคุณค่า หากคุณเพียงสร้างมันขึ้นมาเท่านั้น คุณค่าที่แท้จริงของการสำรองข้อมูลคือการทำให้แน่ใจว่าคุณสามารถกู้คืนได้เมื่อจำเป็น ด้วยเหตุนี้จึงแนะนำให้ทดสอบการนำเข้าเป็นประจำและยืนยันว่าไฟล์โหลดได้อย่างถูกต้อง.
6. เคล็ดลับและข้อควรระวังเชิงปฏิบัติ
แม้ mysqldump จะใช้งานง่าย แต่ฐานข้อมูลขนาดใหญ่และสภาพแวดล้อมการผลิตบางครั้งต้องการการดำเนินการอย่างระมัดระวังและกลยุทธ์เพิ่มเติม ในส่วนนี้เราจะแนะนำเทคนิคและข้อควรระวังเชิงปฏิบัติที่เป็นประโยชน์เพื่อช่วยป้องกันปัญหา.
บีบอัดฐานข้อมูลขนาดใหญ่ด้วย gzip
เนื่องจาก mysqldump สร้างไฟล์ SQL แบบข้อความธรรมดา ไฟล์เหล่านี้อาจมีขนาดใหญ่มาก สำหรับฐานข้อมูลขนาดใหญ่ที่เกินหลายกิกะไบต์ มักจะรวม mysqldump กับ gzip เพื่อบีบอัดผลลัพธ์.
mysqldump -u username -p database_name | gzip > backup.sql.gz
วิธีนี้สามารถลดการใช้ดิสก์ได้อย่างมีนัยสำคัญและยังลดภาระการถ่ายโอนระยะไกล.
ทำการตรวจสอบการส่งออกและการนำเข้าเป็นนิสัย
การสำรองข้อมูลไม่มีประโยชน์หากคุณไม่สามารถนำเข้าได้เมื่อจำเป็น เราแนะนำการดำเนินการดังต่อไปนี้:
- ทำการ กู้คืนการสำรองข้อมูลในสภาพแวดล้อมแยกเพื่อทดสอบ อย่างสม่ำเสมอ
- ตรวจสอบความสมบูรณ์ของไฟล์ด้วย md5sum หรือ sha256sum
- เก็บหลายรุ่นของการสำรองข้อมูล สำหรับฐานข้อมูลสำคัญ
ระวังความแตกต่างของเวอร์ชัน
หากเวอร์ชันของ MySQL แตกต่างกันระหว่างแหล่งส่งออกและเป้าหมายการนำเข้า ความแตกต่างในไวยากรณ์และพฤติกรรมภายในอาจทำให้ไฟล์ SQL ไม่สามารถทำงานได้อย่างถูกต้อง.
- หากเป็นไปได้ ดำเนินการบนเวอร์ชันเดียวกัน
- หากต้องข้ามเวอร์ชัน ควบคุมพฤติกรรมด้วยตัวเลือก (เช่น
--set-gtid-purged=OFF) - ก่อนและหลังการอัปเกรด ควรยืนยัน ความเข้ากันได้ของการกำหนดสคีม่า เสมอ
ใช้ cron และสคริปต์สำหรับการอัตโนมัติ
หากคุณต้องการทำการสำรองข้อมูลอัตโนมัติรายวันหรือรายสัปดาห์ การใช้สคริปต์เชลล์และ cron ทำให้การจัดการมีประสิทธิภาพ.
#!/bin/bash
DATE=$(date +%F)
mysqldump -u root -p[password] mydb | gzip > /backup/mydb_$DATE.sql.gz
โดยวางสคริปต์เช่นนี้ไว้ที่ /etc/cron.daily/ คุณสามารถเก็บสำรองข้อมูลโดยอัตโนมัติทุกวัน.
หมายเหตุ: เพื่อความปลอดภัย อย่าเขียนรหัสผ่านโดยตรง การจัดการรหัสผ่านอย่างปลอดภัยด้วยไฟล์
.my.cnfแนะนำ.
พิจารณาความปลอดภัยด้วย
ไฟล์สำรองอาจมีข้อมูลที่ละเอียดอ่อน โปรดดำเนินการตามมาตรการต่อไปนี้:
- ตั้ง ข้อจำกัดการเข้าถึง ที่เหมาะสมบนตำแหน่งจัดเก็บ
- เข้ารหัสการสำรองข้อมูลสำหรับการจัดเก็บและการถ่ายโอน (เช่น ใช้ GPG หรือ SFTP)
- เมื่อจัดเก็บในคลาวด์ พิจารณา การตั้งค่าการสำรองอัตโนมัติและการจัดการวงจรชีวิต
7. คำถามที่พบบ่อย (FAQ)
ในส่วนนี้ เราจะสรุปคำถามทั่วไปและปัญหาที่พบบ่อยเมื่อใช้ mysqldump ในรูปแบบคำถาม-ตอบ.
Q1. ทำไมฉันถึงได้รับข้อผิดพลาด “Access denied” ระหว่างการส่งออก?
A. ผู้ใช้ MySQL ที่ระบุอาจไม่มีสิทธิ์ที่จำเป็น เช่น “SELECT” หรือ “LOCK TABLES” บนฐานข้อมูลเป้าหมาย ตรวจสอบสิทธิ์ที่จำเป็นและขอให้ผู้ดูแลระบบมอบให้หากต้องการ หากการล็อกตารางล้มเหลว การใช้ตัวเลือก --single-transaction อาจช่วยได้ในบางกรณี.
Q2. ไฟล์สำรองมีขนาดใหญ่มาก มีวิธีลดขนาดหรือไม่?
A. หากคุณมีตารางขนาดใหญ่หรือข้อมูลจำนวนมาก ไฟล์ SQL อาจมีขนาดหลายกิกะไบต์ คุณสามารถลดขนาดได้โดยใช้วิธีต่อไปนี้:
- บีบอัดด้วย
gzip(ตัวอย่าง:mysqldump ... | gzip > backup.sql.gz) - ใช้
--no-dataหรือ--no-create-infoเพื่อส่งออกเฉพาะสิ่งที่คุณต้องการ - ใช้ตัวเลือก
--whereเพื่อกรองข้อมูลที่ส่งออก (เช่น ช่วงวันที่เฉพาะ)
Q3. ฉันจะส่งออกเฉพาะตารางที่ต้องการได้อย่างไร?
A. ระบุชื่อของตารางที่ส่วนท้ายของคำสั่งเพื่อส่งออกเฉพาะตารางที่เลือก.
mysqldump -u root -p mydb users orders > selected.sql
นี่เป็นประโยชน์เมื่อคุณต้องการสำรองข้อมูลเฉพาะบางตารางแทนที่จะสำรองฐานข้อมูลทั้งหมด
Q4. ทำไมขั้นตอนจัดเก็บและเหตุการณ์จึงไม่ได้รวมอยู่ในการส่งออก?
A. โดยค่าเริ่มต้น mysqldump จะไม่รวมขั้นตอนจัดเก็บ (routines) หรือเหตุการณ์ที่กำหนดเวลาไว้ หากต้องการรวมไว้ ให้เพิ่มตัวเลือกต่อไปนี้:
--routines --events
นอกจากนี้ให้ตรวจสอบว่าผู้ใช้มีสิทธิ์เพียงพอในการเข้าถึงวัตถุเหล่านี้
Q5. ควรระวังอะไรบ้างเมื่อโอนย้ายไฟล์สำรองไปยังเซิร์ฟเวอร์อื่น?
A. ประเด็นสำคัญที่ควรพิจารณา:
- Character encoding : หากการเข้ารหัสแตกต่างระหว่างเซิร์ฟเวอร์ อาจทำให้ข้อความแสดงเป็นอักขระผิดพลาด ให้ระบุ
--default-character-set=utf8อย่างชัดเจนหากจำเป็น - Version differences : ตรวจสอบความเข้ากันได้ระหว่างเวอร์ชัน MySQL บนต้นทางและปลายทาง
- Secure file transfer : ใช้
scp,rsyncหรือSFTPสำหรับการโอนย้ายที่ปลอดภัย - File integrity checks : ตรวจสอบความสมบูรณ์หลังการโอนย้ายโดยใช้
md5sumหรือsha256sum
Q6. มีความแตกต่างระหว่างคำสั่งบน Windows กับ Mac/Linux หรือไม่?
A. ไวยากรณ์คำสั่งพื้นฐานเหมือนกัน แต่มีความแตกต่างในพฤติกรรมของเชลล์ การประมวลผลแบบ batch และการใช้คำสั่ง date ตัวอย่างเช่น เมื่อสร้างชื่อไฟล์ที่มีวันที่ Windows อาจใช้ PowerShell หรือตัวแปร %DATE% ในขณะที่ Linux และ macOS ใช้คำสั่ง date
8. สรุป
ในบทความนี้ เราได้ครอบคลุมเครื่องมือสำรองและย้ายข้อมูล MySQL “mysqldump” ตั้งแต่การใช้งานพื้นฐานจนถึงเทคนิคขั้นสูงและการแก้ไขปัญหา
แม้ mysqldump จะใช้ไวยากรณ์ที่ง่าย แต่การเลือกตัวเลือกและการกำหนดค่าคำสั่งที่เหมาะสมตามวัตถุประสงค์ของคุณ จะส่งผลอย่างมีนัยสำคัญต่อคุณภาพของการสำรองและความน่าเชื่อถือของการกู้คืน
✅ ประเด็นสำคัญจากบทความนี้
- Basic mysqldump syntax and three export methods (single, multiple, and all databases)
- Flexible export variations such as schema-only, data-only, and selected tables
- Important options for real‑world use including
--single-transactionand--routines - Basic restore commands and how to handle import errors
- Practical tips such as gzip compression and cron automation
- Useful troubleshooting knowledge provided in the FAQ section
🛡 แนวทางปฏิบัติที่ดีที่สุดสำหรับการใช้ mysqldump
- อย่าเพียงแค่สร้างสำเนาสำรอง—ตรวจสอบว่ามันสามารถกู้คืนได้
- เตรียมพร้อมรับปัญหาที่เกิดจากความแตกต่างของเวอร์ชันและการเข้ารหัสอักขระ
- ออกแบบการดำเนินการสำรองด้วยการบีบอัด, การอัตโนมัติ, และการควบคุมการเข้าถึงที่เหมาะสม
- รวมขั้นตอนจัดเก็บและเหตุการณ์เพื่อให้สอดคล้องกับการกำหนดค่าการผลิตของคุณ
ระบบสำรองที่ออกแบบและดำเนินการอย่างเหมาะสมโดยใช้ mysqldump จะช่วยให้การกู้คืนอย่างรวดเร็วในกรณีที่เกิดความล้มเหลวที่ไม่คาดคิดและส่งเสริมการดำเนินงานของระบบให้มีความน่าเชื่อถือ โดยเฉพาะอย่างยิ่งสำหรับระบบองค์กรและเว็บไซต์ WordPress ที่การสูญเสียข้อมูลอาจมีผลกระทบรุนแรง การเข้าใจและใช้ mysqldump อย่างมีประสิทธิภาพจึงเป็นสิ่งสำคัญ
ใช้คู่มือนี้เป็นอ้างอิงเพื่อสร้างกลยุทธ์การสำรองที่เหมาะสมที่สุดสำหรับสภาพแวดล้อมของคุณ


