Mysql errorcode : 13 ครับผม

สวัสดีครับ พอดีเมื่ออาทิตย์ก่อน server ที่ดูแลอยู่เกิดอาการล่มครับ และหลังจากลงระบบแล้วเกิดปัญหาครับ

ก่อนอื่นเลย เอา spec ไปก่อนะครับ

server : SUNFire X4150
os : centos 6.3
mysql : 5.1
php : 5

** ขอกล่าวถึงเฉพาะเรื่อง mysql นะครับ
คือระบบมันรวนมากครับ เดี๋ยว service โน้นติด นี่ดับ ฯลฯ ท้ายสุด mysql start ไม่ติดครับ ก็เลยตัดสินใจลงใหม่
แต่ด้วย mysql มัน start ไม่ได้ ก็เลยไม่สามารถ dump ตามขั้นตอนปกติได้
ผมก็จำต้องใช้วิธีหักดิบ คือเข้าไป copy folder data มาจาก /var/lib/mysql ครับ
เอามาดิบๆทั้งดุ้นเลย เมื่อก่อนใช้ server windows ก็ลงเครื่องใหม่ให้ mysql มันรุ่นเดียวกัน เอา folder นี้ทับไป จบ

แต่พอล่าสุดนี้ผมลองวิธีนี้ดู ปรากฎว่าใช้การไม่ได้เลยครับ ใน phpmyadmin มองเห็น DB จริง แต่ไม่ปรากฎ table เลย (มี 100 กว่า)
ทีนี้ผมอยากรู้ว่า error ยังไง เลยเข้าส่วนจัดการ mysql ใน webmin ดูครับ พบ error ว่า

[h=3]/usr/bin/mysqlshow: Cannot list tables in satitcom: Can’t read dir of ‘./satitcom/’ (errno: 13)[/h]

ทีนี้อยากรบกวนท่านผู้รู้ครับ ผมจะสามารถแก้ไขปัญหาได้อย่างไรบ้างครับเพื่อให้ฐานข้อมูลทำงานได้เหมือนเดิม

ปล.ข้อมูลใน table สำคัญมากๆๆๆครับผม

file system มีปัญหาหรือเปล่า
ถ้ากด reset หน้าเครื่องบ่อยๆ file system มีปัญหาแน่นอน
เข้าหน้าเครื่อง boot เข้า singleuser แล้ว fsck ซักรอบ

ติด Permission หรือเปล่าครับ

มี mysql error log หรือเปล่าครับ?

น่าจะติดเรื่อง permission นะ ถ้าไม่รู้ว่า mysql run ด้วย user อะไร ลองใช้ chmod 666 ลงไปดูก่อนว่า work หรือเปล่า?

แต่คิดว่า CentOS น่าจะเป็น user ชื่อ mysql นะครับ

สั่ง chown mysql:mysql -R /var/lib/mysql แล้ว restart mysql service ใหม่ครับ

ปล. เครื่องติดๆ ดับๆ นี่ถ้าหาสาเหตุไม่เจอ ลงใหม่มันก็เท่านั้นนะครับ

น่าจะเป็นปัญหาเรื่อง permission ครับ

ถ้าให้ชัวร์ ทำไมไม่ไปดู logfile ของ mysql หละครับ

น่าจะเป็นที่ตัว tables เสียนะครับ ลอง repair ดูครับ
myisamchk -o *.MYI

ขอบคุณทุกท่านที่ตอบนะครับ ขอทำความเข้าใจดังนี้ก่อนนะครับ

1.ที่ติดๆดับๆ ไม่ใช่เครื่องครับแต่เป็น service

2.ขณะนี้ file system “ไม่น่าจะ” มีปัญหาครับ เพราะเพิ่งจะติดตั้งระบบใหม่

3.File data ของ mysql ผมใช้วิธี copy ทื่อๆ จาก os เดิม(ก่อน format) มาใส่ทับครับ
เพราะขณะนั้นไม่สามารถ start mysql ได้เลย ลงใหม่ก็ start ไม่ติดครับ ก็เลยไม่สามารถ dump ข้อมูลออกมาได้เลย

สำหรับวิธีของคุณ DinoNet และท่านอื่นๆเดี๋ยวผมขอรับไปลองดูก่อนนะครับ พอดีแถวนี้ต่อ VPN เข้าไปไม่ติด :7f5341cc:

เข้าได้แล้วลอง check log /var/log/mysqld.log ด้วยนะครับ

อ่อครับ เครื่องติดตั้งใหม่งั้นก็ตัดปัญหาเรื่อง fs error ออกไปได้เลย
กรณี copy ไฟล์มาวางดื้อๆ ก็น่าจะติดปัญหาเรื่อง owner/permission ของไฟล์ข้อมูลแหละครับ

นี่คือข้อความใน log ครับ

130131 19:21:36 [ERROR] Cannot find or open table satitcom/com_assignment_submissions from
the internal data dictionary of InnoDB though the .frm file for the
table exists. Maybe you have deleted and recreated InnoDB data
files but have forgotten to delete the corresponding .frm files
of InnoDB tables, or you have moved .frm files to another database?
or, the table contains indexes that this version of the engine
doesn’t support.
See http://dev.mysql.com/doc/refman/5.1/en/innodb-troubleshooting.html
how you can resolve the problem.

เอาไฟล์ ibdata มาด้วยหรือเปล่า
ข้อมูล innodb มันอยู่ในไฟล์ ibdata ครับ
จริงๆถ้าให้ดีน่าจะ dump เป็น .sql ออกมาจากเครื่องเก่า แล้วมา import เข้าเครื่องใหม่
แต่จริงๆยก folder mysql มาทั้งยวงเลยมันก็ได้ แต่ถ้าก็อปมาแค่ folder ย่อยของบาง db ข้อมูลตาราง innodb มันไม่อยู่ในนั้น

ยกมาหมดเลยครับ ทั้ง folder /var/lib/mysql เลยครับ

check permission ดีแล้วใช่มั้ยคัรบ? ลองสั่ง ls -la /var/lib/mysql ดูแล้วยังเอ่ย

ลองแล้วครับ ไม่เป็นผล

ไม่เป็นผลนี่ยังไงฮะ ที่ผมบอกนี่คือให้ check ว่า owner ถูกมั้ย (mysql.mysql) นะ -*-’

เช็คแล้วครับ ถูกต้อง

ไม่เป็นผล = ลองดูหลายๆวิธี(อีกครั้ง) ก็ไม่ได้ผล(ไม่เห็น table)ครับ

centos รึเปล่าครับ?

ลองสั่ง setenforce 0 แล้วลองดูอีกทีครับ

ถ้าสั่งแล้วใช้ได้ ไปแก้ไฟล์ /etc/selinux/config ตรง SELINUX=enforcing เป็น SELINUX=disabled เพื่อให้มีผลถาวรครับ

ปิดไว้แต่แรกแล้วครับ ปากฎว่าก็ยังเปิดฐานข้อมูลไม่ได้อยู่ดีครับผม :485c3a61:

สั่ง getenforce ดูสถานะดูครับ ควรจะขึ้นว่า Permissive หรือ Disabled นะครับ

errno 13 = permission denied ไม่ติด selinux ก็คือ owner/permission ผิดอะ

chown mysql.mysql -R /var/lib/mysql

chmod 770 -R /var/lib/mysql

restorecon /var/lib/mysql

setenforce 0

ถ้าไม่ได้อีก ls -la /var/lib/mysql มาให้ดูหน่อยครับ