Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

ซ่อมแซมตาราง MySQL จาก Command Line (REPAIR TABLE - MyISAM Only)

REPAIR TABLE ทำงานได้เฉพาะ MyISAM Engine เท่านั้น InnoDB ไม่รองรับ (มี Crash Recovery เอง)

ขั้นตอน

1. สร้างตาราง MyISAM

CREATE TABLE RepairTableDemo (
    id INT,
    name VARCHAR(100)
) ENGINE = MyISAM;

2. Insert ข้อมูล

INSERT INTO RepairTableDemo VALUES (1, 'John'), (2, 'Carol'), (3, 'Johnson');

3. รัน REPAIR TABLE

REPAIR TABLE RepairTableDemo;

ผลลัพธ์

+--------------------------+--------+----------+----------+
| Table                    | Op     | Msg_type | Msg_text |
+--------------------------+--------+----------+----------+
| business.repairtabledemo | repair | status   | OK       |
+--------------------------+--------+----------+----------+

REPAIR TABLE Options

REPAIR TABLE tbl_name [QUICK] [EXTENDED] [USE_FRM]

-- QUICK: เร็ว แค่ Index Tree (ไม่ Check Data)
-- EXTENDED: ช้า ตรวจสอบทุก Row (Recover Data มากที่สุด)
-- USE_FRM: ใช้ .frm File Recreate Index (Last Resort)

MyISAM Repair Tools (Command Line)

# myisamchk - Offline Repair (MySQL ต้อง Stop)
myisamchk -r /var/lib/mysql/db/table.MYI      # Recover (Default)
myisamchk -r -q /var/lib/mysql/db/table.MYI   # Quick Recover
myisamchk --safe-recover /var/lib/mysql/db/table.MYI  # Safe Recover (ช้า แต่น่าเชื่อถือ)
myisamchk -f /var/lib/mysql/db/table.MYI      # Force Overwrite

InnoDB: ไม่ต้อง REPAIR

  • InnoDB มี Crash Recovery อัตโนมัติผ่าน Redo/Undo Logs
  • ถ้า Corrupt: Restore จาก Backup หรือ innodb_force_recovery
  • innodb_force_recovery = 1..6 ใน my.cnf (Start ได้แต่ Read-only)

ตรวจสอบ Corruption

-- MyISAM
CHECK TABLE table_name;
-- MyISAM/InnoDB
CHECK TABLE table_name EXTENDED;

Output ของ CHECK TABLE

+--------------------------+-------+----------+----------+
| Table                    | Op    | Msg_type | Msg_text |
+--------------------------+-------+----------+----------+
| business.repairtabledemo | check | status   | OK       |
| business.corrupt_table   | check | error    | Corrupt  |
+--------------------------+-------+----------+----------+

Best Practice

  • ✅ ใช้ InnoDB (ไม่ต้อง Repair, Auto Recovery)
  • ✅ Backup เป็นประจำ (mysqldump, Percona XtraBackup)
  • ✅ Monitor Innodb_buffer_pool_pages_dirty, Innodb_data_pending_fsyncs
  • ⚠️ MyISAM: รัน CHECK TABLE เป็นประจำ, myisamchk Offline
  • ❌ อย่า REPAIR ใน Production Peak Hours (Lock Table)