วิธีซ่อมตารางที่เป็น Innodb สำหรับ Directadmin (MySQL)

วิธีซ่อมตารางที่เป็น Innodb สำหรับ Directadmin (MySQL)

โดยปกติ 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
4 ) restore ข้อมูลทั้งหมดเข้า Database
cd /usr/local/directadmin/custombuild/mysql_backups
wget http://files1.directadmin.com/services/all/mysql/restore_sql_files.sh
chmod 755 restore_sql_files.sh
./restore_sql_files.sh
6 ) ให้ปิด mode recovery โดยการลบบรรทัด innodb_force_recovery ในไฟล์ /etc/my.cnf ออกและทำการ start service MySQL อีกครั้ง
ข้อมูลเพิ่มเติม
https://help.directadmin.com/item.php?id=559