Backup MySQL Database method by

30
Jul
0

การ backup database แบ่งออกเป็นสองประเภทหลักๆ ได้แก่

  1. Physical Backup - เป็นการ backup ข้อมูลโดยการ copy โครงสร้างข้อมูลมาทั้ง directory และ file ทั้งหมดนั่นเอง การ backup แบบนี้มีข้อดีคือสามารถ recovery คืนกลับได้รวดเร็ว และการ backup ก็ใช้เวลาน้อยกว่า Logical เนื่องจากเป็นเพียงการ copy file ธรรมดาๆ แต่มีข้อเสียคือการย้ายฐานข้อมูลจากเครื่องหนึ่งไปยังอีกเครื่องหนึ่งซึ่งเป็นคนละ OS หรือเป็น mysql คนละเวอร์ชั่น จะไม่สามารถกระทำได้ โดยปกติมักใช้ mysqlhotcopy(MyISAM), ibbackup (InnoDB) เป็นเครื่องมือในการ backup
  2. Logical Backup – เป็นการ backup ข้อมูลโดย export ข้อมูลทั้งหมดมาเป็นคำสั่ง SQL โดยมีการ CREATE TABLE และข้อมูลทั้งหมดใหม่ มีข้อดีคือสามารถโยกย้ายไปยังเครื่องอีกเครื่องอีกเครื่องหนึ่งได้ง่าย import ได้เลยทันที ไม่ว่าจะเป็น OS คนละตัวหรือไม่ก็ตาม โดยปกติแล้วมักใช้ mysqldump เป็นเครื่องมือในการ backup

ต่อไปเป็นรูปแบบการ backup แบ่งเป็น 4 แบบ

  1. Full Backup - backup database ขณะนั้นทั้งหมดทุกตาราง ข้อมูลทุกชิ้น การ Recover จะทำได้เร็วกว่า incremental เนื่องจากมีไฟล์เพียงไฟล์เดียว
  2. Incremental Backup – backup database เฉพาะการส่วนที่เปลี่ยนแปลง โดยการ backup แบบนี้ต้องมีไฟล์ full backup เป็นฐานก่อน จึงจะสามารถทำได้ การ Recover จะกินเวลามากกว่า Full Backup เนื่องจากต้อง recover ไฟล์ full backup ที่เป็นฐานก่อน แล้วจึงรัน recover ส่วนที่เปลี่ยนแปลง แต่หากมีการ backup บ่อยๆ และข้อมูลไม่มีการเปลี่ยนแปลงมากนัก วิธีนี้จะช่วยประหยัดพื้นที่ได้มากทีเดียว การ backup วิธีนี้จำเป็นต้องเปิดใช้งาน Binary Log
  3. Snapshot Backup - เป็นการ backup แบบ Logical ซึ่งเป็นในลักษณะคล้ายไฟล์ image ที่ใช้ backup ไฟล์ทั่วไปในเครื่อง เป็นการรวมไฟล์ทั้งหมด ณ เวลาหนึ่งๆ โดยจำเป็นต้องใช้ความสามารถของ OS หรือ third party software เช่น Veritas, LVM, or ZFS และ snapshot บางตัวอย่าง LVM สามารถสั่ง mount ข้อมูลออกมาเพื่อใช้เปรียบเทียบกับตัว master ได้ทันอีกด้วย
  4. Replication – เป็นการสร้าง database ขึ้นมาอีกตัวหนึ่งเรียกว่า slave ส่วน database ต้นฉบับจะเรียกว่า master โดย slave อาจอยู่ที่ server เดียวกับ master หรือคนละ server ก็ได้ มักใช้ Binary Log เข้าช่วยในการส่งข้อมูลการเปลี่ยนแปลงจาก master ไป slave เนื่องจากช่วยให้ค่อยๆ ส่งข้อมูลไปทีละน้อยๆ ได้ง่าย และหากต้องการ backup เป็นแบบ full หรือ incremental ต่อไปอาจ backup จากตัว slave ได้เลยโดยไม่จำเป็นต้องยุ่งกับตัว master ทำให้สะดวกต่อการใช้งานมาก อีกทั้งการสั่ง recover อาจ สั่งที่ตัว slave แล้วนำข้อมูลไปเปรียบเทียบกับ master ได้ทันที ค่อนข้างมีประสิทธิภาพดีมาก วิธีนี้อาจใช้คู่กับ Snapshot บางตัวได้อีกด้วย

สำหรับบทความนี้ จะสอนการ backup โดยใช้ mysqldump ไปจนถึง Incremental Backup ครับ จะไม่ครอบคลุมถึง Snapshot และ Replication

ขั้นตอนการ Backup แบบ Incremental (แก้ root และ password ในส่วนของ -u root -p password เป็น username, password ของคุณ)

  1. Enable Binary Log ด้วยการแก้ไขไฟล์ /opt/local/etc/my.cnf (หากไม่พบ กรุณาตรวจสอบ OS ที่ใช้ และลองหาดูว่าได้ติดตั้งตัว config mysql หรือก็คือ my.cnf ไว้ที่ใด) โดยเพิ่มบรรทัด log-bin = /var/log/mysql/binary.log เข้าไปภายใต้ [mysqld] เป็นการระบุตำแหน่งที่จะให้จัดเก็บ Binary Log
  2. สั่ง restart mysql แล้วตัว Mysql จะสร้างไฟล์ bin.000001 และไฟล์ใหม่ bin.000002 ให้ ณ ตำแหน่งที่ระบุไว้ในข้อ 1
  3. Backup แบบ Full Back up โดยใช้คำสั่ง
    mysqldump –flush-logs –master-data planet -u root -p password my_db | gzip -9 > fulldb.sql.gz
    จำเป็นต้องมี –master-data เพื่อเพิ่ม header พิเศษว่าเริ่มนับจาก Binary Log ไฟล์ใด และ –flush-logs เพื่อสั่งให้ขึ้นไฟล์ Binary Log ไฟล์ใหม่
  4. หากต้องการเก็บเป็นไฟล์ในรูป Logical (SQL Statement) ให้สั่ง
    cut_str=`echo “SHOW MASTER STATUS;” | mysql -u root -p password | grep bin`
    bin_file=${cut_str:0:10}
    mysqlbinlog $bin_file > logical.sql

    จะได้ไฟล์ logical.sql มา โดยคำสั่งส่วนนี้เป็นการสั่งให้แปลง Binary เป็น Logical เฉพาะไฟล์ Binary Log ไฟล์ล่าสุดเท่านั้น หากต้องการระบุไฟล์ Binary Log หลายๆ ไฟล์รวมกันอาจสั่งโดยตรงด้วยคำสั่ง

    mysqlbinlog  bin.000001 bin.000002 > logical.sql

  5. สำหรับการ Recover สามารถสั่ง recover ด้วยจุดของเวลาได้เลยด้วยคำสั่ง
    mysqlbinlog --stop-datetime="2005-04-20 9:59:59" \
    /var/log/mysql/bin.123456 | mysql -u root -p password

หมายเหตุ : สามารถสั่ง
echo “FLUSH LOGS” | mysql -uroot -p
ที่ shell เพื่อแทนการสั่ง –flush-logs ของ mysqldump ได้ เพื่อขึ้นไฟล์ Binary Log ไฟล์ใหม่โดยไม่ทำ Full Backup

เอาล่ะ ขอให้โชคดีกับการ Backup MySQL กันทุกคนครับ :)

ข้อมูลเพิ่มเติม : http://dev.mysql.com/doc/refman/5.1/en/backup-and-recovery.html

Enjoy this article?

Consider subscribing to our RSS feed!

ไม่มีความเห็น

ยังไม่มีความเห็น

ใส่ความเห็น

RSS feed for comments on this post

 เราชนะรอบ 4 | ยืมเงิน 3000 ด่วน | แอพกู้เงิน | แอพเงินด่วน | สินเชื่อออนไลน์อนุมัติทันที | Site Map | กู้เงินก้อน | กระเป๋าตัง | thisshop และ ยืมเงินฉุกเฉิน 5000 ด่วน