ตาราง MySQL ถูกทำเครื่องหมายว่าล้มเหลวและการซ่อมแซมครั้งสุดท้าย (อัตโนมัติ?) ล้มเหลว


126

ฉันกำลังซ่อมโต๊ะนี้จู่ๆเซิร์ฟเวอร์ก็ถูกแขวนคอและเมื่อฉันส่งคืนตารางทั้งหมดก็โอเค แต่อันนี้แสดงว่า 'ใช้งานอยู่' และเมื่อฉันพยายามซ่อมแซมมันไม่ดำเนินการต่อ

ข้อผิดพลาด 144 - ตาราง "./extas_d47727/xzclf_ads" ถูกทำเครื่องหมายว่าล้มเหลวและการซ่อมแซมครั้งสุดท้าย (อัตโนมัติ?) ล้มเหลว

ฉันจะซ่อมมันได้อย่างไร?


1
ฉันเคยเห็นสิ่งนี้ส่วนใหญ่เกิดขึ้นเมื่อระบบไฟล์ที่อยู่ภายใต้ออกจาก inodes ฟรี ตรวจสอบด้วย df -hi มักจะมีบางอย่างเต็มไปด้วยไฟล์ขนาดเล็กจำนวนมากเช่นไฟล์เซสชัน php ที่ไม่ได้รับการล้างข้อมูล
Zrin

คำตอบ:


260

หากกระบวนการ MySQL ของคุณกำลังทำงานอยู่ให้หยุดกระบวนการดังกล่าว บน Debian:

sudo service mysql stop

ไปที่โฟลเดอร์ข้อมูลของคุณ บน Debian:

cd /var/lib/mysql/$DATABASE_NAME

ลองวิ่ง:

myisamchk -r $TABLE_NAME

หากไม่ได้ผลคุณสามารถลอง:

myisamchk -r -v -f $TABLE_NAME

คุณสามารถเริ่มเซิร์ฟเวอร์ MySQL ได้อีกครั้ง บน Debian:

sudo service mysql start

3
ฉันลองใช้คำสั่งข้างต้นฉันได้รับข้อผิดพลาดนี้ไม่สามารถสร้างไฟล์ชั่วคราวใหม่: 'xzclf_ads.TMD'
CryptoMiningPoolSetupYiimp

2
ดิสก์เต็มจริงหรือ? ลองวิ่ง "df -h" ได้ไหม เป็นไปได้มากว่าคุณควรเพิ่มพื้นที่ว่าง ... ในระหว่างการซ่อมแซมตารางจะใช้เนื้อที่ดิสก์บางส่วนเพื่อเขียนลงในตารางชั่วคราว ดังที่คุณเห็นจากข้อความแสดงข้อผิดพลาดที่เขียนไปยังโฟลเดอร์ / tmp / ของคุณ
Aleksandar Vucetic

13
ฉันมีเพื่อนำทางไปและเรียกใช้/var/lib/mysql/<database> myisamchk -r -v -f ./<table name>
Linus Oleander

5
ฉันมีmyisam_sort_buffer_size is too smallข้อผิดพลาดดังนั้นคำสั่งนี้จึงใช้ได้ผลสำหรับฉัน:myisamchk -r -v --sort_buffer_size=2G <table_name>
dusan

1
ว้าวฉันคิดว่าเว็บไซต์ทั้งหมดของฉันถูกปิด วิธีแก้ไขง่ายๆ คุณคือฮีโร่ของฉัน!
Anthony

105

ลองเรียกใช้แบบสอบถามต่อไปนี้:

repair table <table_name>;

ฉันมีปัญหาเดียวกันและมันช่วยแก้ปัญหาให้ฉันได้


นี่เป็นการแก้ไขอย่างรวดเร็ว! มีตารางตัวเลือก "ไม่ดี" ตรวจสอบให้แน่ใจว่าคุณได้เลือกฐานข้อมูลที่ถูกต้องก่อน!
jyllstuart

12

หากให้การปฏิเสธสิทธิ์แก่คุณขณะย้ายไปที่ / var / lib / mysql ให้ใช้วิธีแก้ไขปัญหาต่อไปนี้

$ cd /var/lib/
$ sudo -u mysql myisamchk -r -v -f mysql/<DB_NAME>/<TABLE_NAME>


3

ฉันได้รับmyisamchk: error: myisam_sort_buffer_size is too smallข้อผิดพลาด

การแก้ไขปัญหา

myisamchk -r -v mysql/<DB_NAME>/<TABLE_NAME> --sort_buffer_size=2G

2

ไปที่data_dirและลบYour_table.TMPไฟล์หลังจากซ่อมแซม<Your_table>ตาราง


อยู่ที่ไหนdata_dir?
CMCDragonkai

1
ค้นหาด้วยคำสั่งgrep -r datadir /etc/mysql/นี้ ควรอยู่/var/lib/mysqlภายใต้ debian และ ubuntu
ThorstenS

1

นี่คือวิธีแก้ปัญหา 100% ผมลองด้วยตัวเอง

myisamchk -r -v -f --sort_buffer_size = 128M --key_buffer_size = 128M / var / lib / mysql / databasename / tabloname


0

ฉันลองใช้ตัวเลือกในคำตอบที่มีอยู่ส่วนใหญ่เป็นคำตอบที่ทำเครื่องหมายว่าถูกต้องซึ่งใช้ไม่ได้ในสถานการณ์ของฉัน อย่างไรก็ตามสิ่งที่ได้ผลคือการใช้ phpMyAdmin เลือกฐานข้อมูลจากนั้นเลือกตารางจากเมนูแบบเลื่อนลงด้านล่างเลือก "ซ่อมแซมตาราง"

  • ประเภทเซิร์ฟเวอร์: MySQL
  • เวอร์ชันเซิร์ฟเวอร์: 5.7.23 - MySQL Community Server (GPL)
  • phpMyAdmin: ข้อมูลเวอร์ชัน: 4.7.7
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.