วันอาทิตย์ที่ 28 มีนาคม พ.ศ. 2553

mysql incremental backup

เปิดใช้ binary log
ใน my.ini

[mysqld]
log-bin


แล้ว restart เครื่อง
ระบบจะเริ่มเขียน binary log ออกมา
อยู่ในรูป ชื่อเครื่อง.ตัวเลข เช่น
localhost-bin.000001
localhost-bin.000002
localhost-bin.000003


1. การทำ Full backup ทำเป็นคาบ เช่นสัปดาห์ละครั้ง
1.1 หยุดการใช้งาน หรือให้ readonly ด้วยคำสั่งนี้
mysql> FLUSH TABLES WITH READ LOCK;
1.2 copy ฐานข้อมูลออกมาตามปรกติ หรือ mysqldump ก็ได้
shell> mysqldump --all-databases --master-data --flush-logs > backup.sql
ถ้าใช้วิธี copy ออกมาต้องสั่ง flush logs ด้วยเพื่อบังคับให้ขึ้นไฟล์ใหม่
แล้วจดชื่อไฟล์ใหม่ที่เกิดขึ้นหลัง flush logs เอาไว้คู่กับไฟล์ backup
1.3 ปลด lock ใช้งานตามปรกติ
mysql> UNLOCK TABLES;

2. การทำ incremental backup เป็นประจำวันละครั้งหรือหลายครั้งตามสะดวก
2.1 สั่งขึ้น log ใหม่
mysql>FLUSH LOGS;
2.2 copy binary log เก็บไว้ ยกเว้นตัวล่าสุดไม่ต้อง copy เพราะถูกใช้งานอยู่

3. การลบ binary log ที่ได้ copy ไว้แล้ว
mysql> PURGE BINARY LOG TO 'ชื่อไฟล์.เลขล่าสุด'
-- เลขล่าสุดจะไม่โดนลบ

4. การกู้คืนข้อมูล
4.1 copy binary log ล่าสุดเก็บไว้ก่อน restore full backup ** สำคัญมาก ถ้าอยากได้ข้อมูลล่าสุดคืน
4.2 restore จาก full backup ตัวล่าสุด
4.3 restore จาก binary log ที่เกิดขึ้นหลังจาก full backup ล่าสุด
shell> mysqlbinlog log-bin.000020 log-bin.000021 log-bin.000022 | mysql -uroot -p

5. ซ้อมทำสม่ำเสมอ เหมือนซ้อมหนีไฟ เพื่อให้จำขั้นตอนได้แม่น ๆ จะได้ไม่ลนลาน
ให้ทดสอบ restore ใส่เครื่องทดสอบดู
อย่างน้อย restore ไม่เป็น ถ้ามี full backup และ binary log เก็บไว้
ยังมีคนช่วย restore ให้ได้