ปัญหา ปัญหา database Innodb error ไม่สามารถเรียกได้ หรือขึ้น error ไม่สามารถเรียกได้ ทางแก้ปัญหา ให้ทำการตรวจสอบได้จาก mysql error log เมื่อตรวจพบว่าเป็นปัญหาที่ Innodb เราจะต้องทำการ export Database ออกมาก่อน แล้วทำการ dump database กลับเข้าไปใหม่โดย 1. ให้ทำการ เพิ่มค่า innodb_force_recovery = 6 ในไฟล์ /etc/my.cnf หมายเหตุ : การกำหนดค่า innodb_force_recovery นี้ มีความเสี่ยงที่จะทำให้ข้อมูลสูญหายได้ โดยจะมีค่าตั้งแต่ 1-6 เราควรกำหนดให้เหมาะสม 2. จากนั้นให้ทำการ restart service mysql 3. ให้ทำการ export all database โดยใช้คำสั่ง Export เพียง 1 Database : mysqldump -u root -p databases > database.sql Export database all : mysqldump -u root -p --all-databases > alldb.sql ถ้า export database ออกมาไม่ได้อาจจะติดที่ tables databases lock ให้ใช้คำสั่ง Export เพียง 1 Database : mysqldump -u root -p database --skip-lock-tables > alldb.sql Export database all : mysqldump -u root -p --all-databases --skip-lock-tables > alldb.sql 4. จากนั้นให้ทำการ ลบค่า innodb_force_recovery = 6 ในไฟล์ /etc/my.cnf 5. จากนั้นให้ทำการ restart service mysql 6. ทำการ import mysql database ที่ทำการ export กลับเข้าไปโดยใช้คำสั่ง Import เพียง 1 Database : mysql -u root -p database < database.sql Import database all : mysql -u root -p < alldb.sql สาเหตุของปัญหา ในการใช้งาน MySQL โดยทั่วไปนั้น มีโอกาสที่จะพบปัญหา database เสียหาย เช่นกรณีไฟดับ Harddisk Drive เสีย หรือระบบหยุดทำงานแบบผิดปกติโดยไม่ทราบสาเหตุ
Dump Database และมีการ Insert Query ช้า ใส่ข้อมูลที่ไฟล .sql ตามข้อมูลด้านล้าง 1.- ใส่ข้อมูลหัวของไฟล์ SET @OLD_AUTOCOMMIT=@@AUTOCOMMIT, AUTOCOMMIT = 0;SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS = 0;SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS = 0; - ใส่ข้อมูลท้ายสุดของไฟล์SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;SET AUTOCOMMIT = @OLD_AUTOCOMMIT;COMMIT; 2. ดำเนินการ Dump Databasemysql db_name < file.sql
ใช้ในกรณีที่ไม่สามารถทำผ่าน WHM ได้ วิธีแก้ปัญหาทีม TSส่งให้ lv2 วิธีแก้ปัญหาทีม SYSNOC หรือ ITS* สำหรับ ubuntu ต้อง run "sudo su -" ก่อน 1. Stop mysql server. /etc/rc.d/init.d/mysql stop 2. Start MySQL server but skip grant tables mysqld_safe --skip-grant-tables ตอนนี้น่าจะ start mysql ได้ ถ้าไม่ได้แปลว่า mysql มีปัญหาแล้ว 3. ให้ start อีก session หนี่ง เพื่อทำงานต่อ 4. Connect DB mysql --user=root mysql 5. reset root MySQL password update user set Password=PASSWORD('new-password') where user='root'; flush privileges; exit; เปลี่ยน new-password เป็น password ใหม่ 6. Ctrl+C session เดิม เพื่อ stop mysql 7. Start mysql ใหม่ /etc/rc.d/init.d/mysql start
วิธีแก้ปัญหาทีม TSส่ง lv2 วิธีแก้ปัญหาทีม SYSNOC หรือ ITSตัวอย่างที่พบใน เครื่อง zabbix2.netway.co.th (ใช้ mariadb) 1. performance_schema has wrong structure 130929 22:35:53 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it. 130929 22:35:53 [Note] Server socket created on IP: '::'. 130929 22:35:53 [ERROR] Missing system table mysql.proxies_priv; please run mysql_upgrade to create it 130929 22:35:53 [ERROR] Can't open and lock privilege tables: Table 'mysql.servers' doesn't exist 130929 22:35:53 [ERROR] Native table 'performance_schema'.'events_waits_current' has the wrong structure 130929 22:35:53 [ERROR] Native table 'performance_schema'.'events_waits_history' has the wrong structure 130929 22:35:53 [ERROR] Native table 'performance_schema'.'events_waits_history_long' has …….. 130929 22:35:53 [ERROR] Native table 'performance_schema'.'events_waits_summary_by_instance' has the wrong structure 130929 22:35:53 [ERROR] Native table 'performance_schema'.'events_waits_summary_global_by_event_name' has the wrong structure 130929 22:35:53 [ERROR] Native table 'performance_schema'.'file_summary_by_event_name' has the wrong structure 130929 22:35:53 [ERROR] Native table 'performance_schema'.'file_summary_by_instance' has the wrong structure ….. 130929 22:35:53 [ERROR] Column count of mysql.db is wrong. Expected 22, found 20. Created with MariaDB 50077, now running 5532. Please use mysql_upgrade to fix this error. 130929 22:35:53 [ERROR] mysql.user has no `Event_priv` column at position 29 130929 22:35:53 [ERROR] Cannot open mysql.event 130929 22:35:53 [ERROR] Event Scheduler: An error occurred when initializing system tables. Disabling the Event Scheduler. วิธีแก้ไข mysql_upgrade -p 2. --log-slow-queries is deprecated 130929 11:49:08 [Warning] The syntax '--log-slow-queries' is deprecated and will be removed in a future release. Please use '--slow-query-log'/'--slow- query-log-file' instead วิธีแก้ไข edit /etc/my.cnf และเปลี่ยน log-slow-queries="/var/log/mysql_slow_query.log" เป็น slow-query-log-file="/var/log/mysql_slow_query.log" และ restart mysql /etc/rc.d/init.d/mysql restart 3. Error WSREP: Query cache is not supported 130929 23:19:12 [ERROR] WSREP: Query cache is not supported (size=268435456 type=1) วิธีแก้ไข edit /etc/my.cnf และเปลี่ยน query_cache_size=256M เป็น # Query Cache is not supported with wsrep #query_cache_size=256M และ restart mysql /etc/rc.d/init.d/mysql restart
หากไม่มีเมนูจัดการสามารถใช้วิธีการนี้เปลี่ยนได้ วิธีแก้ปัญหาทีม TS ส่งให้ lv2 วิธีแก้ปัญหาทีม SYSNOC หรือ ITS 1. Dump mysql database จาก character เดิมไปเป็น character ใหม่ cd /var/lib/mysql/ # export DATABASE="adminzil_ziltech" # cp -a ${DATABASE} ${DATABASE}40 # mysqldump --default-character-set=tis620 --skip-set-charset ${DATABASE} > ${DATABASE}.sql # ถ้า dump มาแล้ว อ่านไทยไม่ออกลอง # mysqldump --default-character-set=latin1 --skip-set-charset ${DATABASE} > ${DATABASE}.sql # replace tis620 utf8 -- ${DATABASE}.sql # mysql --execute="DROP DATABASE ${DATABASE};" # mysql --execute="CREATE DATABASE ${DATABASE} CHARACTER SET utf8 COLLATE utf8_general_ci;" # mysql --default-character-set=utf8 ${DATABASE} < ${DATABASE}.sql export DATABASE= 2. แก้ไขเว็บไซต์ให้ connect database โดยใช้ character set utf8 โดย search หาจุด ที่มี code mysql_connect หรือ mysql_pconnect และ เพิ่ม code mysql_query("SET character_set_results='utf8'"); สำหรับ ADODB เวลา query ให้ใช้ $sql = "SET character_set_results='utf8'"; $conn->Execute("$sql"); หรือใช้ SET CHARACTER ก็ได้