All about unix linux freebsd and FAQ for Packetlove.com Web hosting , Mail hosting , VoIP + IP PBX server > Trick เกี่ยวกับการแก้ปัญหา เกี่ยวกับ compiler gcc c++ c build make install

innodb database file ibdata1 and ib_logfile0 was corrupt [how to fix]

(1/2) > >>

golfreeze:
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 ครับผม ^^

sukjai.krub:
อ.กอล์ฟ รบกวนสอบถาม database เป็น mysql แบบ innodb หากเราทำการลบไฟล์ ib_logfile0 กับ ib_logfile1 ใน Server
  ทำให้ไม่สามารถเปิดตารางที่เป็น innodb ได้เลย จะมีวิธีการอย่างไรกู้คืนทำให้เปิดไฟล์ได้บ้างครับ ขอบคุณครับ

golfreeze:
ลองปรับเป็น mode "innodb-force-recovery = 6"
ได้ปะครับผม

แล้วทำการ dump ข้อมูลออกมาก่อนแล้วก็ค่อย dump กลับไปอีกที

whitevampire66:
ขอบคุณงับ ^^

golfreeze:
ถ้าท่านใดใช้งานเป็น myisam ลองดูตามนี้นะครับผม
http://golfreeze.packetlove.com/smileboard/index.php?topic=81.msg1390;topicseen#msg1390

นำร่อง

[0] ดัชนีข้อความ

[#] หน้าถัดไป

Go to full version