วิธีสำรองข้อมูลตารางเฉพาะด้วย mysqldump: คู่มือฉบับสมบูรณ์พร้อมตัวอย่างและแนวปฏิบัติที่ดีที่สุด

1. Introduction

MySQL เป็นระบบจัดการฐานข้อมูลที่ใช้โดยเว็บไซต์และแอปพลิเคชันหลายแห่ง ในเครื่องมือของมัน คำสั่ง “mysqldump” มีความสำคัญเป็นพิเศษเมื่อทำการสำรองข้อมูลหรือการย้ายฐานข้อมูล โดยเฉพาะอย่างยิ่งเมื่อคุณต้องการสำรองเฉพาะตารางบางตารางจากฐานข้อมูลขนาดใหญ่ คำสั่งนี้จะมีประโยชน์อย่างมาก

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

2. Basic Syntax of the mysqldump Command

ก่อนอื่น เรามาทบทวนการใช้งานพื้นฐานของคำสั่ง mysqldump กัน คำสั่งนี้ใช้เพื่อดัมพ์ (สำรอง) โครงสร้างและข้อมูลของฐานข้อมูลทั้งหมดหรือเฉพาะตาราง

Basic Syntax

โดยระบุชื่อผู้ใช้, รหัสผ่าน, ชื่อฐานข้อมูล, และชื่อตารางตามที่แสดงด้านล่าง คุณสามารถสำรองตารางเฉพาะได้

mysqldump -u username -p database_name table_name > output_file.sql
  • -u : ระบุชื่อผู้ใช้ที่ใช้เข้าถึงฐานข้อมูล
  • -p : ระบุรหัสผ่าน (ระบบจะให้คุณป้อนเมื่อรันคำสั่ง)
  • database_name : ชื่อฐานข้อมูลที่ต้องการดัมพ์
  • table_name : ตารางเฉพาะที่ต้องการดัมพ์
  • > output_file.sql : ระบุไฟล์ผลลัพธ์

Commonly Used Options

  • --single-transaction : ทำให้การสำรองตาราง InnoDB มีความสอดคล้องของธุรกรรม
  • --skip-lock-tables : ป้องกันการล็อกตารางระหว่างการสำรอง

3. How to Dump Specific Tables

Dumping a Single Table

เพื่อสำรองเฉพาะตารางเดียว ให้ระบุชื่อตารางหลังจากชื่อฐานข้อมูล ตัวอย่างต่อไปนี้จะแสดงการดัมพ์เฉพาะตาราง users

mysqldump -u root -p my_database users > users_dump.sql

คำสั่งนี้จะบันทึกโครงสร้างและข้อมูลของตาราง users ในฐานข้อมูล my_database ไปยังไฟล์ users_dump.sql.

Dumping Multiple Tables

หากต้องการสำรองหลายตารางพร้อมกัน ให้ระบุตารางโดยคั่นด้วยช่องว่าง

mysqldump -u root -p my_database users orders products > multiple_tables_dump.sql

ในตัวอย่างข้างต้น ตารางสามตาราง users, orders และ products จะถูกดัมพ์พร้อมกัน.

Dumping Using a Table List

เมื่อดัมพ์ตารางจำนวนมาก การระบุชื่อตารางทุกตารางด้วยตนเองอาจทำให้ยุ่งยาก ในกรณีเช่นนี้คุณสามารถใช้คำสั่ง SHOW TABLES หรือสคริปต์เพื่อสร้างรายการตารางที่จะดัมพ์โดยอัตโนมัติ

mysql -u root -p my_database -N -e "SHOW TABLES LIKE 'hoge%'" > table_list.txt
mysqldump -u root -p my_database `cat table_list.txt` > partial_dump.sql

วิธีนี้ช่วยให้คุณสำรองเฉพาะตารางที่ตรงกับรูปแบบที่กำหนดได้อย่างมีประสิทธิภาพ.

4. Options and Advanced Usage

mysqldump มีตัวเลือกหลายอย่างที่ช่วยให้คุณสร้างการสำรองข้อมูลได้อย่างยืดหยุ่นตามความต้องการ ด้านล่างเป็นตัวเลือกบางส่วนสำหรับสถานการณ์เฉพาะ

Dumping Structure Only

หากคุณไม่ต้องการข้อมูลและต้องการสำรองเฉพาะโครงสร้างของตาราง ให้ใช้ตัวเลือก --no-data

mysqldump -u root -p my_database --no-data users > users_structure.sql

คำสั่งนี้จะดัมพ์เฉพาะโครงสร้างของตาราง users โดยไม่รวมข้อมูลใด ๆ

Dumping Data Only

ในทางกลับกัน หากต้องการดัมพ์เฉพาะข้อมูลของตาราง ให้ใช้ตัวเลือก --no-create-info

mysqldump -u root -p my_database --no-create-info users > users_data.sql

คำสั่งนี้จะละเว้นโครงสร้างของตารางและดัมพ์เฉพาะข้อมูล

Dumping Data Based on Specific Conditions

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

mysqldump -u root -p my_database users --where="id > 100" > users_filtered_dump.sql

วิธีนี้ช่วยให้คุณดึงและสำรองข้อมูลที่จำเป็นจากฐานข้อมูลขนาดใหญ่ได้เท่านั้น.

5. Practical Usage Examples

Use Case 1: การสำรองข้อมูลตารางเดียว

สำหรับกรณีที่คุณต้องการสำรองเฉพาะตาราง salary ในฐานข้อมูล employees ให้ใช้คำสั่งต่อไปนี้:

mysqldump -u root -p employees salary > salary_dump.sql

Use Case 2: การสำรองข้อมูลด้วยเงื่อนไข

เพื่อดัมพ์ข้อมูลเฉพาะช่วงที่ต้องการ ให้ใช้ตัวเลือก --where ตัวอย่างเช่น เพื่อสำรองเฉพาะแถวที่ค่า id ในตาราง users มากกว่า 100:

mysqldump -u root -p my_database users --where="id > 100" > users_partial_dump.sql

6. หมายเหตุสำคัญและแนวปฏิบัติที่ดีที่สุด

ปัญหาการล็อกตาราง

เมื่อใช้ mysqldump ตารางอาจถูกล็อก ทำให้ไม่สามารถดำเนินการอื่น ๆ ได้ ซึ่งอาจเป็นปัญหาอย่างมากในระบบการผลิต เพื่อหลีกเลี่ยงปัญหานี้ แนะนำให้ใช้ตัวเลือก --single-transaction สำหรับตาราง InnoDB ให้รวมกับตัวเลือก --skip-lock-tables เพื่อเพิ่มความปลอดภัยอีกระดับหนึ่ง

การจัดการปริมาณข้อมูลขนาดใหญ่

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

mysqldump -u root -p my_database | gzip > backup_$(date +%Y%m%d).sql.gz

คำสั่งนี้จะบีบอัดข้อมูลระหว่างกระบวนการดัมพ์ ช่วยประหยัดพื้นที่บนดิสก์

7. สรุป

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

ในบทความต่อไป เราจะเจาะลึกตัวเลือกขั้นสูงของ mysqldump และเปรียบเทียบกับเครื่องมือสำรองข้อมูลอื่น ๆ.