โดยปกติ InnoDB Engine จะมีการ recovery ตัวเองเสมอในกรณีที่ Table มีปัญหาแต่ก็อาจจะมีบางครั้งที่เป็นการเสียหายที่มากกว่าระบบจะทำการ recovery ตัวเองได้สาเหตุที่ผมพบเจอบ่อยๆก็คือ Harddisk ของเซิฟเวอร์เต็ม หรือมีการไปยุ่งกับไฟล์ lbdata เช่นการ copy, หรือไปทำให้มันเกิดการ lock จนทำให้ MySQL รับ transaction เข้ามาแต่ Commit ไม่ได้จนทำให้ Crash ในที่สุดและวิธีการซ่อมแซม InnoDB Engine แบ่งเป็นขั้นตอนดังนี้
1) เปิด mode innodb recovery ให้กับ mysql โดยจะมีทั้งหมด 6 mode โดยแต่ละโหมดก็คือลำดับของความเสียหายที่อาจจะเกิดขึ้นกับข้อมูลใน Database แนะนำให้ไล่ตั้งแต่ 1-6 หาก start mysql ขึ้นที่ mode 1 ก็ถือว่าโชคดีที่สุดครับ
2) ทำการ Dump Database ออกมา
3) ลบ Database ที่เป็น InnoDB ทิ้งทั้งหมด
4) restore ข้อมูลกลับคืน
5) เปิด Mode ปกติให้กับ MySQL เพื่อที่ให้สามารถใช้ insert , update ได้ เนื่องจาก recovery mode จะไม่สามารถ insert , update ข้อมูลได้
ขั้นตอนการซ่อมแซม InnoDB ใน Directadmin
1) ให้ทำการเพิ่ม innodb_force_recovery = 1 เข้าไปที่ไฟล์ /etc/my.cnf เและลอง start service mysql (หากยัง start ไม่ขึ้นให้เปลี่ยนเลขไปเรื่อยๆตั้งแต่ 1-6)
** หาก MySQL ยังสามารถทำงานได้ให้ทำการข้ามขั้นตอนนี้ไปได้เลย
2 ) ทำการ Backup ข้อมูลด้วยการ Dump Database ทั้งหมดออกมา
cd /usr/local/directadmin/custombuild ./build update ./build set mysql_backup yes ./build mysql_backup
ไฟล์ sql ทั้งหมดจะถูกเก็บไว้ที่ /usr/local/directadmin/custombuild/mysql_backups เข้าไปเช็คเพื่อความแน่ใจก่อนจะทำขั้นตอนต่อไป
3 ) ปิด service mysql และ backup folder ของ MySQL ไว้ก่อนเพื่อความชัว และลบ InnoDB ทิ้งทั้งหมด
perl -pi -e 's/mysqld=ON/mysqld=OFF/' /usr/local/directadmin/data/admin/services.status /etc/init.d/mysqld stop cd /var/lib cp -Rp mysql mysql.innodb.backup
หลังจากนั้นให้เข้าไปลบตารางพวกนี้ทั้งให้หมด mysql, performance_schema, information_schema โดยเข้าผ่าน phpmyadmin ก็ได้ครับ password สำหรับ root access จะเก็บไว้ที่ไฟล์ /usr/local/directadmin/conf/mysql.conf
ลบไฟล์ที่เก้บข้อมูล InnoDB ทิ้งทั้งหมดด้วยคำสั่งนี้
cd /var/lib/mysql /etc/init.d/mysqld stop rm -f ib* /etc/init.d/mysqld start perl -pi -e 's/mysqld=OFF/mysqld=ON/' /usr/local/directadmin/data/admin/services.status
cd /usr/local/directadmin/custombuild/mysql_backups wget https://putter.network/rtools/restore_sql_files.sh chmod 755 restore_sql_files.sh ./restore_sql_files.sh
https://help.directadmin.com/item.php?id=559