جداول پایگاه داده به دلایل مختلفی ممکن است corrupt شوند:

  1. پردازش mysql در میانه عملیات نوشتن kill شود.
  2. سیستم به صورت ناگهانی shutdown شود.
  3. خطاهای سخت افزاری رخ دهد.
  4. تغییراتی توسط نرم‌افزارهای دیگر بجز mysql بر روی جداول اعمال شود.
  5. برخی bug ها در نرم‌افزار mysql

در این شرایط mysql نمی‌تواند عملیات مورد نظر را بر روی جداول corrupt شده انجام دهد و نرم‌افزار با خطا رو‌به‌رو می‌شود.

حتی گاهی ممکن است پردازش mysql به دلیل وجود جداول corrupt شده، به صورت مداوم در یک بازه زمانی crash کند. در صورت رخ دادن همچین وضعیتی لازم است پیام‌های restarted mysqld را از mysql log مورد برسی قرار دهید.

 

استفاده از نرم‌افزار نگهداری جداول mysqlcheck

mysqlcheck امکان بررسی، آنالیز، بهینه‌سازی و تعمیر جداول را فرآهم می‌کند. در ادامه به بررسی برخی موارد استفاده آن خواهیم پرداخت:

بررسی جدول خواص از پایگاه داده خاص

# mysqlcheck -c [DB] [TABLE] -u root -p
Enter password:
thegeekstuff.employee OK

بررسی همه جداول یک پایگاه داده

# mysqlcheck -c [DB]  -u root -p

بررسی همه جداول در همه پایگاه داده‌ها

# mysqlcheck -c  -u root -p --all-databases

آنالیز جداول

# mysqlcheck -a [DB] [TABLE] -u root -p

بهینه‌سازی جداول

mysqlcheck -o [DB] [TABLE] -u root -p

تعمیر جداول

mysqlcheck -r [DB] [TABLE] -u root -p

بررسی، بهینه‌سازی و تعمیر همزمان جداول

mysqlcheck -u root -p --auto-repair -c -o --all-databases

و در صورتی که یک پایگاه داده خاص مد نظر است:

mysqlcheck -u root -p --auto-repair -c -o [DB]

همچنین دیگر تنظیمات mysqlcheck در ادامه آمده است:

-A, –all-databases Consider all the databases
-a, –analyze Analyze tables
-1, –all-in-1 Use one query per database with tables listed in a comma separated way
–auto-repair Repair the table automatically it if is corrupted
-c, –check Check table errors
-C, –check-only-changed Check tables that are changed since last check
-g, –check-upgrade Check for version dependent changes in the tables
-B, –databases Check more than one databases
-F, –fast Check tables that are not closed properly
–fix-db-names Fix DB names
–fix-table-names Fix table names
-f, –force Continue even when there is an error
-e, –extended Perform extended check on a table. This will take a long time to execute.
-m, –medium-check Faster than extended check option, but does most checks
-o, –optimize Optimize tables
-q, –quick Faster than medium check option
-r, –repair Fix the table corruption

همچنین می‌توانید با استفاده از cron job دستور mysqlcheck را برای تعمیر جداول فراخوانی کنید تا در صورت بروز مشکل، سیستم به صورت خودکار آن را برطرف کند.

در صورتی که روی سرور شما نرم‌افزارهای مدیریتی مانند phpMyAdmin نصب است، می‌توانید از امکانات آنها برای تعمیر جداول استفاده کنید.

بازسازی و یا تعمیر جدال و فهرست ها

shell> mysqldump db_name > dump.sql
shell> mysql db_name < dump.sql

دیدگاه‌ها

تصویر محمدعلی اکبری

محمدعلی اکبری
The database server needs to be running to do any of these checks. Log in as 'root' via SSH and:

Shows you if any need repair:
myisamchk --check /var/lib/mysql/*/*.MYI

Then try 'safe-recover' first:
myisamchk --safe-recover /var/lib/mysql/*/*.MYI

and, if neither that nor this works:
myisamchk --recover /var/lib/mysql/*/*.MYI

Then use the 'force' flag:
myisamchk --safe-recover --extend-check --force /var/lib/mysql/*/*.MYI

or:
myisamchk --recover --extend-check --force /var/lib/mysql/*/*.MYI
تصویر محمدعلی اکبری

محمدعلی اکبری
mysqlcheck -Aao --auto-repair -u root --password="ROOTPASS"

و یا

mysqlcheck --all-databases -r #repair
mysqlcheck --all-databases -a #analyze
mysqlcheck --all-databases -o #optimize

افزودن نظر جدید