คู่มือ MySQL mysqldump: แนวทางครบวงจรสำหรับการส่งออก, สำรอง, และกู้คืนฐานข้อมูล

目次

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.

ข้อผิดพลาดทั่วไปในการนำเข้าและวิธีแก้ไข

ErrorCauseSolution
ERROR 1049 (42000): Unknown databaseThe target database does not existCreate it in advance with CREATE DATABASE
Access deniedInsufficient permissions or incorrect credentialsRecheck the username, password, and privileges
ERROR 1064 (42000): You have an error in your SQL syntaxSQL format incompatibility between versionsVerify 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-transaction and --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

  1. อย่าเพียงแค่สร้างสำเนาสำรอง—ตรวจสอบว่ามันสามารถกู้คืนได้
  2. เตรียมพร้อมรับปัญหาที่เกิดจากความแตกต่างของเวอร์ชันและการเข้ารหัสอักขระ
  3. ออกแบบการดำเนินการสำรองด้วยการบีบอัด, การอัตโนมัติ, และการควบคุมการเข้าถึงที่เหมาะสม
  4. รวมขั้นตอนจัดเก็บและเหตุการณ์เพื่อให้สอดคล้องกับการกำหนดค่าการผลิตของคุณ

ระบบสำรองที่ออกแบบและดำเนินการอย่างเหมาะสมโดยใช้ mysqldump จะช่วยให้การกู้คืนอย่างรวดเร็วในกรณีที่เกิดความล้มเหลวที่ไม่คาดคิดและส่งเสริมการดำเนินงานของระบบให้มีความน่าเชื่อถือ โดยเฉพาะอย่างยิ่งสำหรับระบบองค์กรและเว็บไซต์ WordPress ที่การสูญเสียข้อมูลอาจมีผลกระทบรุนแรง การเข้าใจและใช้ mysqldump อย่างมีประสิทธิภาพจึงเป็นสิ่งสำคัญ

ใช้คู่มือนี้เป็นอ้างอิงเพื่อสร้างกลยุทธ์การสำรองที่เหมาะสมที่สุดสำหรับสภาพแวดล้อมของคุณ