วันศุกร์ที่ 29 ตุลาคม พ.ศ. 2564

mysqldump และบีบอัดไฟล์

 หลังจากที่สำรองข้อมูลใน mysql แล้วปัญหาใหญ่ที่เจอ คือ ไฟล์ขนาดใหญ่ทำให้ดาวน์โหลดช้ามาก วิธีแก้ไขอีกวิธีหนึ่ง คือ บีบอัดให้เล็กลงก่อนที่จะส่งไฟล์ผ่านระบบเน็ตเวิร์กหรืออินเตอร์เน็ต

  • การสำรองฐานข้อมูลพร้อมทั้งบีบอัดไฟล์ที่ได้
$ mysqldump -u [uname] -p[pass] [dbname] | gzip -9 > [backupfile.sql.gz]

กรณี Restore ข้อมูล .gz

gunzip < [path-to-file-sql.gz] | mysql -u [uname] -p[pass] [db_name]


การบีบอัดไฟล์ทำให้ขนาดลดลงเป็นอย่างมาก จากข้อมูลประมาณ 8 ล้านรายการ หาก dump แบบไม่บีบอัดจะได้ขนาด 2.7 GB แต่ถ้าบีบอัดแล้วจะได้ประมาณ 300 MB เช่น

root@db1:/home/yothinin# ls -l
total 3062592
-rw-r--r-- 1 root root 2,794,506,060 Oct 29 11:55 db-20211027.sql
-rw-r--r-- 1 root root   341,575,683 Oct 30 01:57 db-20211030.sql.gz

root@db1:/home/yothinin# time gunzip < db-20211030.sql.gz | mysql sbt_db

real 26m43.499s
user 0m52.715s
sys 0m5.410s

จากข้อมูลข้างบนหลังจากที่นำเข้าข้อมูลจากไฟล์ที่บีบอัดใช้เวลา 26 นาที 43 วินาที ก็ถือว่าไม่นาน เพราะไฟล์ที่ไม่บีบอัดก็จะอยู่ที่ 24-28 นาทีสำหรับไฟล์ที่มีรายการประมาณ 8 ล้านรายการ

สรุปการสำรองข้อมูลจะใช้เวลาน้อยกว่าการคืนค่าข้อมูล เพราะการคืนค่าหรือการ restore นั้นระบบจะเพิ่มคำสั่งทีละคำสั่งเหมือนการทำงานของ mysql ตั้งแต่เริ่มตั้นนั่นแหละ ซึ่งจะช้าหรือเร็วก็ขึ้นอยู่กับความเร็วในการเขียนข้อมูลในเซิร์ฟเวอร์นั้นๆ

ไม่มีความคิดเห็น:

แสดงความคิดเห็น

Gtk4 ตอนที่ 6 Defining a Child object

Defining a Child object A Very Simple Editor ในบทความที่ผ่านมาเราสร้างโปรแกรมอ่านไฟล์ชนิดข้อความ และในบทความนี้ก็จะมาปรับแต่งโปรแกรมกันสักหน...