- 1 1. บทนำ
- 2 2. พื้นฐานของ mysqldump และสิ่งที่มันทำได้
- 3 3. การใช้งานพื้นฐานของ mysqldump
- 4 4. ตัวเลือก mysqldump ที่เป็นประโยชน์อธิบาย
- 4.1 ตัวเลือกเพื่อความสอดคล้องของข้อมูล
- 4.2 ตัวเลือกเพื่อลดการใช้หน่วยความจำ
- 4.3 การสำรอง Stored Procedures และ Triggers
- 4.4 ตัวเลือกเพื่อบันทึกข้อมูลและสคีม่าแยกกัน
- 4.5 ตัวเลือกความปลอดภัยเมื่อเขียนทับข้อมูล
- 4.6 ตัวเลือกสำหรับการกรองข้อมูล
- 4.7 ตัวเลือกเพื่อบีบอัดระหว่างการถ่ายโอน
- 4.8 สรุปตัวเลือกที่เป็นประโยชน์อื่น ๆ
- 4.9 สรุป
- 5 5. ตัวอย่างการใช้งานจริง: การสำรองและกู้คืน WordPress
- 6 6. การแก้ไขปัญหาและการจัดการข้อผิดพลาด
- 7 7. การทำอัตโนมัติและการสร้างกลยุทธ์การสำรองข้อมูล
- 8 8. คำถามที่พบบ่อย (FAQ)
- 8.1 1. ฉันจะเร่งความเร็ว mysqldump ได้อย่างไร?
- 8.2 2. ฉันจะบันทึกไฟล์สำรองที่บีบอัดได้อย่างไร?
- 8.3 3. ฉันจะป้องกันความขัดแย้งของข้อมูลระหว่างการกู้คืนได้อย่างไร?
- 8.4 4. ฉันจะย้ายข้อมูลระหว่างเซิร์ฟเวอร์ที่แตกต่างกันได้อย่างไร?
- 8.5 5. ฉันสามารถสำรองข้อมูลเฉพาะส่วนด้วย mysqldump ได้หรือไม่?
- 8.6 6. ฉันจะแก้ไขอักขระที่เพี้ยนหลังจากกู้คืนได้อย่างไร?
- 8.7 7. สาเหตุทั่วไปที่ทำให้การสำรองล้มเหลวคืออะไร?
- 8.8 สรุป
- 9 9. สรุป
1. บทนำ
คำสั่ง mysqldump คืออะไร?
การสำรองข้อมูลและการย้ายฐานข้อมูลเป็นงานที่สำคัญในด้านการดูแลระบบและการพัฒนา เครื่องมือหนึ่งที่ช่วยในงานเหล่านี้คือ mysqldump
mysqldump เป็นยูทิลิตี้สำหรับส่งออกและบันทึกเนื้อหาของฐานข้อมูล MySQL มันถูกใช้กันอย่างกว้างขวางในหลายสภาพแวดล้อมที่มีระบบจัดการฐานข้อมูล (DBMS) ทำงานอยู่
คุณสมบัติหลักของ mysqldump
- ความสามารถในการสำรองข้อมูล – ส่งออกเนื้อหาฐานข้อมูลเป็นสคริปต์ SQL เพื่อให้คุณสามารถกู้คืนข้อมูลได้ในกรณีที่เกิดภัยพิบัติหรือเหตุการณ์ไม่คาดคิด
- ความสามารถในการย้ายข้อมูล – ช่วยให้การย้ายข้อมูลไปยังสภาพแวดล้อมหรือเซิร์ฟเวอร์อื่นทำได้อย่างราบรื่น
- ความยืดหยุ่น – รองรับการส่งออกตามตารางหรือด้วยเงื่อนไข ทำให้สามารถสำรองข้อมูลบางส่วนได้
ด้วยวิธีนี้ คำสั่ง mysqldump จึงเป็นเครื่องมือที่ทรงพลังซึ่งสนับสนุนความปลอดภัยของข้อมูลและการจัดการที่มีประสิทธิภาพ
จุดประสงค์ของบทความนี้และกลุ่มเป้าหมาย
คู่มือนี้อธิบายทุกอย่างตั้งแต่การใช้ mysqldump เบื้องต้นจนถึงการใช้ตัวเลือกขั้นสูงอย่างละเอียด
กลุ่มเป้าหมาย
- ผู้เริ่มต้น: ผู้ที่ยังไม่คุ้นเคยกับการทำงานของ MySQL แต่ต้องการเรียนรู้พื้นฐานการสำรองและกู้คืน
- ผู้ใช้ระดับกลาง: ผู้ที่ต้องการเชี่ยวชาญการใช้ mysqldump อย่างปฏิบัติและเพิ่มประสิทธิภาพการทำงาน
- นักพัฒนา / วิศวกรปฏิบัติการ: ผู้ที่ต้องการความรู้เชิงลึกเกี่ยวกับการจัดการฐานข้อมูลและความสามารถในการตอบสนองอย่างรวดเร็วเมื่อเกิดปัญหา
สิ่งที่คุณจะได้เรียนในบทความนี้
- ไวยากรณ์พื้นฐานและตัวอย่างของคำสั่ง mysqldump
- วิธีการส่งออกและนำเข้าฐานข้อมูลและตาราง
- การแก้ไขปัญหาและวิธีแก้ข้อผิดพลาด
- การทำงานอัตโนมัติของการสำรองข้อมูลและมาตรการความปลอดภัย
เมื่อทำความเข้าใจหัวข้อเหล่านี้แล้ว คุณจะสามารถใช้ mysqldump ได้อย่างมีประสิทธิภาพและบรรลุการจัดการข้อมูลที่ปลอดภัยและมีประสิทธิภาพ
2. พื้นฐานของ mysqldump และสิ่งที่มันทำได้
ภาพรวมของ mysqldump
mysqldump เป็นเครื่องมือบรรทัดคำสั่งที่ใช้สำหรับสำรองและย้ายฐานข้อมูล MySQL และ MariaDB มันส่งออกโครงสร้างและข้อมูลของฐานข้อมูลในรูปแบบ SQL หรือข้อความ
ความสามารถหลักของ mysqldump
- การสำรองฐานข้อมูลเต็มรูปแบบ: บันทึกการสำรองข้อมูลครบถ้วนรวมทั้งข้อมูลและสคีม่า
- การสำรองข้อมูลบางส่วน: ส่งออกเฉพาะตารางที่ต้องการ ทำให้การจัดการฐานข้อมูลขนาดใหญ่ทำได้อย่างมีประสิทธิภาพ
- การย้ายข้อมูล: มีประโยชน์เมื่อย้ายฐานข้อมูลไปยังเซิร์ฟเวอร์หรือสภาพแวดล้อมอื่น
- การส่งออกการตั้งค่าและสิทธิ์: สามารถส่งออก stored procedures, triggers, views และอื่น ๆ เพื่อเพิ่มความสามารถในการทำซ้ำสภาพแวดล้อม
ตัวอย่างตามกรณีการใช้งาน
- คัดลอกข้อมูลไปยังสภาพแวดล้อมการพัฒนา: ใช้เมื่อย้ายข้อมูลจากระบบผลิตไปยังระบบพัฒนาเพื่อทดสอบ
- การเก็บถาวรข้อมูล: สำรองข้อมูลเก่าเพื่อประหยัดพื้นที่ดิสก์
- การกู้คืนจากภัยพิบัติ: เก็บสำรองข้อมูลเป็นประจำเพื่อกู้คืนจากความล้มเหลวของฮาร์ดแวร์หรือข้อมูลเสียหาย
การติดตั้งและการตั้งค่าพื้นฐาน
ตรวจสอบการติดตั้ง mysqldump
mysqldump รวมอยู่ในแพคเกจมาตรฐานของ MySQL หรือ MariaDB คุณสามารถตรวจสอบการติดตั้งด้วยคำสั่งต่อไปนี้
mysqldump --version
ผลลัพธ์ตัวอย่าง:
mysqldump Ver 8.0.26 for Linux on x86_64 (MySQL Community Server - GPL)
หาก mysqldump ยังไม่ได้ติดตั้ง
ขึ้นอยู่กับระบบ ปลั๊กอิน mysqldump อาจยังไม่ได้ติดตั้ง ในกรณีนั้นให้ติดตั้งด้วยคำสั่งต่อไปนี้
สำหรับ Ubuntu/Debian:
sudo apt-get install mysql-client
สำหรับ CentOS/RHEL:
sudo yum install mysql
เคล็ดลับการตั้งค่าการเชื่อมต่อ
เพื่อใช้ mysqldump คุณต้องมีข้อมูลการเชื่อมต่อ การใช้พื้นฐานเป็นดังนี้
mysqldump -u username -p password database_name > backup.sql
- -u : ระบุชื่อผู้ใช้ MySQL
- -p : เรียกให้ใส่รหัสผ่าน
- database_name : ระบุชื่อฐานข้อมูลที่ต้องการสำรอง
- > backup.sql : ระบุชื่อไฟล์ผลลัพธ์
วิธีจัดการข้อผิดพลาดการเชื่อมต่อ
- หากเป็นข้อผิดพลาดการยืนยันตัวตน:
ERROR 1045 (28000): Access denied for user 'user'@'localhost' (using password: YES)
→ ยืนยันว่าชื่อผู้ใช้และรหัสผ่านถูกต้อง และมอบสิทธิ์ที่เหมาะสม
- หากเป็นข้อผิดพลาดที่เกี่ยวกับโฮสต์:
ERROR 2003 (HY000): Can't connect to MySQL server on 'hostname' (111)
→ ตรวจสอบการตั้งค่าไฟร์วอลและสถานะของบริการ MySQL
3. การใช้งานพื้นฐานของ mysqldump
วิธีสำรองฐานข้อมูลเดี่ยว
ด้วย mysqldump คุณสามารถสำรองฐานข้อมูลเฉพาะได้อย่างง่ายดาย ตัวอย่างด้านล่างสร้างการสำรองฐานข้อมูลที่ชื่อ example_db.
ตัวอย่างคำสั่งพื้นฐาน
mysqldump -u username -p example_db > backup.sql
การอธิบายคำสั่ง
- -u username : ระบุผู้ใช้ที่มีสิทธิ์เข้าถึงฐานข้อมูล
- -p : ขอรหัสผ่าน (จะไม่แสดงขณะพิมพ์)
- example_db : ระบุชื่อฐานข้อมูลที่ต้องการสำรอง
- > backup.sql : ระบุตำแหน่งและชื่อไฟล์สำรอง
ตรวจสอบผลลัพธ์การสำรอง
เปิดไฟล์ backup.sql ที่สร้างขึ้นในโปรแกรมแก้ไขข้อความเพื่อยืนยันว่ามีคำสั่ง SQL สำหรับสร้างตารางและแทรกข้อมูล.
วิธีสำรองหลายฐานข้อมูล
เพื่อสำรองหลายฐานข้อมูลพร้อมกัน ให้ใช้คำสั่งต่อไปนี้.
ตัวอย่างการสำรองหลายฐานข้อมูล
mysqldump -u username -p --databases db1 db2 > multi_backup.sql
คำอธิบายตัวเลือก
- –databases : จำเป็นเมื่อระบุชื่อหลายฐานข้อมูล
- db1 db2 : ระบุฐานข้อมูลที่ต้องการสำรอง แยกด้วยช่องว่าง
วิธีนี้จะส่งออกฐานข้อมูลที่ระบุไปยังไฟล์เดียว.
วิธีสำรองเฉพาะตารางที่ต้องการ
เพื่อสำรองเฉพาะตารางที่ต้องการจากฐานข้อมูลขนาดใหญ่ ให้ใช้คำสั่งต่อไปนี้.
ตัวอย่างการสำรองตารางเฉพาะ
mysqldump -u username -p example_db table1 table2 > tables_backup.sql
คำอธิบายตัวเลือก
- example_db : ระบุตำแหน่งฐานข้อมูลเป้าหมาย
- table1 table2 : ระบุตารางที่ต้องการสำรอง แยกด้วยช่องว่าง
วิธีนี้มีประโยชน์เมื่อคุณต้องการสำรองข้อมูลบางส่วนอย่างมีประสิทธิภาพ.
วิธีบีบอัดไฟล์สำรอง
หากไฟล์สำรองมีขนาดใหญ่ แนะนำให้บีบอัดด้วย gzip.
ตัวอย่างการบีบอัดสำรอง
mysqldump -u username -p example_db | gzip > backup.sql.gz
การอธิบายคำสั่ง
- | gzip : บีบอัดผลลัพธ์ของ mysqldump ด้วย gzip
- backup.sql.gz : ชื่อไฟล์สำรองที่บีบอัด
วิธีนี้สามารถประหยัดพื้นที่จัดเก็บและเพิ่มความเร็วในการถ่ายโอนสำรอง.
วิธีกู้คืนฐานข้อมูล
คุณสามารถกู้คืนการสำรอง mysqldump ได้อย่างง่ายดายด้วยคำสั่งต่อไปนี้.
ตัวอย่างการกู้คืนพื้นฐาน
mysql -u username -p example_db < backup.sql
การอธิบายคำสั่ง
- mysql : เรียกใช้ไคลเอนต์ MySQL
- example_db : ระบุชื่อฐานข้อมูลปลายทาง
- < backup.sql : นำเข้าข้อมูลจากไฟล์สำรอง
หมายเหตุและคำแนะนำ
- สร้างฐานข้อมูลล่วงหน้า: หากฐานข้อมูลปลายทางไม่มีอยู่ คุณต้องสร้างมันก่อนล่วงหน้า.
CREATE DATABASE example_db;
- แยกการนำเข้าสำหรับข้อมูลขนาดใหญ่: หากขนาดข้อมูลใหญ่ ให้รวมการแยกไฟล์และการแตกบีบอัดเพื่อเพิ่มประสิทธิภาพ.
- ตรวจสอบการเข้ารหัสอักขระ: เพื่อป้องกันข้อความเสียหายในระหว่างการสำรองและกู้คืน ให้ตรวจสอบการตั้งค่าชุดอักขระของคุณ.
mysqldump --default-character-set=utf8 -u username -p example_db > backup.sql

4. ตัวเลือก mysqldump ที่เป็นประโยชน์อธิบาย
mysqldump มีตัวเลือกหลายอย่างที่ช่วยให้คุณส่งออกและจัดการข้อมูลได้อย่างมีประสิทธิภาพมากขึ้นตามความต้องการของคุณ ส่วนนี้อธิบายตัวเลือกที่เป็นประโยชน์โดยละเอียด.
ตัวเลือกเพื่อความสอดคล้องของข้อมูล
–single-transaction
mysqldump --single-transaction -u username -p example_db > backup.sql
คำอธิบาย
- สร้างการสำรองข้อมูลพร้อมรักษาความสอดคล้องของธุรกรรม
- มีประสิทธิภาพเป็นพิเศษเมื่อใช้เครื่องมือจัดเก็บข้อมูล InnoDB
- ลดการล็อกระหว่างการสำรองข้อมูลฐานข้อมูลขนาดใหญ่
กรณีการใช้งาน
มีประโยชน์เมื่อคุณต้องการทำการสำรองข้อมูลโดยไม่ต้องหยุดบริการออนไลน์
ตัวเลือกเพื่อลดการใช้หน่วยความจำ
–quick
mysqldump --quick -u username -p example_db > backup.sql
คำอธิบาย
- ดึงข้อมูลแถวต่อแถวเพื่อลดการใช้หน่วยความจำ
- เหมาะอย่างยิ่งสำหรับการสำรองข้อมูลฐานข้อมูลขนาดใหญ่
หมายเหตุ
- แม้ว่าจะช่วยปรับปรุงการใช้หน่วยความจำ แต่เวลาการทำงานทั้งหมดอาจยาวนานขึ้นเล็กน้อย
การสำรอง Stored Procedures และ Triggers
–routines และ –triggers
mysqldump --routines --triggers -u username -p example_db > backup.sql
คำอธิบาย
- –routines : รวม stored procedures และ functions ในการสำรองข้อมูล
- –triggers : ส่งออก triggers ด้วยเช่นกัน
กรณีการใช้งาน
ใช้เมื่อต้องการสำรองหรือย้ายข้อมูลโดยคงรักษาตรรกะธุรกิจที่ซับซ้อนและการประมวลผลอัตโนมัติ
ตัวเลือกเพื่อบันทึกข้อมูลและสคีม่าแยกกัน
–no-data
mysqldump --no-data -u username -p example_db > schema.sql
คำอธิบาย
- ส่งออกเฉพาะโครงสร้างตารางและไม่รวมข้อมูล
- มีประโยชน์เมื่อทำการตรวจสอบหรือสร้างสคีม่าใหม่ในสภาพแวดล้อมการพัฒนา
ตัวเลือกความปลอดภัยเมื่อเขียนทับข้อมูล
–add-drop-table
mysqldump --add-drop-table -u username -p example_db > backup.sql
คำอธิบาย
- รวมคำสั่ง SQL เพื่อลบตารางที่มีอยู่ก่อนสร้างใหม่
- มีประโยชน์เมื่อเขียนทับข้อมูลที่มีอยู่ทั้งหมด
หมายเหตุ
เนื่องจากอาจทำให้ข้อมูลที่มีอยู่ถูกลบระหว่างการกู้คืน จึงควรตรวจสอบอย่างละเอียดก่อนดำเนินการ
ตัวเลือกสำหรับการกรองข้อมูล
–where
mysqldump -u username -p example_db --where="created_at >= '2023-01-01'" > filtered_backup.sql
คำอธิบาย
- ส่งออกเฉพาะข้อมูลที่ตรงกับเงื่อนไขที่กำหนด
- มีประโยชน์สำหรับการดึงชุดข้อมูลย่อยจากฐานข้อมูลขนาดใหญ่
ตัวเลือกเพื่อบีบอัดระหว่างการถ่ายโอน
–compress
mysqldump --compress -u username -p example_db > backup.sql
คำอธิบาย
- บีบอัดการถ่ายโอนข้อมูลระหว่างเซิร์ฟเวอร์และไคลเอนต์
- ปรับปรุงความเร็วในการถ่ายโอนเมื่อทำการสำรองข้อมูลผ่านเครือข่าย
สรุปตัวเลือกที่เป็นประโยชน์อื่น ๆ
| Option | Description |
|---|---|
| –skip-lock-tables | Avoids table locks to speed up exports. |
| –default-character-set | Specifies the character set (e.g., utf8). |
| –result-file | Writes directly to an output file to improve performance. |
| –hex-blob | Exports binary data in hexadecimal format. |
| –no-create-info | Exports data only and does not include table definitions. |
สรุป
ในส่วนนี้ เราได้อธิบายตัวเลือก mysqldump ที่เป็นประโยชน์ การใช้ตัวเลือกเหล่านี้อย่างเหมาะสมสามารถปรับปรุงประสิทธิภาพและความปลอดภัยของการสำรองข้อมูลและการย้ายข้อมูลได้อย่างมีนัยสำคัญ
5. ตัวอย่างการใช้งานจริง: การสำรองและกู้คืน WordPress
WordPress ใช้ฐานข้อมูล MySQL เพื่อจัดการข้อมูลของเว็บไซต์ ส่วนนี้อธิบายขั้นตอนที่ชัดเจนในการสำรองและกู้คืนฐานข้อมูล WordPress ด้วย mysqldump.
วิธีการสำรองเว็บไซต์ WordPress
1. ตรวจสอบข้อมูลฐานข้อมูล
ขั้นแรก ตรวจสอบชื่อฐานข้อมูล ชื่อผู้ใช้ และรหัสผ่านในไฟล์กำหนดค่า WordPress (wp-config.php).
ตัวอย่างการกำหนดค่า:
define('DB_NAME', 'wordpress_db');
define('DB_USER', 'wp_user');
define('DB_PASSWORD', 'wp_password');
define('DB_HOST', 'localhost');
2. คำสั่งสำรองฐานข้อมูล
รันคำสั่งต่อไปนี้เพื่อสำรองฐานข้อมูล WordPress.
mysqldump -u wp_user -p wordpress_db > wordpress_backup.sql
รายละเอียดตัวเลือก:
- -u wp_user : ผู้ใช้ฐานข้อมูลที่ WordPress ใช้
- -p : ขอรหัสผ่าน
- wordpress_db : ชื่อฐานข้อมูล
- > wordpress_backup.sql : ชื่อไฟล์สำรองข้อมูล
3. ตัวอย่าง: การสำรองข้อมูลแบบบีบอัด
เพื่อลดขนาดไฟล์โดยบีบอัดด้วย gzip:
mysqldump -u wp_user -p wordpress_db | gzip > wordpress_backup.sql.gz
4. วิธีการถ่ายโอนไฟล์ที่แนะนำ
การสำรองข้อมูลต้องเก็บไว้ในตำแหน่งที่ปลอดภัย ตัวอย่างด้านล่างใช้คำสั่ง SCP เพื่อถ่ายโอนไฟล์ไปยังเซิร์ฟเวอร์ระยะไกล.
scp wordpress_backup.sql.gz user@remote_host:/backup/
ขั้นตอนการกู้คืนและหมายเหตุ
1. สร้างฐานข้อมูลใหม่
สร้างฐานข้อมูลใหม่บนปลายทางการกู้คืน.
mysql -u root -p -e "CREATE DATABASE wordpress_db;"
2. กู้คืนฐานข้อมูล
กู้คืนข้อมูลจากไฟล์สำรอง.
mysql -u wp_user -p wordpress_db < wordpress_backup.sql
3. การกู้คืนข้อมูลที่บีบอัด
เพื่อกู้คืนจากไฟล์สำรองที่บีบอัดด้วย gzip ให้ใช้คำสั่งต่อไปนี้.
gunzip < wordpress_backup.sql.gz | mysql -u wp_user -p wordpress_db
4. ตรวจสอบการทำงาน
หลังจากกู้คืนแล้ว ให้ตรวจสอบจุดต่อไปนี้:
- คุณสามารถเข้าสู่แดชบอร์ดของ WordPress ได้หรือไม่?
- โพสต์และหน้าแสดงผลอย่างถูกต้องหรือไม่?
- ปลั๊กอินและธีมทำงานอย่างเหมาะสมหรือไม่?
วิธีจัดการข้อผิดพลาด
1. ข้อผิดพลาดฐานข้อมูลที่ไม่รู้จัก
ERROR 1049 (42000): Unknown database 'wordpress_db'
วิธีแก้ไข:
สร้างฐานข้อมูลล่วงหน้าแล้วทำการกู้คืน.
2. ข้อผิดพลาดสิทธิ์
ERROR 1045 (28000): Access denied for user 'wp_user'@'localhost'
วิธีแก้ไข:
ให้สิทธิ์ที่เหมาะสมกับผู้ใช้.
GRANT ALL PRIVILEGES ON wordpress_db.* TO 'wp_user'@'localhost' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
3. ป้องกันอักขระเสียหาย
หากข้อความแสดงเป็นอักขระเสียหาย ให้ตรวจสอบการตั้งค่าชุดอักขระ.
ระหว่างการสำรองข้อมูล:
mysqldump --default-character-set=utf8 -u wp_user -p wordpress_db > wordpress_backup.sql
ระหว่างการกู้คืน:
mysql --default-character-set=utf8 -u wp_user -p wordpress_db < wordpress_backup.sql
การทำงานอัตโนมัติของการสำรองข้อมูล
1. ทำอัตโนมัติด้วยงาน cron
กำหนดค่างาน cron เพื่อทำการสำรองข้อมูลอัตโนมัติ.
ตัวอย่าง: สำรองข้อมูลทุกวันเวลา 02:00 น.
0 2 * * * mysqldump -u wp_user -p'wp_password' wordpress_db | gzip > /backup/wordpress_backup_$(date +\%F).sql.gz
2. จัดการการเก็บรักษาการสำรองข้อมูล
สคริปต์ตัวอย่างเพื่อทำการลบไฟล์สำรองเก่าโดยอัตโนมัติ:
find /backup/ -type f -name "*.sql.gz" -mtime +30 -exec rm {} \;
สคริปต์นี้จะลบไฟล์ที่เก่ากว่า 30 วัน.
สรุป
ในส่วนนี้ เราได้อธิบายขั้นตอนเฉพาะในการสำรองและกู้คืนฐานข้อมูล WordPress โดยใช้ mysqldump คุณสามารถปกป้องและกู้คืนข้อมูลของคุณได้อย่างง่ายดายและปลอดภัย. 
6. การแก้ไขปัญหาและการจัดการข้อผิดพลาด
เมื่อใช้ mysqldump อาจเกิดข้อผิดพลาดต่าง ๆ ขึ้นขึ้นอยู่กับสภาพแวดล้อมและการตั้งค่าฐานข้อมูลของคุณ ส่วนนี้อธิบายสาเหตุทั่วไปและวิธีแก้ไขอย่างละเอียด.
1. ข้อผิดพลาดการเชื่อมต่อ
ตัวอย่างข้อความข้อผิดพลาด
ERROR 1045 (28000): Access denied for user 'user'@'localhost' (using password: YES)
สาเหตุ
- ชื่อผู้ใช้หรือรหัสผ่านไม่ถูกต้อง.
- ผู้ใช้ไม่มีสิทธิ์เพียงพอ.
วิธีแก้ไข
- ตรวจสอบว่าชื่อผู้ใช้และรหัสผ่านถูกต้อง.
- ให้สิทธิ์.
GRANT ALL PRIVILEGES ON database_name.* TO 'user'@'localhost' IDENTIFIED BY 'password'; FLUSH PRIVILEGES;
- หากต้องการทำให้การใส่รหัสผ่านเป็นอัตโนมัติ ให้พิจารณาใช้ไฟล์
.my.cnf.
2. ข้อผิดพลาดฐานข้อมูลที่ไม่รู้จัก
ตัวอย่างข้อความข้อผิดพลาด
ERROR 1049 (42000): Unknown database 'database_name'
สาเหตุ
ฐานข้อมูลที่ระบุไม่มีอยู่.
วิธีแก้ไข
- สร้างฐานข้อมูล.
CREATE DATABASE database_name;
- ตรวจสอบการพิมพ์ชื่อฐานข้อมูลว่าถูกต้องหรือไม่.
3. ข้อผิดพลาดสิทธิ์ไม่เพียงพอ
ตัวอย่างข้อความข้อผิดพลาด
mysqldump: Got error: 1044: Access denied for user 'user'@'localhost' to database 'database_name'
สาเหตุ
ผู้ใช้ไม่มีสิทธิ์เข้าถึงฐานข้อมูลที่ระบุ.
วิธีแก้ไข
- ตรวจสอบสิทธิ์ปัจจุบัน.
SHOW GRANTS FOR 'user'@'localhost';
- ให้สิทธิ์ที่จำเป็น.
GRANT SELECT, LOCK TABLES, SHOW VIEW, EVENT, TRIGGER ON database_name.* TO 'user'@'localhost'; FLUSH PRIVILEGES;
4. ข้อผิดพลาดการสำรองข้อมูลกับฐานข้อมูลขนาดใหญ่
ตัวอย่างข้อความข้อผิดพลาด
mysqldump: Error 2006: MySQL server has gone away when dumping table 'table_name'
สาเหตุ
- ฐานข้อมูลใหญ่เกินไปและการเชื่อมต่อหมดเวลา
- ทรัพยากรเครือข่ายหรือเซิร์ฟเวอร์ไม่เพียงพอ
วิธีแก้ไข
- อัปเดตไฟล์การกำหนดค่า (
my.cnf) เพิ่มพารามิเตอร์ต่อไปนี้[mysqld] max_allowed_packet=512M net_read_timeout=600 net_write_timeout=600
- ใช้ตัวเลือกที่เป็นประโยชน์
mysqldump --quick --single-transaction -u user -p database_name > backup.sql
สิ่งนี้ช่วยสำรองข้อมูลจำนวนมากได้อย่างมีประสิทธิภาพ.
5. อักขระเสียหาย
อาการ
- หลังจากการกู้คืน ตัวอักษรหลายไบต์เช่นภาษาญี่ปุ่นแสดงผลเป็นอักขระเสียหาย.
สาเหตุ
การตั้งค่าชุดอักขระระหว่างการสำรองและการกู้คืนไม่ตรงกัน.
วิธีแก้ไข
- ระบุชุดอักขระระหว่างการสำรอง
mysqldump --default-character-set=utf8 -u user -p database_name > backup.sql
- ระบุชุดอักขระระหว่างการกู้คืน
mysql --default-character-set=utf8 -u user -p database_name < backup.sql
6. ข้อผิดพลาดตารางซ้ำระหว่างการกู้คืน
ตัวอย่างข้อความแสดงข้อผิดพลาด
ERROR 1050 (42S01): Table 'table_name' already exists
สาเหตุ
มีตารางที่มีชื่อเดียวกันอยู่แล้วในฐานข้อมูลปลายทาง.
วิธีแก้ไข
- เพิ่มคำสั่ง DROP TABLE IF EXISTS โดยทำการสำรองด้วยตัวเลือกนี้.
mysqldump --add-drop-table -u user -p database_name > backup.sql
- ลบตารางเป้าหมายด้วยตนเอง.
DROP TABLE table_name;
7. การสำรองล้มเหลวเนื่องจากการล็อก
ตัวอย่างข้อความแสดงข้อผิดพลาด
mysqldump: Error 1227: Access denied; you need (at least one of) the SUPER privilege(s) for this operation
สาเหตุ
เกิดการล็อกตารางและสิทธิ์ไม่เพียงพอ.
วิธีแก้ไข
- เพิ่มตัวเลือกเพื่อหลีกเลี่ยงการล็อก.
mysqldump --single-transaction --skip-lock-tables -u user -p database_name > backup.sql
- ขยายสิทธิ์หากจำเป็น.
สรุป
ในส่วนนี้ เราอธิบายข้อผิดพลาดทั่วไปที่เกิดขึ้นเมื่อใช้ mysqldump และวิธีแก้ไข การเข้าใจขั้นตอนการแก้ปัญหาเหล่านี้จะช่วยให้คุณตอบสนองได้อย่างรวดเร็วเมื่อเกิดปัญหา.
7. การทำอัตโนมัติและการสร้างกลยุทธ์การสำรองข้อมูล
การสำรองฐานข้อมูลด้วย mysqldump มีความสำคัญต่อการเพิ่มความปลอดภัยของระบบ ส่วนนี้อธิบายวิธีทำการสำรองอัตโนมัติและการจัดการอย่างมีกลยุทธ์.
1. ประโยชน์ของการทำอัตโนมัติ
ทำไมการทำสำรองอัตโนมัติถึงสำคัญ
- หลีกเลี่ยงข้อผิดพลาดของมนุษย์: ป้องกันความผิดพลาดที่เกิดจากการดำเนินการด้วยมือ.
- การปกป้องที่สม่ำเสมอ: การสำรองทำงานอย่างเชื่อถือได้ตามกำหนดเวลา.
- การกู้คืนที่รวดเร็ว: กู้คืนข้อมูลล่าสุดอย่างรวดเร็วเมื่อเกิดความล้มเหลว.
สถานการณ์ทั่วไป
- การสำรองก่อนอัปเดตเว็บไซต์.
- การสำรองตามกำหนดเวลาประจำวัน/สัปดาห์.
- การปกป้องข้อมูลระหว่างการบำรุงรักษาและอัปเกรดเซิร์ฟเวอร์.
2. การสำรองตามกำหนดเวลาด้วย cron
ตัวอย่างการกำหนดค่า cron เบื้องต้น
- เริ่มแก้ไขงาน cron ของคุณ.
crontab -e
- เพิ่มตารางเวลาต่อไปนี้.
ตัวอย่าง: ทำการสำรองข้อมูลทุกวันเวลา 02:00 น.
0 2 * * * mysqldump -u user -p'password' database_name | gzip > /backup/backup_$(date +\%F).sql.gz
เคล็ดลับการกำหนดค่า
- การจัดการรหัสผ่าน: หากระบุรหัสผ่านโดยตรง ให้ใส่ในเครื่องหมายอัญประกาศ.
- เพิ่มวันที่ลงในชื่อไฟล์: $(date +\%F) เป็นวิธีที่สะดวกในการต่อวันที่ในรูปแบบ YYYY-MM-DD.
- การบีบอัด: การใช้ gzip ช่วยประหยัดพื้นที่จัดเก็บ.
3. การลบการสำรองเก่าโดยอัตโนมัติ
การเก็บไฟล์สำรองเป็นเวลานานอาจใช้พื้นที่ดิสก์มาก กำหนดการลบอัตโนมัติสำหรับการสำรองที่เก่ากว่าช่วงเวลาที่กำหนด.
ตัวอย่างสคริปต์การลบไฟล์
find /backup/ -type f -name "*.sql.gz" -mtime +30 -exec rm {} \;
คำอธิบายคำสั่ง
- find /backup/ : ค้นหาภายในโฟลเดอร์สำรอง.
- -type f : เฉพาะไฟล์.
- -name “*.sql.gz” : ค้นหาไฟล์ที่มีนามสกุล .sql.gz.
- -mtime +30 : ไฟล์ที่เก่ากว่า 30 วัน.
- -exec rm {} \; : ลบไฟล์ที่พบ.
4. การจัดเก็บสำรองข้อมูลระยะไกล
การเสริมสร้างความปลอดภัยและการจัดการความเสี่ยง
การเก็บสำรองข้อมูลไม่เพียงแต่บนเซิร์ฟเวอร์ท้องถิ่นเท่านั้น แต่ยังบนเซิร์ฟเวอร์ระยะไกลหรือที่เก็บข้อมูลคลาวด์ ช่วยเสริมมาตรการกู้คืนจากภัยพิบัติ
ตัวอย่างการถ่ายโอนโดยใช้ SCP
scp /backup/backup_$(date +\%F).sql.gz user@remote_host:/remote/backup/
ตัวอย่างการถ่ายโอนแบบเพิ่มเติมโดยใช้ rsync
rsync -avz /backup/ user@remote_host:/remote/backup/
ตัวอย่างการอัปโหลดไปยังที่เก็บข้อมูลคลาวด์
หากคุณใช้ AWS CLI เพื่ออัปโหลดไปยังบักเก็ต S3:
aws s3 cp /backup/backup_$(date +\%F).sql.gz s3://my-bucket-name/
5. กลยุทธ์การสำรองข้อมูลแบบเพิ่มเติม
สำหรับฐานข้อมูลขนาดใหญ่ การสำรองข้อมูลแบบเต็มจะใช้เวลาและทรัพยากรมาก ปรับปรุงประสิทธิภาพโดยรวมการสำรองข้อมูลแบบเพิ่มเติม
การสำรองข้อมูลแบบเพิ่มเติมโดยใช้ binlog
- เปิดใช้งาน binary logs เพิ่มต่อไปนี้ใน
my.cnf:[mysqld] log_bin=mysql-bin expire_logs_days=10
- สำรอง binary logs
mysqlbinlog mysql-bin.000001 > binlog_backup.sql
- ขั้นตอนการกู้คืน
mysql -u user -p database_name < binlog_backup.sql
6. มาตรการความปลอดภัยและการป้องกันข้อมูล
1. ปกป้องด้วยการเข้ารหัส
เข้ารหัสไฟล์สำรองเพื่อเพิ่มความปลอดภัย
ตัวอย่าง: เข้ารหัสด้วย gpg
gpg --output backup.sql.gz.gpg --encrypt --recipient user@example.com backup.sql.gz
2. ไฟล์เก็บถาวรที่ป้องกันด้วยรหัสผ่าน
zip -e backup.zip backup.sql.gz
3. ตั้งค่าสิทธิ์การเข้าถึง
จำกัดสิทธิ์การเข้าถึงสำหรับไดเรกทอรีสำรอง
chmod 700 /backup/
สรุป
ในส่วนนี้ เราอธิบายวิธีการทำให้การสำรองข้อมูลอัตโนมัติและจัดการเชิงกลยุทธ์โดยใช้ mysqldump โดยการรวมการสำรองข้อมูลตามกำหนดเวลา ที่เก็บข้อมูลระยะไกล และการสำรองข้อมูลแบบเพิ่มเติม คุณสามารถปรับปรุงความปลอดภัยของข้อมูลได้อย่างมีนัยสำคัญ
8. คำถามที่พบบ่อย (FAQ)
ส่วนนี้สรุปคำถามที่พบบ่อยเกี่ยวกับ mysqldump และวิธีแก้ไข ใช้เคล็ดลับเหล่านี้เพื่อช่วยแก้ไขปัญหาทั่วไป
1. ฉันจะเร่งความเร็ว mysqldump ได้อย่างไร?
Q. อะไรทำให้การสำรองข้อมูลช้า?
A. หากฐานข้อมูลมีขนาดใหญ่ หรือเกิดการล็อกตาราง กระบวนการอาจช้า
วิธีแก้ไข
- ปรับแต่งตัวเลือก
mysqldump --single-transaction --quick -u user -p database > backup.sql
- –single-transaction : ใช้ transaction เพื่อรักษาความสอดคล้องในขณะที่หลีกเลี่ยงการล็อก
- –quick : ประมวลผลข้อมูลทีละแถวในขณะที่ลดการใช้หน่วยความจำ
- เพิ่มขนาดแพ็กเก็ต แก้ไขไฟล์กำหนดค่า (
my.cnf):max_allowed_packet=512M
- ใช้การประมวลผลแบบขนาน ใช้เครื่องมือที่สำรองหลายตารางแบบขนาน (ตัวอย่างเช่น
mydumper)
2. ฉันจะบันทึกไฟล์สำรองที่บีบอัดได้อย่างไร?
Q. ฐานข้อมูลมีขนาดใหญ่—ฉันจะประหยัดพื้นที่จัดเก็บได้อย่างไร?
A. บีบอัดการสำรองด้วย gzip เพื่อลดขนาดไฟล์
วิธีแก้ไข
mysqldump -u user -p database | gzip > backup.sql.gz
วิธีนี้ปรับปรุงประสิทธิภาพการจัดเก็บในขณะที่รักษาอัตราบีบอัดที่ดี
3. ฉันจะป้องกันความขัดแย้งของข้อมูลระหว่างการกู้คืนได้อย่างไร?
Q. ความขัดแย้งสามารถเกิดขึ้นเมื่อกู้คืนฐานข้อมูลหรือไม่?
A. ใช่ ความขัดแย้งสามารถเกิดขึ้นเมื่อตารางหรือข้อมูลมีอยู่แล้ว
วิธีแก้ไข
- เมื่อคุณต้องการลบข้อมูลที่มีอยู่ก่อนกู้คืน
mysqldump --add-drop-table -u user -p database > backup.sql
ตัวเลือกนี้จะลบตารางที่มีอยู่ก่อนสร้าง
- เมื่อคุณต้องการนำเข้าขณะเก็บข้อมูลที่มีอยู่
mysql -u user -p database < backup.sql
หากคุณต้องการเขียนทับเฉพาะข้อมูลตามเงื่อนไข พิจารณาตัวเลือก --replace ด้วย
4. ฉันจะย้ายข้อมูลระหว่างเซิร์ฟเวอร์ที่แตกต่างกันได้อย่างไร?
Q. ฉันควระวังอะไรเมื่อย้ายข้อมูลไปยังเซิร์ฟเวอร์อื่น?
A. ระวังปัญหาความเข้ากันได้ที่เกิดจากชุดอักขระหรือเวอร์ชันที่แตกต่าง
วิธีแก้ไข
- ระบุชุดอักขระระหว่างการส่งออก
mysqldump --default-character-set=utf8 -u user -p database > backup.sql
- ตรวจสอบการตั้งค่าชุดอักขระปลายทาง
mysql --default-character-set=utf8 -u user -p database < backup.sql
- ตรวจสอบความเข้ากันได้ของเวอร์ชัน
mysqldump --compatible=mysql40 -u user -p database > backup.sql
ตัวเลือกนี้ช่วยให้มั่นใจในความเข้ากันได้กับเวอร์ชันเก่า
5. ฉันสามารถสำรองข้อมูลเฉพาะส่วนด้วย mysqldump ได้หรือไม่?
Q. มีวิธีสำรองข้อมูลเฉพาะหรือไม่?
A. ใช่ ใช้ตัวเลือก --where เพื่อดึงข้อมูลแบบมีเงื่อนไข
วิธีแก้ปัญหา
mysqldump -u user -p database --tables table_name --where="created_at >= '2023-01-01'" > filtered_backup.sql
คำสั่งนี้สำรองข้อมูลที่สร้างขึ้นตั้งแต่วันที่ 1 มกราคม 2023 เป็นต้นไปเท่านั้น
6. ฉันจะแก้ไขอักขระที่เพี้ยนหลังจากกู้คืนได้อย่างไร?
Q. ทำไมอักขระภาษาญี่ปุ่นจึงเพี้ยนหลังจากกู้คืน?
A. การตั้งค่าชุดอักขระระหว่างการสำรองและกู้คืนอาจไม่ตรงกัน
วิธีแก้ปัญหา
- ระบุชุดอักขระระหว่างการสำรอง
mysqldump --default-character-set=utf8 -u user -p database > backup.sql
- ระบุชุดอักขระระหว่างการกู้คืน
mysql --default-character-set=utf8 -u user -p database < backup.sql
การทำให้ชุดอักขระสอดคล้องกันจะป้องกันข้อความเพี้ยน
7. สาเหตุทั่วไปที่ทำให้การสำรองล้มเหลวคืออะไร?
Q. หาก mysqldump หยุดกลางคัน สาเหตุที่เป็นไปได้คืออะไร?
A. มักเกิดจากขนาดฐานข้อมูล ปัญหาการกำหนดค่า หรือการหมดเวลาการเชื่อมต่อ
วิธีแก้ปัญหา
- ปรับการตั้งค่าที่เกี่ยวข้องกับหน่วยความจำ:
max_allowed_packet=512M
- ใช้ตัวเลือกเพื่อหลีกเลี่ยงการล็อก:
mysqldump --single-transaction --skip-lock-tables -u user -p database > backup.sql
- ส่งออกข้อมูลเป็นชิ้นเล็กๆ:
mysqldump -u user -p database table_name > table_backup.sql
การส่งออกทีละตารางช่วยลดภาระ
สรุป
ส่วนนี้ได้อธิบายคำถามที่พบบ่อยเกี่ยวกับ mysqldump และวิธีแก้ปัญหาเชิงปฏิบัติ มันครอบคลุมตั้งแต่การใช้งานพื้นฐานไปจนถึงการแก้ไขปัญหา ดังนั้นให้ใช้เป็นข้อมูลอ้างอิงเมื่อฝึกฝน mysqldump
9. สรุป
ในส่วนก่อนหน้า เราได้ครอบคลุม mysqldump ตั้งแต่พื้นฐานไปจนถึงการใช้งานขั้นสูง ในส่วนนี้ เราจะทบทวนเนื้อหาและย้ำประเด็นสำคัญสำหรับการใช้ mysqldump อย่างมีประสิทธิภาพ
1. บทบาทและคุณสมบัติของ mysqldump
mysqldump เป็นเครื่องมือที่จำเป็นสำหรับการสำรองและย้ายฐานข้อมูล MySQL มันช่วยให้มั่นใจในความปลอดภัยของข้อมูลและสามารถใช้สำหรับวัตถุประสงค์หลายอย่าง รวมถึงการกู้คืนจากภัยพิบัติและการคัดลอกข้อมูลไปยังสภาพแวดล้อมการพัฒนา
คุณสมบัติหลัก
- ความหลากหลาย: ส่งออกฐานข้อมูลเดียวหรือหลายฐานข้อมูล
- ความยืดหยุ่น: สำรองทีละตารางหรือโดยใช้เงื่อนไข
- ความเข้ากันได้: ตัวเลือกที่หลากหลายสำหรับชุดอักขระและเวอร์ชันเก่า
โดยการเข้าใจความสามารถเหล่านี้และรวมเข้าด้วยกันอย่างเหมาะสม คุณสามารถจัดการข้อมูลได้อย่างปลอดภัยและมีประสิทธิภาพ
2. การใช้งานพื้นฐานและเทคนิคขั้นสูง
การสำรองและกู้คืนพื้นฐาน
mysqldump รองรับการสำรองและกู้คืนด้วยคำสั่งง่ายๆ
ตัวอย่างการสำรอง:
mysqldump -u user -p database > backup.sql
ตัวอย่างการกู้คืน:
mysql -u user -p database < backup.sql
การใช้ตัวเลือกที่เป็นประโยชน์
- –single-transaction: หลีกเลี่ยงการล็อกในขณะที่รักษาความสอดคล้อง
- –quick: การสำรองที่มีประสิทธิภาพสำหรับชุดข้อมูลขนาดใหญ่โดยลดการใช้หน่วยความจำ
- –routines และ –triggers: ส่งออกโปรซีเจอร์ที่เก็บไว้และไตรเกอร์ด้วย
การใช้ตัวเลือกอย่างเหมาะสมช่วยให้คุณตอบสนองได้อย่างยืดหยุ่นต่อปริมาณข้อมูลและสภาพแวดล้อมที่แตกต่างกัน
3. กรณีใช้งานเชิงปฏิบัติ
การสำรองและกู้คืน WordPress
ในฐานะตัวอย่างในโลกจริง เราได้ใช้การจัดการฐานข้อมูล WordPress
- การสำรอง: บันทึกฐานข้อมูลก่อนการอัปเดตหรือย้าย
- การกู้คืน: ใช้สำหรับการกู้คืนไซต์หรือคัดลอกไปยังสภาพแวดล้อมการพัฒนา
การอ้างอิงตัวอย่างเฉพาะระบบจะช่วยเสริมทักษะ mysqldump เชิงปฏิบัติของคุณให้แข็งแกร่งยิ่งขึ้น
4. ความสำคัญของการแก้ไขปัญหาและการทำให้เป็นอัตโนมัติ
การจัดการข้อผิดพลาดและการแก้ไขปัญหา
ด้วย mysqldump คุณอาจเจอปัญหาเช่น ข้อผิดพลาดการเชื่อมต่อ ตัวอักษรเสียหาย หรือสิทธิ์ไม่เพียงพอ
- ตรวจสอบข้อความแสดงข้อผิดพลาดและแก้ไขให้เหมาะสมอย่างรวดเร็ว
- ปรับการตั้งค่า character set และขนาด packet เพื่อเพิ่มความพร้อมของฐานข้อมูลขนาดใหญ่
ประสิทธิภาพและความปลอดภัยผ่านการอัตโนมัติ
โดยการรวมการสำรองข้อมูลตามกำหนดเวลาเข้ากับ cron การถ่ายโอนระยะไกล และการลบสำเนาสำรองเก่าโดยอัตโนมัติ คุณสามารถเพิ่มประสิทธิภาพของการปกป้องข้อมูลได้อีกระดับ
5. มองไปข้างหน้าเพื่อการจัดการข้อมูลที่ดียิ่งขึ้น
ปรับกลยุทธ์การสำรองข้อมูลของคุณ
- รวมการสำรองข้อมูลเต็มและแบบเพิ่มส่วน: มุ่งสู่การดำเนินงานที่มีประสิทธิภาพ
- นำที่เก็บข้อมูลระยะไกลและการเข้ารหัสมาใช้: เสริมความแข็งแกร่งต่อการรั่วไหลของข้อมูลและภัยพิบัติ
ผสานรวมเครื่องมือที่เหนือกว่า mysqldump
- Percona Xtrabackup: รองรับการสำรองและกู้คืนที่รวดเร็ว
- mydumper: ทำให้การส่งออกข้อมูลเร็วขึ้นด้วยการประมวลผลแบบขนาน
การใช้เครื่องมือเหล่านี้ตามความต้องการสามารถเสริม mysqldump และช่วยปรับปรุงแนวทางการจัดการข้อมูลโดยรวมของคุณได้
6. สรุป
คำสั่ง mysqldump เป็นเครื่องมือที่ทรงพลังสำหรับการเสริมสร้างการจัดการและการปกป้องฐานข้อมูล ด้วยการเข้าใจการทำงานพื้นฐานและตัวเลือกขั้นสูง—และด้วยการอัตโนมัติกลยุทธ์การสำรองข้อมูล—คุณสามารถเพิ่มประสิทธิภาพการดำเนินงานและความปลอดภัยได้อย่างมีนัยสำคัญ
ใช้เนื้อหาในบทความนี้เป็นอ้างอิงเพื่อประยุกต์ใช้ mysqldump ในการปฏิบัติและบรรลุการจัดการข้อมูลที่เชื่อถือได้และปลอดภัย


