Recovery mysql data from innodb database .
วันก่อนมี case เกี่ยวกับตัว file ib_logfile0 , ib_logfile1 ของ database ตัวหนึ่งที่ type เป็น innodb มีปัญหาครับ
file มัน corrupt จนทำให้เปิด mysql engine ไม่ขึ้น ทำให้ mysql service down ไป
สำหรับวิธีการแก้ปัญหาของผมคือ ต้องเปิด recovery mode ของ innodb
แล้วทำการเข้าไป dump database ก้อนนั้นออกมา
drop database ที่ใช้งาน innodb ออก
จากนั้นทำการ ลบ ib_logfile0 แล้วเปิด mysql engine แบบปกติแล้วให้ มัน generate ib_logfile0
จากนั้นทำการ create database ที่ต้องการใช้งาน เป็น innodb
ทำการ import database ลงไปใน database ที่สร้าง
วิธีการปรับ recovery mode มี อยู่ 6 ค่าด้วยกันครับลองอ่านเพิ่มได้ที่นี่นะ
http://dev.mysql.com/doc/refman/5.1/en/forcing-innodb-recovery.htmlแต่ในเคสผม ผมจะ enable recovery mode ระดับ 5
5 (SRV_FORCE_NO_UNDO_LOG_SCAN)
Do not look at undo logs when starting the database: InnoDB treats even incomplete transactions as committed.
เริ่มโดยการ backup file (ibdata1 , ib_logfile0 , ib_logfile1 ) ไว้ก่อนนะครับ
แล้วทำ
###Enable innodb recovery mode in my.cnf
[mysqld]
innodb-force-recovery = 5
เสร็จทำการ restart mysql service.
เข้าไป dump database ที่ใช้งาน innodb ออกมา
#mysqldump -uxxx -p amavis > amavis_2011.sql
#mysql -p
>drop database amavis;
เข้าไป drop database amavis ครับ
เสร็จแล้วทำการ stop mysql engine
ลบ ibdata1 , ib_logfile0 , ib_logfile1
ทำการ comment ใน my.cnf
#innodb-force-recovery = 5
restart mysql service.
รอให้มัน generate ไฟล์
ibdata1 , ib_logfile0 , ib_logfile1
เสร็จทำการเข้าไป create database ครับ
#mysql -p
>create database amavis;
แล้วทำการ dump database กลับลงไปใน amavis.
#mysql -uxxx -p amavis < amavis_2011.sql
ก็เป็นการเสร็จสิ้นการ recovery ibdata1 ของ innodb ครับผม ^^