1. Introduction
การสำรองและกู้คืนฐานข้อมูลเป็นพื้นฐานของการจัดการข้อมูลและจำเป็นสำหรับการดำเนินงานที่เชื่อถือได้ mysqldump ของ MySQL เป็นเครื่องมือที่ได้รับความนิยมอย่างกว้างขวางในการสร้างสำรองฐานข้อมูล เนื่องจากมีประสิทธิภาพและยืดหยุ่น ในคู่มือนี้ เราจะอธิบายทุกอย่างตั้งแต่การใช้งานพื้นฐานของ mysqldump ไปจนถึงตัวเลือกขั้นสูง วิธีการกู้คืน และการแก้ไขปัญหาอย่างละเอียด ที่ส่วนท้ายของบทความ เราจะนำเสนอแนวปฏิบัติที่ดีที่สุดและแหล่งข้อมูลเพิ่มเติม ดังนั้นกรุณาใช้เอกสารนี้เป็นอ้างอิงที่เป็นประโยชน์เพื่อเชี่ยวชาญ mysqldump
2. What Is mysqldump?
2.1 Overview of mysqldump
mysqldump เป็นเครื่องมือบรรทัดคำสั่งสำหรับสร้างสำรองฐานข้อมูล MySQL คุณสามารถดัมพ์ฐานข้อมูลทั้งหมด ตารางเฉพาะ หรือเฉพาะข้อมูลที่ตรงกับเงื่อนไขบางอย่างเป็นสคริปต์ SQL ไฟล์ดัมพ์นี้สามารถใช้เพื่อกู้คืนข้อมูลหรือย้ายข้อมูลไปยังเซิร์ฟเวอร์ใหม่ได้
2.2 Common Use Cases
- Backup : ทำการสำรองข้อมูลเป็นประจำเพื่อเตรียมพร้อมต่อความล้มเหลวของระบบหรือการสูญเสียข้อมูล
- Data Migration : ย้ายฐานข้อมูลระหว่างเซิร์ฟเวอร์หรือคัดลอกข้อมูลไปยังสภาพแวดล้อมการพัฒนา
- Data Analysis : ดึงชุดข้อมูลเฉพาะเพื่อการวิเคราะห์และตรวจสอบ
3. Basic Usage
3.1 Basic Command Syntax
ไวยากรณ์คำสั่งพื้นฐานสำหรับ mysqldump มีดังนี้
mysqldump -u username -p database_name > output_file.sql
-u username: ชื่อผู้ใช้ที่ใช้เข้าถึงฐานข้อมูล-p: ให้ระบบถามรหัสผ่านdatabase_name: ชื่อฐานข้อมูลที่ต้องการสำรอง> output_file.sql: เส้นทาง/ชื่อไฟล์ปลายทางสำหรับไฟล์ดัมพ์
3.2 User Authentication Options
-h hostname: ชื่อโฮสต์ของเซิร์ฟเวอร์ฐานข้อมูล (ค่าเริ่มต้นคือlocalhost)-P port_number: พอร์ตที่ใช้เชื่อมต่อ (ค่าเริ่มต้นคือ 3306)
3.3 Example: Back Up an Entire Database
mysqldump -u root -p mydatabase > backup.sql
คำสั่งนี้จะสำรองข้อมูลทั้งหมดใน mydatabase ไปยังไฟล์ backup.sql หากคุณใส่วันที่ในชื่อไฟล์สำรองเพื่อการควบคุมเวอร์ชัน จะทำให้ติดตามประวัติการสำรองได้ง่ายขึ้น
4. Explanation of Key Options
4.1 --all-databases (-A)
ตัวเลือกนี้จะสำรองฐานข้อมูลทั้งหมดพร้อมกัน มีประโยชน์เมื่อคุณต้องการทำการสำรองเต็มของเซิร์ฟเวอร์ทั้งหมด
mysqldump -u root -p --all-databases > all_databases_backup.sql
4.2 --no-data (-d)
ใช้ตัวเลือกนี้เมื่อคุณต้องการสำรองเฉพาะโครงสร้างตารางโดยไม่รวมข้อมูลใด ๆ ตัวอย่างเช่น มีประโยชน์เมื่อคุณต้องการส่งออกเฉพาะโครงสร้างตารางเพื่อสร้างสภาพแวดล้อมการพัฒนา
mysqldump -u root -p mydatabase --no-data > schema_only_backup.sql
4.3 --where (-w)
ใช้ตัวเลือกนี้เมื่อคุณต้องการสำรองเฉพาะข้อมูลที่ตรงกับเงื่อนไขที่กำหนด ตัวอย่างเช่น การสำรองเฉพาะแถวที่คอลัมน์ is_active มีค่าเป็น 1:
mysqldump -u root -p mydatabase --where="is_active=1" > filtered_data_backup.sql
4.4 --ignore-table
ใช้ตัวเลือกนี้เพื่อยกเว้นตารางเฉพาะจากการสำรอง มีประโยชน์เมื่อมีตารางที่คุณไม่ต้องการรวมไว้
mysqldump -u root -p mydatabase --ignore-table=mydatabase.table1 > partial_backup.sql
5. Practical Examples
5.1 Dump Only Specific Tables
หากคุณต้องการสำรองเฉพาะตารางบางตาราง ให้ระบุชื่อ ตารางหลังจากชื่อฐานข้อมูล
mysqldump -u root -p mydatabase table1 > table1_backup.sql
คำสั่งนี้จะบันทึกข้อมูลจาก table1 เท่านั้นลงในไฟล์ table1_backup.sql
5.2 Dump Data Only / Schema Only
- Data only :
mysqldump -u root -p mydatabase --no-create-info > data_only_backup.sqlจะสำรองเฉพาะข้อมูลและไม่รวมโครงสร้างตาราง - Schema only :
bash mysqldump -u root -p mydatabase --no-data > schema_only_backup.sqlจะสำรองเฉพาะโครงสร้างตาราง
5.3 Conditional Dump
เพื่อสำรองเฉพาะข้อมูลที่ตรงกับเงื่อนไขที่กำหนด ให้ใช้ตัวเลือก --where .
mysqldump -u root -p mydatabase --where="created_at >= '2023-01-01'" > recent_data_backup.sql
คำสั่งนี้สำรองข้อมูลเฉพาะที่ created_at อยู่ในหรือหลังวันที่ 1 มกราคม 2023.
6. วิธีการกู้คืน
เพื่อกู้คืนฐานข้อมูลที่สำรองด้วย mysqldump ให้ใช้คำสั่ง mysql การกู้คืนคือกระบวนการใช้ไฟล์สำรองเพื่อทำให้ฐานข้อมูลกลับสู่สถานะก่อนหน้า.
6.1 ไวยากรณ์พื้นฐานของการกู้คืน
mysql -u username -p database_name < dump_file.sql
-u username: ชื่อผู้ใช้ที่ใช้เชื่อมต่อกับฐานข้อมูล.-p: ให้คุณใส่รหัสผ่าน.database_name: ชื่อของฐานข้อมูลปลายทาง.< dump_file.sql: ไฟล์ดัมพ์ที่ใช้สำหรับการกู้คืน.
6.2 ตัวอย่าง: เรียกใช้การกู้คืน
mysql -u root -p mydatabase < backup.sql
คำสั่งนี้กู้คืนข้อมูลเข้าสู่ mydatabase จากไฟล์ backup.sql.
6.3 หมายเหตุสำคัญสำหรับการกู้คืน
- หากฐานข้อมูลที่คุณต้องการกู้คืนไม่มีอยู่ คุณต้องสร้างมันก่อน.
- การกู้คืนข้อมูลจำนวนมากอาจใช้เวลานาน ดังนั้นจึงสำคัญต่อการวางแผนล่วงหน้า.
7. แนวปฏิบัติที่ดีที่สุดสำหรับ mysqldump
7.1 การกำหนดเวลาสำรองข้อมูล
ทำให้การสำรองข้อมูลเป็นอัตโนมัติโดยเขียนสคริปต์ mysqldump และใช้ตัวจัดตารางเช่น cron ตัวอย่างสคริปต์เชลล์ต่อไปนี้ทำการสำรองข้อมูลเต็มของทุกฐานข้อมูลทุกวันตอนเที่ยงคืน.
#!/bin/bash
mysqldump -u root -p'password' --all-databases > /path/to/backup/all_databases_$(date +\%F).sql
7.2 การเข้ารหัสไฟล์สำรอง
เนื่องจากไฟล์สำรองอาจมีข้อมูลที่ละเอียดอ่อน จึงแนะนำให้เข้ารหัสไฟล์เหล่านั้นด้วยเครื่องมือเช่น gpg.
gpg -c /path/to/backup/all_databases_$(date +\%F).sql
7.3 ความเข้ากันได้ของเวอร์ชัน
เมื่อย้ายข้อมูลระหว่างเวอร์ชัน MySQL ที่แตกต่างกัน คุณต้องระวังปัญหาความเข้ากันได้ ก่อนอัปเกรด ควรจำลองขั้นตอนการสำรองและกู้คืนในสภาพแวดล้อมทดสอบและตรวจสอบความเข้ากันได้.
- กู้คืนคำนิยามตาราง :
mysqldump --all-databases --no-data --routines --events > dump-defs.sqlคำสั่งนี้ดัมพ์เฉพาะโครงสร้างตาราง จากนั้นคุณกู้คืนในสภาพแวดล้อมเวอร์ชันใหม่เพื่อเช็คความเข้ากันได้. - กู้คืนข้อมูล :
mysqldump --all-databases --no-create-info > dump-data.sqlหลังจากยืนยันว่าคำนิยามตารางเข้ากันได้แล้ว ให้กู้คืนเฉพาะข้อมูล. - ตรวจสอบในสภาพแวดล้อมทดสอบ : เพื่อยืนยันความเข้ากันได้ข้ามเวอร์ชัน ให้ทำการสำรองและกู้คืนในสภาพแวดล้อมทดสอบ หลังจากยืนยันว่าทุกอย่างทำงานถูกต้องแล้ว ให้ดำเนินการย้ายในสภาพแวดล้อมการผลิต.
7.4 การจัดเก็บและตรวจสอบการสำรองข้อมูล
- จัดเก็บการสำรองข้อมูลอย่างปลอดภัย : เก็บไฟล์สำรองบนสื่อภายนอกหรือบนคลาวด์ และอัปเดตเป็นประจำ การจัดเก็บนอกสถานที่ช่วยปกป้องข้อมูลจากความล้มเหลวทางกายภาพ.
- ตรวจสอบการกู้คืนเป็นประจำ : ทำการทดสอบการกู้คืนเป็นระยะเพื่อยืนยันว่าการสำรองสามารถกู้คืนได้อย่างถูกต้อง ไม่ควรละเลยการตรวจสอบการกู้คืนในกรณีที่การสำรองอาจไม่ถูกต้อง.
8. การแก้ไขปัญหา
8.1 ข้อผิดพลาดทั่วไปและวิธีแก้
- ข้อผิดพลาด:
@@GLOBAL.GTID_PURGED cannot be changed: ข้อผิดพลาดนี้ปรากฏเมื่อมีปัญหาเกี่ยวกับ GTID ใน MySQL 8.0 คุณสามารถหลีกเลี่ยงได้โดยคอมเมนต์การตั้งค่า GTID ด้วยตัวเลือก--set-gtid-purged=COMMENTEDmysqldump -u root -p mydatabase --set-gtid-purged=COMMENTED > backup.sql - ข้อผิดพลาด: พื้นที่ดิสก์ไม่พอ : หากคุณหมดพื้นที่ดิสก์ขณะสำรองฐานข้อมูลขนาดใหญ่ ให้บีบอัดไฟล์สำรองหรือเปลี่ยนปลายทาง ตัวอย่างเช่น คุณสามารถบีบอัดสำรองด้วย gzip ดังนี้:
mysqldump -u root -p mydatabase | gzip > backup.sql.gz - ข้อผิดพลาด: สิทธิ์ไม่เพียงพอ : หากผู้ใช้ฐานข้อมูลไม่มีสิทธิ์เพียงพอ การสำรองหรือกู้คืนจะล้มเหลว ให้มอบสิทธิ์ที่จำเป็น (เช่น
SELECT,LOCK TABLES,SHOW VIEWฯลฯ) แล้วลองใหม่.
8.2 ปัญหาความเข้ากันได้ของเวอร์ชัน
ปัญหาความเข้ากันได้ระหว่างเวอร์ชัน MySQL ที่ต่างกันสามารถแก้ไขได้โดยการทดสอบก่อนทำการอัปเกรด โดยเฉพาะอย่างยิ่งเมื่อย้ายจาก MySQL 5.7 ไปยัง 8.0 ควรทำการกู้คืนเฉพาะโครงสร้างตารางโดยใช้ตัวเลือก --no-data แล้วตรวจสอบความเข้ากันได้
- ทดสอบหาความไม่เข้ากัน : ก่อนอัปเกรด ให้จำลองการย้ายข้อมูลในสภาพแวดล้อมการทดสอบเพื่อระบุปัญหาที่อาจเกิดขึ้น ตรวจสอบฟีเจอร์หรือไวยากรณ์ที่ไม่เข้ากัน และปรับแก้สคริปต์ SQL ตามความจำเป็น
9. สรุป
mysqldump เป็นเครื่องมือที่เชื่อถือได้และทรงพลังสำหรับการสำรองและกู้คืนฐานข้อมูล MySQL ในบทความนี้ เราได้ครอบคลุมตั้งแต่การใช้งานพื้นฐานจนถึงตัวเลือกขั้นสูง แนวปฏิบัติที่ดีที่สุด และการแก้ไขปัญหา โดยการนำความรู้นี้ไปใช้ คุณสามารถปกป้องและจัดการฐานข้อมูลของคุณได้อย่างมีประสิทธิภาพมากขึ้นด้วย mysqldump
การนำแนวปฏิบัติที่ดีที่สุด เช่น การกำหนดเวลาสำรองข้อมูลและการเข้ารหัสไฟล์เข้ามาใช้ จะช่วยเพิ่มความปลอดภัยของข้อมูลและความน่าเชื่อถือของการดำเนินงานฐานข้อมูลของคุณ ใช้ mysqldump อย่างถูกต้องเพื่อเตรียมพร้อมรับมือกับปัญหาฐานข้อมูลที่อาจเกิดขึ้น
10. แหล่งอ้างอิงและทรัพยากรเพิ่มเติม
อ้างอิงแหล่งข้อมูลนี้เพื่อเรียนรู้เพิ่มเติมเกี่ยวกับ mysqldump และนำไปใช้ในสถานการณ์จริง นอกจากนี้ การทำการสำรองข้อมูลเป็นประจำและตรวจสอบการกู้คืนจะช่วยรักษาความปลอดภัยของฐานข้อมูลและเตรียมพร้อมรับมือกับการสูญเสียข้อมูลที่ไม่คาดคิดได้อย่างมีประสิทธิภาพ.

