GORAGOD.com

การแก้ปัญหาเมื่อไม่สามารถ Start MariaDB บน Ubuntu ได้

เรื่องของเรื่องคือ ผมได้ติดตั้ง PHP5.6 และ MariaDB ลงบน XUbuntu 15.04 ครับ (ปกติแล้วการติดตั้ง MariaDB จะสำเร็จใน Server บางเวอร์ชั่นครับ) ซึ่งในครั้งแรกที่ติดตั้ง MariaDB ก็ทำงานปกติดีครับ (แสดงว่ามันสามารถทำงานบน Ubuntu 15.04 ได้) แต่หลังจากที่ผมทำการย้ายที่เก็บไฟล์ของฐานข้อมูล กลับพบว่ามันทำงานไม่สมบูรณ์ครับ และสุดท้าย ผมไม่สามารถ Start มันได้อีกเลยในวันรุ่งขึ้น

ก่อนอื่นเรามาดูกันก่อนว่า MySQL มีปัญหาอะไร โดยการเปิด Terminal พิมพ์ข้อความตามด้านล่าง
sudo service mysql status

ผมได้ผลตอบกลับมา มีข้อความตามด้านล่าง เป็นสีแดงๆ (ข้อความตอบกลับมีหลายบรรทัดครับ ผมตัดมาเฉพาะที่เกี่ยวข้องนะครับ)
/etc/init.d/mysql[1640]: 150831 12:38:08 mysqld_safe Can't log to error log and syslog at the same time. Remove all --log-error configuration options for --sy...take effect.

ข้อผิดพลาดนี้บอกว่า มีปัญหาจาก error log ผมเลยไปปิด error log มันซะเลย

เปิด config ของ mysql (MariaDB) มาแก้ไข
sudo gedit /etc/mysql/mariadb.conf.d/mysqld.cnf

มองหาบรรทัด log_error แล้วปิดมันซะด้วยการเติม # ลงไปด้านหน้า
#log_error = /var/log/mysql/error.log

ลอง start  MySQL ดูครับ
sudo service mysql start

ถ้าสามารถทำงานได้เป็นปกติ ก็จบขั้นตอนครับ แต่ถ้ายังมีปัญหาอยู่ ก็ให้แก้ไขให้เสร็จด้วยวิธีการตามด้านบน

ส่วนตัว ผมมีการเปลี่ยนตำแหน่งที่เก็บฐานข้อมูลของ MariaDB ด้วย ทำให้ผมพบปัญหาถัดมา ซึ่งมีข้อความ Error ตามด้านล่าง
mysqld[1743]: InnoDB: then you can remove the .ibd file, and InnoDB will do a normal
mysqld[1743]: InnoDB: crash recovery and ignore that table.
mysqld[1743]: InnoDB: 3) If the file system or the disk is broken, and you cannot remove
mysqld[1743]: InnoDB: the .ibd file, you can set innodb_force_recovery > 0 in my.cnf
mysqld[1743]: InnoDB: and force InnoDB to continue crash recovery here.

ปัญหานี้เกิดจากมีไฟล์ .ibd ค้างอยู่ในระบบ ซึ่งการแก้ไข เขาแจ้งให้ลบไฟล์นี้ออกและ restart mysql ใหม่ครับ แต่หากไม่พบไฟล์นี้หรือไม่สามารถลบได้ให้ เปิดไฟล์ my.cnf และกำหนด innodb_force_recovery ให้มากกว่า 0
# # * InnoDB
# # InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/.
# Read the manual for more InnoDB related options. There are many!
innodb_force_recovery = 1