Skip to main content

การสำรองข้อมูลและการคืนข้อมูล (Backup and Restore) ใน PostgreSQL

บทนำ

การสำรองข้อมูล (Backup) และ การคืนข้อมูล (Restore) เป็นกระบวนการที่สำคัญในการรักษาความปลอดภัยของข้อมูลในระบบฐานข้อมูล PostgreSQL. การสำรองข้อมูลช่วยป้องกันข้อมูลสูญหายจากปัญหาต่างๆ เช่น ความผิดพลาดของผู้ใช้, การโจมตีจากภายนอก, หรือความเสียหายจากฮาร์ดแวร์. การคืนข้อมูล (restore) ช่วยให้สามารถกู้คืนข้อมูลจากการสำรองไว้เพื่อฟื้นฟูฐานข้อมูลในกรณีที่เกิดปัญหา

ใน PostgreSQL, มีเครื่องมือหลายตัวที่ใช้สำหรับการสำรองข้อมูลและการคืนข้อมูล ได้แก่ pg_dump, pg_dumpall, pg_restore, และ psql

1. การสำรองข้อมูล (Backup)

1.1 การสำรองฐานข้อมูลด้วย pg_dump

pg_dump เป็นเครื่องมือที่ใช้ในการสำรองข้อมูลฐานข้อมูล PostgreSQL. เครื่องมือนี้สามารถสำรองข้อมูลของฐานข้อมูลเดียวได้ รวมถึงโครงสร้างและข้อมูลภายในฐานข้อมูล.

ตัวอย่างการสำรองฐานข้อมูล:

pg_dump dbname > backup.sql

คำสั่งนี้จะสำรองข้อมูลจากฐานข้อมูล dbname และบันทึกผลลัพธ์ลงในไฟล์ backup.sql.

การสำรองข้อมูลในรูปแบบไบนารี:

pg_dump -Fc dbname > backup.dump

ในตัวอย่างนี้, คำสั่ง -Fc จะทำการสำรองข้อมูลในรูปแบบไฟล์ไบนารีที่สามารถนำไปใช้กับคำสั่ง pg_restore ได้.

1.2 การสำรองฐานข้อมูลทั้งหมดด้วย pg_dumpall

หากต้องการสำรองข้อมูลทั้งหมดในระบบฐานข้อมูล PostgreSQL (ไม่ใช่แค่ฐานข้อมูลเดียว), สามารถใช้คำสั่ง pg_dumpall. เครื่องมือนี้จะทำการสำรองข้อมูลของทุกฐานข้อมูล, การตั้งค่าผู้ใช้งาน, และบทบาทต่างๆ.

ตัวอย่างการสำรองข้อมูลทั้งหมด:

pg_dumpall > all_databases_backup.sql

1.3 การสำรองข้อมูลด้วยการใช้ไฟล์ระบบ

นอกจากนี้, ยังสามารถสำรองข้อมูลโดยการคัดลอกไฟล์ของฐานข้อมูลที่อยู่ในระบบไฟล์ (เฉพาะเมื่อฐานข้อมูลหยุดทำงาน) ซึ่งวิธีนี้ไม่แนะนำสำหรับฐานข้อมูลที่กำลังทำงาน.

2. การคืนข้อมูล (Restore)

การคืนข้อมูล (Restore) เป็นกระบวนการในการกู้คืนข้อมูลจากไฟล์ที่ได้ทำการสำรองไว้ เพื่อคืนค่าฐานข้อมูลที่สูญหายหรือเสียหาย

2.1 การคืนข้อมูลจากไฟล์ SQL ด้วย psql

หากสำรองข้อมูลในรูปแบบไฟล์ SQL, สามารถใช้คำสั่ง psql เพื่อคืนข้อมูลจากไฟล์นั้น

ตัวอย่างการคืนข้อมูล:

psql dbname < backup.sql

ในตัวอย่างนี้, ข้อมูลจากไฟล์ backup.sql จะถูกคืนลงในฐานข้อมูล dbname.

2.2 การคืนข้อมูลจากไฟล์ไบนารีด้วย pg_restore

หากสำรองข้อมูลในรูปแบบไบนารีด้วย pg_dump -Fc, การคืนข้อมูลสามารถทำได้โดยใช้คำสั่ง pg_restore. เครื่องมือนี้จะใช้ไฟล์ที่ได้ทำการสำรองในรูปแบบไบนารีเพื่อคืนข้อมูล.

ตัวอย่างการคืนข้อมูล:

pg_restore -C -d dbname backup.dump

ในตัวอย่างนี้, คำสั่ง -C จะทำการสร้างฐานข้อมูลใหม่ (หากไม่เคยมี) และคืนข้อมูลจากไฟล์ backup.dump ไปยังฐานข้อมูล dbname.

2.3 การคืนข้อมูลทั้งหมดด้วย pg_restore

หากสำรองข้อมูลทั้งหมดด้วย pg_dumpall, สามารถใช้คำสั่ง psql หรือ pg_restore เพื่อคืนข้อมูลทั้งหมดได้.

ตัวอย่างการคืนข้อมูลทั้งหมด:

psql -f all_databases_backup.sql postgres

3. การคืนค่าผู้ใช้งานและบทบาท

เมื่อทำการสำรองข้อมูลด้วย pg_dumpall, ข้อมูลเกี่ยวกับผู้ใช้งานและบทบาทจะถูกรวมอยู่ในไฟล์สำรองข้อมูลแล้ว. เมื่อทำการคืนข้อมูล, ข้อมูลเกี่ยวกับผู้ใช้งานและบทบาทจะถูกคืนค่าไปด้วย.

การคืนค่าผู้ใช้งานและบทบาทจากไฟล์สำรองข้อมูล:

psql -f all_databases_backup.sql postgres

คำสั่งนี้จะคืนค่าผู้ใช้งาน, บทบาท, และข้อมูลทั้งหมดในระบบ PostgreSQL

4. การสำรองและคืนข้อมูลในระหว่างการใช้งาน

ในการสำรองข้อมูลขณะที่ฐานข้อมูลยังคงทำงาน, PostgreSQL มีฟีเจอร์ที่เรียกว่า Write-Ahead Logging (WAL) ซึ่งช่วยให้สามารถสำรองข้อมูลที่เกิดการเปลี่ยนแปลงได้ทันทีหลังจากการทำธุรกรรม

4.1 การใช้งาน WAL Archiving

การใช้งาน WAL Archiving ช่วยให้สามารถเก็บข้อมูลการเปลี่ยนแปลงจากธุรกรรมทั้งหมดในรูปแบบไฟล์ log และใช้ในการคืนข้อมูล

การตั้งค่า WAL Archiving:

# เปิดใช้งานในไฟล์ postgresql.conf
archive_mode = on
archive_command = 'cp %p /path_to_archive/%f'

การตั้งค่าเหล่านี้จะทำให้ PostgreSQL ทำการเก็บไฟล์ WAL ทุกครั้งที่มีการเปลี่ยนแปลงในฐานข้อมูล

4.2 การคืนข้อมูลจาก WAL

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

5. การตรวจสอบความสมบูรณ์ของข้อมูลหลังการคืนข้อมูล

หลังจากการคืนข้อมูล, ควรทำการตรวจสอบความสมบูรณ์ของข้อมูลเพื่อให้มั่นใจว่าการคืนข้อมูลทำได้อย่างถูกต้อง. สามารถตรวจสอบได้ด้วยการใช้คำสั่ง CHECK และการทดสอบการทำงานของระบบหลังจากคืนข้อมูล.

การตรวจสอบข้อมูลในตาราง:

SELECT * FROM table_name LIMIT 10;

ตรวจสอบข้อมูลบางส่วนในตารางเพื่อให้แน่ใจว่าไม่มีข้อมูลสูญหาย

6. สรุป

การสำรองข้อมูลและการคืนข้อมูลใน PostgreSQL เป็นกระบวนการที่สำคัญเพื่อรักษาความปลอดภัยของข้อมูลและป้องกันความเสี่ยงจากการสูญหายของข้อมูล. PostgreSQL มีเครื่องมือหลากหลายที่ช่วยให้การสำรองและคืนข้อมูลเป็นไปได้อย่างสะดวก เช่น pg_dump, pg_dumpall, pg_restore, และ psql. การใช้ฟีเจอร์ต่างๆ เช่น WAL Archiving และการตั้งค่าการสำรองข้อมูลในรูปแบบไบนารีช่วยเพิ่มประสิทธิภาพในการสำรองและคืนข้อมูลอย่างมีประสิทธิภาพ.