คู่มือ mysqldump: การสำรองข้อมูล, การกู้คืน, ตัวเลือก, และการทำอัตโนมัติสำหรับ MySQL & MariaDB

目次

1. บทนำ

คำสั่ง mysqldump คืออะไร?

การสำรองข้อมูลและการย้ายฐานข้อมูลเป็นงานที่สำคัญในด้านการดูแลระบบและการพัฒนา เครื่องมือหนึ่งที่ช่วยในงานเหล่านี้คือ mysqldump
mysqldump เป็นยูทิลิตี้สำหรับส่งออกและบันทึกเนื้อหาของฐานข้อมูล MySQL มันถูกใช้กันอย่างกว้างขวางในหลายสภาพแวดล้อมที่มีระบบจัดการฐานข้อมูล (DBMS) ทำงานอยู่

คุณสมบัติหลักของ mysqldump

  1. ความสามารถในการสำรองข้อมูล – ส่งออกเนื้อหาฐานข้อมูลเป็นสคริปต์ SQL เพื่อให้คุณสามารถกู้คืนข้อมูลได้ในกรณีที่เกิดภัยพิบัติหรือเหตุการณ์ไม่คาดคิด
  2. ความสามารถในการย้ายข้อมูล – ช่วยให้การย้ายข้อมูลไปยังสภาพแวดล้อมหรือเซิร์ฟเวอร์อื่นทำได้อย่างราบรื่น
  3. ความยืดหยุ่น – รองรับการส่งออกตามตารางหรือด้วยเงื่อนไข ทำให้สามารถสำรองข้อมูลบางส่วนได้

ด้วยวิธีนี้ คำสั่ง mysqldump จึงเป็นเครื่องมือที่ทรงพลังซึ่งสนับสนุนความปลอดภัยของข้อมูลและการจัดการที่มีประสิทธิภาพ

จุดประสงค์ของบทความนี้และกลุ่มเป้าหมาย

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

กลุ่มเป้าหมาย

  • ผู้เริ่มต้น: ผู้ที่ยังไม่คุ้นเคยกับการทำงานของ MySQL แต่ต้องการเรียนรู้พื้นฐานการสำรองและกู้คืน
  • ผู้ใช้ระดับกลาง: ผู้ที่ต้องการเชี่ยวชาญการใช้ mysqldump อย่างปฏิบัติและเพิ่มประสิทธิภาพการทำงาน
  • นักพัฒนา / วิศวกรปฏิบัติการ: ผู้ที่ต้องการความรู้เชิงลึกเกี่ยวกับการจัดการฐานข้อมูลและความสามารถในการตอบสนองอย่างรวดเร็วเมื่อเกิดปัญหา

สิ่งที่คุณจะได้เรียนในบทความนี้

  1. ไวยากรณ์พื้นฐานและตัวอย่างของคำสั่ง mysqldump
  2. วิธีการส่งออกและนำเข้าฐานข้อมูลและตาราง
  3. การแก้ไขปัญหาและวิธีแก้ข้อผิดพลาด
  4. การทำงานอัตโนมัติของการสำรองข้อมูลและมาตรการความปลอดภัย

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

2. พื้นฐานของ mysqldump และสิ่งที่มันทำได้

ภาพรวมของ mysqldump

mysqldump เป็นเครื่องมือบรรทัดคำสั่งที่ใช้สำหรับสำรองและย้ายฐานข้อมูล MySQL และ MariaDB มันส่งออกโครงสร้างและข้อมูลของฐานข้อมูลในรูปแบบ SQL หรือข้อความ

ความสามารถหลักของ mysqldump

  1. การสำรองฐานข้อมูลเต็มรูปแบบ: บันทึกการสำรองข้อมูลครบถ้วนรวมทั้งข้อมูลและสคีม่า
  2. การสำรองข้อมูลบางส่วน: ส่งออกเฉพาะตารางที่ต้องการ ทำให้การจัดการฐานข้อมูลขนาดใหญ่ทำได้อย่างมีประสิทธิภาพ
  3. การย้ายข้อมูล: มีประโยชน์เมื่อย้ายฐานข้อมูลไปยังเซิร์ฟเวอร์หรือสภาพแวดล้อมอื่น
  4. การส่งออกการตั้งค่าและสิทธิ์: สามารถส่งออก 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 : ระบุชื่อไฟล์ผลลัพธ์

วิธีจัดการข้อผิดพลาดการเชื่อมต่อ

  1. หากเป็นข้อผิดพลาดการยืนยันตัวตน:
    ERROR 1045 (28000): Access denied for user 'user'@'localhost' (using password: YES)
    

→ ยืนยันว่าชื่อผู้ใช้และรหัสผ่านถูกต้อง และมอบสิทธิ์ที่เหมาะสม

  1. หากเป็นข้อผิดพลาดที่เกี่ยวกับโฮสต์:
    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 : นำเข้าข้อมูลจากไฟล์สำรอง

หมายเหตุและคำแนะนำ

  1. สร้างฐานข้อมูลล่วงหน้า: หากฐานข้อมูลปลายทางไม่มีอยู่ คุณต้องสร้างมันก่อนล่วงหน้า.
    CREATE DATABASE example_db;
    
  1. แยกการนำเข้าสำหรับข้อมูลขนาดใหญ่: หากขนาดข้อมูลใหญ่ ให้รวมการแยกไฟล์และการแตกบีบอัดเพื่อเพิ่มประสิทธิภาพ.
  2. ตรวจสอบการเข้ารหัสอักขระ: เพื่อป้องกันข้อความเสียหายในระหว่างการสำรองและกู้คืน ให้ตรวจสอบการตั้งค่าชุดอักขระของคุณ.
    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

คำอธิบาย

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

สรุปตัวเลือกที่เป็นประโยชน์อื่น ๆ

OptionDescription
–skip-lock-tablesAvoids table locks to speed up exports.
–default-character-setSpecifies the character set (e.g., utf8).
–result-fileWrites directly to an output file to improve performance.
–hex-blobExports binary data in hexadecimal format.
–no-create-infoExports 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)

สาเหตุ

  • ชื่อผู้ใช้หรือรหัสผ่านไม่ถูกต้อง.
  • ผู้ใช้ไม่มีสิทธิ์เพียงพอ.

วิธีแก้ไข

  1. ตรวจสอบว่าชื่อผู้ใช้และรหัสผ่านถูกต้อง.
  2. ให้สิทธิ์.
    GRANT ALL PRIVILEGES ON database_name.* TO 'user'@'localhost' IDENTIFIED BY 'password';
    FLUSH PRIVILEGES;
    
  1. หากต้องการทำให้การใส่รหัสผ่านเป็นอัตโนมัติ ให้พิจารณาใช้ไฟล์ .my.cnf.

2. ข้อผิดพลาดฐานข้อมูลที่ไม่รู้จัก

ตัวอย่างข้อความข้อผิดพลาด

ERROR 1049 (42000): Unknown database 'database_name'

สาเหตุ

ฐานข้อมูลที่ระบุไม่มีอยู่.

วิธีแก้ไข

  1. สร้างฐานข้อมูล.
    CREATE DATABASE database_name;
    
  1. ตรวจสอบการพิมพ์ชื่อฐานข้อมูลว่าถูกต้องหรือไม่.

3. ข้อผิดพลาดสิทธิ์ไม่เพียงพอ

ตัวอย่างข้อความข้อผิดพลาด

mysqldump: Got error: 1044: Access denied for user 'user'@'localhost' to database 'database_name'

สาเหตุ

ผู้ใช้ไม่มีสิทธิ์เข้าถึงฐานข้อมูลที่ระบุ.

วิธีแก้ไข

  1. ตรวจสอบสิทธิ์ปัจจุบัน.
    SHOW GRANTS FOR 'user'@'localhost';
    
  1. ให้สิทธิ์ที่จำเป็น.
    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'

สาเหตุ

  • ฐานข้อมูลใหญ่เกินไปและการเชื่อมต่อหมดเวลา
  • ทรัพยากรเครือข่ายหรือเซิร์ฟเวอร์ไม่เพียงพอ

วิธีแก้ไข

  1. อัปเดตไฟล์การกำหนดค่า (my.cnf) เพิ่มพารามิเตอร์ต่อไปนี้
    [mysqld]
    max_allowed_packet=512M
    net_read_timeout=600
    net_write_timeout=600
    
  1. ใช้ตัวเลือกที่เป็นประโยชน์
    mysqldump --quick --single-transaction -u user -p database_name > backup.sql
    

สิ่งนี้ช่วยสำรองข้อมูลจำนวนมากได้อย่างมีประสิทธิภาพ.

5. อักขระเสียหาย

อาการ

  • หลังจากการกู้คืน ตัวอักษรหลายไบต์เช่นภาษาญี่ปุ่นแสดงผลเป็นอักขระเสียหาย.

สาเหตุ

การตั้งค่าชุดอักขระระหว่างการสำรองและการกู้คืนไม่ตรงกัน.

วิธีแก้ไข

  1. ระบุชุดอักขระระหว่างการสำรอง
    mysqldump --default-character-set=utf8 -u user -p database_name > backup.sql
    
  1. ระบุชุดอักขระระหว่างการกู้คืน
    mysql --default-character-set=utf8 -u user -p database_name < backup.sql
    

6. ข้อผิดพลาดตารางซ้ำระหว่างการกู้คืน

ตัวอย่างข้อความแสดงข้อผิดพลาด

ERROR 1050 (42S01): Table 'table_name' already exists

สาเหตุ

มีตารางที่มีชื่อเดียวกันอยู่แล้วในฐานข้อมูลปลายทาง.

วิธีแก้ไข

  1. เพิ่มคำสั่ง DROP TABLE IF EXISTS โดยทำการสำรองด้วยตัวเลือกนี้.
    mysqldump --add-drop-table -u user -p database_name > backup.sql
    
  1. ลบตารางเป้าหมายด้วยตนเอง.
    DROP TABLE table_name;
    

7. การสำรองล้มเหลวเนื่องจากการล็อก

ตัวอย่างข้อความแสดงข้อผิดพลาด

mysqldump: Error 1227: Access denied; you need (at least one of) the SUPER privilege(s) for this operation

สาเหตุ

เกิดการล็อกตารางและสิทธิ์ไม่เพียงพอ.

วิธีแก้ไข

  1. เพิ่มตัวเลือกเพื่อหลีกเลี่ยงการล็อก.
    mysqldump --single-transaction --skip-lock-tables -u user -p database_name > backup.sql
    
  1. ขยายสิทธิ์หากจำเป็น.

สรุป

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

7. การทำอัตโนมัติและการสร้างกลยุทธ์การสำรองข้อมูล

การสำรองฐานข้อมูลด้วย mysqldump มีความสำคัญต่อการเพิ่มความปลอดภัยของระบบ ส่วนนี้อธิบายวิธีทำการสำรองอัตโนมัติและการจัดการอย่างมีกลยุทธ์.

1. ประโยชน์ของการทำอัตโนมัติ

ทำไมการทำสำรองอัตโนมัติถึงสำคัญ

  • หลีกเลี่ยงข้อผิดพลาดของมนุษย์: ป้องกันความผิดพลาดที่เกิดจากการดำเนินการด้วยมือ.
  • การปกป้องที่สม่ำเสมอ: การสำรองทำงานอย่างเชื่อถือได้ตามกำหนดเวลา.
  • การกู้คืนที่รวดเร็ว: กู้คืนข้อมูลล่าสุดอย่างรวดเร็วเมื่อเกิดความล้มเหลว.

สถานการณ์ทั่วไป

  • การสำรองก่อนอัปเดตเว็บไซต์.
  • การสำรองตามกำหนดเวลาประจำวัน/สัปดาห์.
  • การปกป้องข้อมูลระหว่างการบำรุงรักษาและอัปเกรดเซิร์ฟเวอร์.

2. การสำรองตามกำหนดเวลาด้วย cron

ตัวอย่างการกำหนดค่า cron เบื้องต้น

  1. เริ่มแก้ไขงาน cron ของคุณ.
    crontab -e
    
  1. เพิ่มตารางเวลาต่อไปนี้.

ตัวอย่าง: ทำการสำรองข้อมูลทุกวันเวลา 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

  1. เปิดใช้งาน binary logs เพิ่มต่อไปนี้ใน my.cnf :
    [mysqld]
    log_bin=mysql-bin
    expire_logs_days=10
    
  1. สำรอง binary logs
    mysqlbinlog mysql-bin.000001 > binlog_backup.sql
    
  1. ขั้นตอนการกู้คืน
    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. หากฐานข้อมูลมีขนาดใหญ่ หรือเกิดการล็อกตาราง กระบวนการอาจช้า

วิธีแก้ไข

  1. ปรับแต่งตัวเลือก
    mysqldump --single-transaction --quick -u user -p database > backup.sql
    
  • –single-transaction : ใช้ transaction เพื่อรักษาความสอดคล้องในขณะที่หลีกเลี่ยงการล็อก
  • –quick : ประมวลผลข้อมูลทีละแถวในขณะที่ลดการใช้หน่วยความจำ
  1. เพิ่มขนาดแพ็กเก็ต แก้ไขไฟล์กำหนดค่า ( my.cnf ):
    max_allowed_packet=512M
    
  1. ใช้การประมวลผลแบบขนาน ใช้เครื่องมือที่สำรองหลายตารางแบบขนาน (ตัวอย่างเช่น mydumper )

2. ฉันจะบันทึกไฟล์สำรองที่บีบอัดได้อย่างไร?

Q. ฐานข้อมูลมีขนาดใหญ่—ฉันจะประหยัดพื้นที่จัดเก็บได้อย่างไร?

A. บีบอัดการสำรองด้วย gzip เพื่อลดขนาดไฟล์

วิธีแก้ไข

mysqldump -u user -p database | gzip > backup.sql.gz

วิธีนี้ปรับปรุงประสิทธิภาพการจัดเก็บในขณะที่รักษาอัตราบีบอัดที่ดี

3. ฉันจะป้องกันความขัดแย้งของข้อมูลระหว่างการกู้คืนได้อย่างไร?

Q. ความขัดแย้งสามารถเกิดขึ้นเมื่อกู้คืนฐานข้อมูลหรือไม่?

A. ใช่ ความขัดแย้งสามารถเกิดขึ้นเมื่อตารางหรือข้อมูลมีอยู่แล้ว

วิธีแก้ไข

  1. เมื่อคุณต้องการลบข้อมูลที่มีอยู่ก่อนกู้คืน
    mysqldump --add-drop-table -u user -p database > backup.sql
    

ตัวเลือกนี้จะลบตารางที่มีอยู่ก่อนสร้าง

  1. เมื่อคุณต้องการนำเข้าขณะเก็บข้อมูลที่มีอยู่
    mysql -u user -p database < backup.sql
    

หากคุณต้องการเขียนทับเฉพาะข้อมูลตามเงื่อนไข พิจารณาตัวเลือก --replace ด้วย

4. ฉันจะย้ายข้อมูลระหว่างเซิร์ฟเวอร์ที่แตกต่างกันได้อย่างไร?

Q. ฉันควระวังอะไรเมื่อย้ายข้อมูลไปยังเซิร์ฟเวอร์อื่น?

A. ระวังปัญหาความเข้ากันได้ที่เกิดจากชุดอักขระหรือเวอร์ชันที่แตกต่าง

วิธีแก้ไข

  1. ระบุชุดอักขระระหว่างการส่งออก
    mysqldump --default-character-set=utf8 -u user -p database > backup.sql
    
  1. ตรวจสอบการตั้งค่าชุดอักขระปลายทาง
    mysql --default-character-set=utf8 -u user -p database < backup.sql
    
  1. ตรวจสอบความเข้ากันได้ของเวอร์ชัน
    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. การตั้งค่าชุดอักขระระหว่างการสำรองและกู้คืนอาจไม่ตรงกัน

วิธีแก้ปัญหา

  1. ระบุชุดอักขระระหว่างการสำรอง
    mysqldump --default-character-set=utf8 -u user -p database > backup.sql
    
  1. ระบุชุดอักขระระหว่างการกู้คืน
    mysql --default-character-set=utf8 -u user -p database < backup.sql
    

การทำให้ชุดอักขระสอดคล้องกันจะป้องกันข้อความเพี้ยน

7. สาเหตุทั่วไปที่ทำให้การสำรองล้มเหลวคืออะไร?

Q. หาก mysqldump หยุดกลางคัน สาเหตุที่เป็นไปได้คืออะไร?

A. มักเกิดจากขนาดฐานข้อมูล ปัญหาการกำหนดค่า หรือการหมดเวลาการเชื่อมต่อ

วิธีแก้ปัญหา

  1. ปรับการตั้งค่าที่เกี่ยวข้องกับหน่วยความจำ:
    max_allowed_packet=512M
    
  1. ใช้ตัวเลือกเพื่อหลีกเลี่ยงการล็อก:
    mysqldump --single-transaction --skip-lock-tables -u user -p database > backup.sql
    
  1. ส่งออกข้อมูลเป็นชิ้นเล็กๆ:
    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 ในการปฏิบัติและบรรลุการจัดการข้อมูลที่เชื่อถือได้และปลอดภัย