การส่งออกฐานข้อมูล MySQL ด้วย mysqldump อย่างมีประสิทธิภาพทำอย่างไร?

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

download-icon
ดาวน์โหลดฟรี
สำหรับ VM, OS, DB, ไฟล์, NAS, ฯลฯ
sea-kantapohn

Updated by ซี กันตภณ on 2025/12/23

สารบัญ
  • mysqldump คืออะไร

  • วิธีส่งออกฐานข้อมูล MySQL โดยใช้ mysqldump

  • อีกวิธีหนึ่ง: ใช้ SELECT...INTO OUTFILE เพื่อส่งออกข้อมูล MySQL

  • การป้องกันข้อมูลสูงสุดสำหรับระบบนิเวศฐานข้อมูลของคุณ

  • สรุป

ในการบำรุงรักษาระบบประจำวัน การส่งออกข้อมูลเป็นสิ่งที่สำคัญ และ mysqldump เป็นเครื่องมือที่ใช้กันบ่อยสำหรับการส่งออกข้อมูล เครื่องมือนี้มาพร้อมพารามิเตอร์ฟังก์ชันในตัวจำนวนมาก บทความนี้จะจัดรายการการดำเนินการที่ใช้บ่อยบางอย่าง

mysqldump คืออะไร 

mysqldump เป็นโปรแกรมลูกค้าของ MySQL ที่ใช้สำหรับถ่ายโอนฐานข้อมูล จะสร้างชุดคำสั่ง SQL ที่สามารถบรรจุลงในไฟล์ได้ โดยไฟล์นี้จะมีคำสั่ง SQL ทั้งหมดที่จำเป็นต้องใช้ในการสร้างฐานข้อมูลของคุณขึ้นมาใหม่ เช่น CREATE DATABASE, CREATE TABLE, INSERT เป็นต้น ซึ่งสามารถใช้สำหรับการย้ายหรือกู้คืนฐานข้อมูลอย่างรวดเร็วและเบาะๆ เป็นวิธีหนึ่งที่ใช้สำหรับการสำรองข้อมูลเชิงตรรกะในฐานข้อมูล MySQL 

วิธีส่งออกฐานข้อมูล MySQL โดยใช้ mysqldump

1. ส่งออกฐานข้อมูลทั้งหมด  

คำสั่งนี้จะส่งออกฐานข้อมูลทั้งหมด รวมถึงฐานข้อมูลระบบด้วย

mysqldump -uroot -proot --all-databases > /tmp/all.sql

2. ส่งออกข้อมูลทั้งหมดจากฐานข้อมูล db1 และ db2

mysqldump -uroot -proot --databases db1 db2 > /tmp/user.sql

ส่งออกฐานข้อมูลหลายรายการ ทุกพารามิเตอร์ที่อยู่หลังตัวเลือกจะถือว่าเป็นชื่อฐานข้อมูล  

เพิ่มคำสั่ง DROP DATABASE ก่อนการสร้างฐานข้อมูลแต่ละรายการ 

mysqldump -uroot -p --databases test --add-drop-database

3. ส่งออกตาราง a1 และ a2 จาก db1

หมายเหตุ การส่งออกตารางที่ระบุสามารถทำได้เฉพาะฐานข้อมูลเดียวเท่านั้น และเนื้อหาที่ส่งออกไปจะแตกต่างจากการส่งออกฐานข้อมูล เนื้อหาข้อความที่ส่งออกไปสำหรับตารางที่ระบุจะไม่รวมคำสั่งสร้างฐานข้อมูล จะรวมเฉพาะคำสั่ง DROP TABLE, CREATE TABLE, และ INSERT เท่านั้น

mysqldump -uroot -proot --databases db1 --tables a1 a2 > /tmp/db1.sql

แทนที่พารามิเตอร์ --databases และระบุตารางที่ต้องการส่งออก  

mysqldump -uroot -p --host=localhost --databases test --tables test

ส่งออก tablespace ทั้งหมด

mysqldump -uroot -p --databases test --all-tablespaces

ไม่รวมข้อมูล tablespace ทั้งหมดจากการส่งออก

mysqldump -uroot -p --databases test --no-tablespaces

เพิ่มคำสั่ง DROP TABLE ก่อนสร้างแต่ละตาราง (เปิดใช้งานโดยค่าเริ่มต้น ใช้ --skip-add-drop-table เพื่อปิดการใช้งาน)  

mysqldump -uroot -p --databases test
mysqldump -uroot -p --databases test --skip-add-drop-table

4. การส่งออกแบบมีเงื่อนไข: ส่งออกบันทึกที่มี id=1 จากตาราง a1 ใน db1

สามารถส่งออกแบบมีเงื่อนไขได้เฉพาะกับตารางเดียวเท่านั้น

mysqldump -uroot -proot --databases db1 --tables a1 --where='id=1' > /tmp/a1.sql

ดัมป์เฉพาะระเบียนที่ถูกเลือกโดยเงื่อนไข WHERE ที่กำหนด หากเงื่อนไขมีตัวแปลคำสั่ง ช่องว่าง หรืออักขระพิเศษ จะต้องอยู่ในเครื่องหมายคำพูด

mysqldump -uroot -p --host=localhost --databases db1 --where="user='root'"

5. ส่งออกรูปแบบตารางเท่านั้น โดยไม่รวมข้อมูล 

mysqldump -uroot -proot --no-data --databases db1 > /tmp/db1.sql

ส่งออกข้อมูลเท่านั้น โดยไม่เพิ่มคำสั่ง CREATE DATABASE  

mysqldump -uroot -p --host=localhost --databases db1 --no-create-db

ส่งออกข้อมูลเท่านั้น โดยไม่เพิ่มคำสั่ง CREATE TABLE  

mysqldump -uroot -p --host=localhost --databases db1 --no-create-info

ยกเว้นตารางเฉพาะ ในการเพิกเฉยตารางหลายตาราง ให้ทำซ้ำตัวเลือกสำหรับแต่ละตาราง แต่ละตารางต้องระบุชื่อฐานข้อมูลและชื่อตาราง เช่น --ignore-table=database.table1 --ignore-table=database.table2 ...  

mysqldump -uroot -p --host=localhost --databases db1 --ignore-table=mysql.user

ใช้โหมดการแทรกแบบล่าช้า (INSERT DELAYED) เมื่อส่งออกข้อมูล 

mysqldump -uroot -p --databases db1 --delayed-insert

ใช้คำสั่ง INSERT พร้อมข้อความ VALUES หลายรายการ สิ่งนี้จะช่วยลดขนาดไฟล์ที่ส่งออกและเร่งความเร็วในการนำเข้า เปิดใช้งานโดยค่าเริ่มต้น ใช้ --skip-extended-insert เพื่อปิดการใช้งาน  

mysqldump -uroot -p --databases db1
mysqldump -uroot -p --databases db1 --skip-extended-insert

6. ส่งออกและนำเข้าข้อมูลระหว่างเซิร์ฟเวอร์

mysqldump --host=h1 -uroot -proot --databases db1 | mysql --host=h2 -uroot -proot db2

หมายความว่า การส่งออกข้อมูลทั้งหมดจาก db1 บนเซิร์ฟเวอร์ h1 และนำเข้าไปยัง db2 บน h2 ต้องมีฐานข้อมูล db2 อยู่ก่อนแล้ว มิฉะนั้นจะเกิดข้อผิดพลาด  

ใช้ named pipe เพื่อเชื่อมต่อกับ MySQL

mysqldump -uroot -p --host=localhost --all-databases --pipe
mysqldump -uroot -p --host=localhost --all-databases --protocol=tcp

เปิดใช้งานการบีบอัดสำหรับการสื่อสารระหว่างไคลเอนต์และเซิร์ฟเวอร์

mysqldump -uroot -p --all-databases --compress

7. เพิ่มตำแหน่ง binlog และชื่อไฟล์ของฐานข้อมูลหลักในไฟล์ส่งออก 

ตัวเลือกนี้ เมื่อรันบนเซิร์ฟเวอร์สลีฟ จะเทียบเท่ากับการดำเนินการ SHOW SLAVE STATUS  

การตั้งค่าเป็น 1 จะแสดงผลคำสั่ง CHANGE MASTER ในไฟล์ข้อมูล

การตั้งค่าเป็น 2 จะเพิ่มความคิดเห็นก่อน CHANGE MASTER  

ตัวเลือกนี้จะเปิดใช้งาน --lock-all-tables เว้นแต่จะระบุ --single-transaction

หลังจากดำเนินการแล้ว --lock-tables จะถูกปิดใช้งานโดยอัตโนมัติ ค่าเริ่มต้นสำหรับ --dump-slave คือ 1 

mysqldump -uroot -proot --dump-slave=1 --database db1 > /tmp/db1.sql
mysqldump -uroot -proot --dump-slave=2 --database db1 > /tmp/db1.sql

ส่งออกเหตุการณ์

mysqldump -uroot -p --all-databases --events

8. ล้างบันทึกก่อนส่งออก  

หมายเหตุ: หากส่งออกฐานข้อมูลหลายรายการ (--databases หรือ --all-databases) การล้างบันทึกจะดำเนินการต่อหนึ่งฐานข้อมูล หากใช้ --lock-all-tables หรือ --master-data การล้างบันทึกจะทำเพียงครั้งเดียวโดยล็อกตารางทั้งหมด เพื่อส่งออกและล้างบันทึกพร้อมกัน ให้ใช้ --lock-all-tables หรือ --master-data ร่วมกับ --flush-logs 

mysqldump -uroot -p --all-databases --flush-logs

9. ตรวจสอบให้แน่ใจว่าสถานะมีความต่อเนื่องระหว่างการส่งออก

ก่อนการส่งออกข้อมูล ตัวเลือกนี้จะออกคำสั่ง BEGIN ของ SQL BEGIN จะไม่ปิดกั้นแอปพลิเคชันใด ๆ และรับประกันความสอดคล้องของฐานข้อมูลในระหว่างการส่งออก ใช้ได้เฉพาะกับเครื่องมือจัดเก็บแบบหลายเวอร์ชัน (เช่น InnoDB) เท่านั้น ตัวเลือกนี้ขัดแย้งกับ --lock-tables เพราะ LOCK TABLES จะยืนยันการทำธุรกรรมที่ค้างอยู่โดยนัย สำหรับการส่งออกตารางขนาดใหญ่ ให้ใช้ร่วมกับตัวเลือก --quick

mysqldump -uroot -p --host=localhost --all-databases --single-transaction

10. ส่งออกขั้นตอนการจัดเก็บและฟังก์ชัน

mysqldump -uroot -p --host=localhost --all-databases --routines

อีกวิธีหนึ่ง: ใช้ SELECT...INTO OUTFILE เพื่อส่งออกข้อมูล MySQL  

SELECT...INTO OUTFILE เป็นคำสั่งซินแท็กซ์ของ MySQL ที่ใช้สำหรับส่งออกผลลัพธ์การค้นหาไปยังไฟล์ โดยใน MySQL คุณสามารถใช้คำสั่งนี้เพื่อส่งออกข้อมูลไปยังไฟล์ข้อความได้อย่างง่ายดาย  

การใช้งานพื้นฐาน:  

SELECT column1, column2, ...  
INTO OUTFILE 'file_path'  
FROM your_table  
WHERE your_conditions;

ตัวอย่าง:  

SELECT id, name, email  
INTO OUTFILE '/tmp/user_data.csv'  
FIELDS TERMINATED BY ','  
LINES TERMINATED BY '\n'  
FROM users;

ในคำสั่ง SQL ข้างต้น เราได้เลือกคอลัมน์ id, name และ email จากตาราง users และเขียนผลลัพธ์ลงในไฟล์ /tmp/user_data.csv โดย FIELDS TERMINATED BY ',' ระบุตัวคั่นคอลัมน์ (เครื่องหมายจุลภาค) และ LINES TERMINATED BY '\n' ระบุตัวคั่นแถว (บรรทัดใหม่)

หมายเหตุสำคัญ:  

การดำเนินการ SELECT...INTO OUTFILE ต้องมีสิทธิ์ที่เหมาะสม และไดเรกทอรีของไฟล์ผลลัพธ์จะต้องเป็นตำแหน่งที่เซิร์ฟเวอร์ MySQL สามารถเขียนไฟล์ได้

ในตัวอย่างต่อไปนี้ เราจะส่งออกข้อมูลจากตาราง runoob_tbl ไปยังไฟล์ /tmp/runoob.txt:  

mysql> SELECT * FROM runoob_tbl  
    -> INTO OUTFILE '/tmp/runoob.txt';

คุณสามารถระบุรูปแบบเอาต์พุตโดยใช้ตัวเลือกคำสั่ง ตัวอย่างต่อไปนี้ส่งออกข้อมูลในรูปแบบ CSV:  

mysql> SELECT * FROM passwd INTO OUTFILE '/tmp/runoob.txt'  
    -> FIELDS TERMINATED BY ',' ENCLOSED BY '"'  
    -> LINES TERMINATED BY '\r\n';

คุณสมบัติของ SELECT ... INTO OUTFILE

  • LOAD DATA INFILE เป็นการทำงานที่ตรงข้ามกับ SELECT ... INTO OUTFILE หากต้องการเขียนข้อมูลจากฐานข้อมูลไปยังไฟล์ ให้ใช้ SELECT ... INTO OUTFILE และหากต้องการอ่านไฟล์กลับเข้าสู่ฐานข้อมูล ให้ใช้ LOAD DATA INFILE

  • คำสั่ง SELECT ในรูปแบบ SELECT...INTO OUTFILE 'file_name' จะเขียนแถวที่ถูกเลือกไปยังไฟล์ เนื่องจากไฟล์จะถูกสร้างบนโฮสต์เซิร์ฟเวอร์ คุณจึงต้องมีสิทธิ์ FILE เพื่อใช้ไวยากรณ์นี้  

  • ไฟล์ผลลัพธ์ต้องไม่มีอยู่ก่อน เพื่อป้องกันการเปลี่ยนแปลงข้อมูล  

  • คุณต้องมีบัญชีที่สามารถเข้าสู่ระบบเซิร์ฟเวอร์ได้เพื่อดึงไฟล์นี้ มิฉะนั้นคำสั่ง SELECT ... INTO OUTFILE จะไม่ทำงาน  

  • ในระบบยูนิกซ์ หลังจากที่ไฟล์ถูกสร้างขึ้นแล้ว ไฟล์จะสามารถอ่านได้ และสิทธิ์การเข้าถึงจะเป็นของเซิร์ฟเวอร์ MySQL ซึ่งหมายความว่า แม้คุณจะสามารถอ่านไฟล์ได้ แต่คุณอาจไม่สามารถลบไฟล์นั้นได้

การป้องกันข้อมูลสูงสุดสำหรับระบบนิเวศฐานข้อมูลของคุณ

ในยุคที่ความยืดหยุ่นของข้อมูลมีความสำคัญ การเลือกวิธีการสำรองข้อมูลที่มีความสามารถในการปรับขนาดระดับโลกและรองรับหลายคลาวด์จึงเป็นกุญแจสำคัญ Vinchin Backup & Recovery โดดเด่นด้วยการปกป้อง MySQL ที่แข็งแกร่ง ซึ่งออกแบบมาโดยเฉพาะสำหรับองค์กรข้ามชาติ:

 กลยุทธ์การสำรองข้อมูลอย่างครอบคลุม

รองรับกลยุทธ์การสำรองข้อมูลแบบฮ็อตแบ็กอัพ แบ็กอัพเต็ม แบ็กอัพเพิ่มเติม และการสำรองบันทึกธุรกรรม

 การรองรับฐานข้อมูลแบบสากล

รวมการป้องกันไว้ด้วยกันสำหรับ MySQL, Oracle, SQL Server และอื่น ๆ ในสภาพแวดล้อมแบบไฮบริด (กายภาพ/คลาวด์/VM)

ทำให้การจัดการง่ายขึ้นด้วยคอนโซลเดียวสำหรับนโยบายการสำรองข้อมูลฐานข้อมูลหลายตัว

✅ การเสริมความแข็งแกร่งด้านการป้องกันแรนซัมแวร์

การจัดเก็บข้อมูลสำรองแบบเข้ารหัส + คุณสมบัติป้องกันแรนซัมแวร์เพื่อต่อต้านการโจมตีจากภัยคุกคาม

การสนับสนุนระดับโลก ประสิทธิภาพในท้องถิ่น

บริการช่วยเหลือด้านเทคนิคตลอด 24 ชั่วโมงทุกวัน และการให้สิทธิ์ใช้งานที่ประหยัดต้นทุน เหมาะอย่างยิ่งสำหรับวิสาหกิจขนาดกลางและขนาดย่อม รวมถึงทีมงานที่กระจายตัว

ในการสร้างงานสำรองข้อมูลฐานข้อมูล MySQL ด้วย Vinchin โปรดไปที่หน้า การสำรองข้อมูลแบบฟิสิกส์ > การสำรองข้อมูลฐานข้อมูล > การสำรองข้อมูล

1. เลือกฐานข้อมูลที่ต้องการสำรองข้อมูล

สำรองข้อมูล MySQL Database

2. เลือกโหนดสำรองที่คุณต้องการให้ประมวลผลและจัดเก็บข้อมูลสำรอง

สำรองข้อมูล MySQL Database

3. กำหนดกลยุทธ์การสำรองข้อมูลตามความต้องการของคุณ

สำรองข้อมูล MySQL

4. ตรวจสอบและยืนยันการตั้งค่า

สำรองข้อมูล MySQL Database

Vinchin เป็นที่ไว้วางใจของสถาบันการเงินและโครงสร้างพื้นฐานไอทีข้ามชาติในกว่า 60 ประเทศ คลิกปุ่มด้านล่างเพื่อลองใช้งาน ทดลองใช้ฟรี 60 วัน จาก Vinchin เพื่อสัมผัสประสบการณ์โซลูชันสำรองข้อมูลที่มีประสิทธิภาพและเชื่อถือได้

สรุป

ในบทความนี้ เราได้สำรวจตัวเลือกต่างๆ ของ mysqldump สำหรับการส่งออกข้อมูลฐานข้อมูล MySQL อย่างมีประสิทธิภาพ ตั้งแต่การส่งออกฐานข้อมูลทั้งหมด ไปจนถึงการส่งออกที่ละเอียดมากขึ้น เช่น ตารางเดียวหรือระเบียนเฉพาะเจาะจง การเข้าใจคำสั่งเหล่านี้และฟังก์ชันการทำงานจะช่วยให้กระบวนการสำรองข้อมูล การย้าย และกู้คืนฐานข้อมูลเป็นไปอย่างราบรื่น

แชร์บน:

Categories: Database Tips