چگونه دیتابیس ها را در MySQL تعمیر کنیم

این مقاله نحوه تعمیر پایگاه داده ها و جداول MySQL را توضیح می دهد. به عنوان یک جدول پایگاه داده رشد می کند، خطاها ممکن است از زمان به زمان رخ دهد. هنگامی که آنها انجام می دهند، MySQL شامل چندین ابزار است که می توانید آنها را برای بررسی و تعمیر جداول پایگاه داده استفاده کنید. برای انجام این کار، مراحل زیر را در ترتیبی که در آنها ظاهر می شود، دنبال کنید.

این مقاله تنها در مورد محصولات ذکر شده در نوار اطلاعات جزئیات مقاله اعمال می شود . برای پیروی از این روش باید دسترسی ریشه به سرور داشته باشید.
چگونه دیتابیس ها را در MySQL تعمیر کنیم

چگونه دیتابیس ها را در MySQL تعمیر کنیم

مرحله 1: پشتیبان گیری از پایگاه های داده

قبل از تلاش برای تعمیر هر پایگاه داده، ابتدا باید آن را بازگردانید. برای پشتیبان گیری از تمام فایل ها از تمام پایگاه های داده خود، این مراحل را دنبال کنید:

  1. با استفاده از SSH به سرور خود وارد شوید
  2. سرور MySQL را با استفاده از دستور مناسب برای توزیع لینوکس خود متوقف کنید:
    • برای CentOS و فدورا، نوع:
      service mysqld stop
    • برای دبیان و اوبونتو، تایپ کنید:
      service mysql stop
  3. دستور زیر را تایپ کنید:
    cp -rfv /var/lib/mysql /var/lib/mysql$(date +%s)
    این فرمان کلیه فایل ها را از تمام پایگاه های داده شما به یک نام دایرکتوری بر اساس زمان فعلی کپی می کند (دقیقا، تعداد ثانیه هایی که از 1 ژانویه 1970 سپری شده است). این تضمین می کند که هر پشتیبان پایگاه داده در یک پوشه ای ذخیره می شود که دارای نام منحصر به فرد است. برای حفاظت اضافه، می توانید (و باید) فایل های پایگاه داده را به یک مکان دور از سرور جدا کنید.
  4. سرور MySQL را با استفاده از دستور مناسب برای توزیع لینوکس خود راه اندازی مجدد کنید:
    • برای CentOS و فدورا، نوع:
      service mysqld start
    • برای دبیان و اوبونتو، تایپ کنید:
      service mysql start

مرحله 2: بررسی و تعمیر یک جدول با MYSQLCHECK

پس از پشتیبان گیری از پایگاه داده های خود، آماده اید تا عیب یابی کنید. mysqlcheck برنامه شما را قادر به بررسی و پایگاه های داده MySQL را در حالی که تعمیر حال اجرا است. این ویژگی مفید است زمانی که شما می خواهید در یک پایگاه داده بدون متوقف کردن کل سرویس MySQL کار کنید.

علاوه بر این، mysqlcheck در جداول استفاده می شود که از موتورهای پایگاه داده MyISAM یا InnoDB استفاده می کنند.

برای اطلاعات در مورد چگونگی تعیین موتور ذخیره سازی جدول استفاده از پایگاه داده، لطفا این مقاله را ببینید .

برای استفاده از mysqlcheck ، این مراحل را دنبال کنید:

  1. به عنوان کاربر ریشه، دستور زیر را تایپ کنید:
    cd /var/lib/mysql
  2. دستور زیر را تایپ کنید، جایگزین پایگاه داده با نام پایگاه داده ای که می خواهید چک کنید:
    mysqlcheck DATABASE

    دستور قبلی همه جداول را در پایگاه داده مشخص بررسی می کند. متناوبا، برای بررسی یک جدول خاص در یک پایگاه داده، دستور زیر را تایپ کنید. جایگزین DATABASE با نام پایگاه داده، و جایگزین جدول با نام جدول است که شما می خواهید برای بررسی:

    mysqlcheck DATABASE TABLE
  3. Mysqlcheck پایگاه داده های مشخص شده و جداول را بررسی می کند. اگر یک جدول از چک عبور کند، mysqlcheck OK را برای جدولنمایش می دهد . با این حال، اگر mysqlcheck خطایی برای یک جدول گزارش کند، دستور زیر را بنویسید تا سعی کنید آن را تعمیر کنید. DATABASE را با نام پایگاه داده جایگزین کنید و جدول با نام جدول:
    mysqlcheck -r DATABASE TABLE
  4. اگر mysqlcheck نمیتواند جدول یا جداول را با موفقیت تعمیر کند، به روش زیر بروید.

مرحله 3: تشخیص موتور خاص

اگر در حال اجرا mysqlcheck مشکل را حل نمی کند، گام بعدی این است که تشخیص خاصی را برای موتور استفاده شده در جدول پایگاه داده یا جداول انجام دهید. برای موتور ذخیره سازی پایگاه داده جدول خود، زیر روال مناسب را دنبال کنید.

برای اطلاعات در مورد چگونگی تعیین موتور ذخیره سازی جداول پایگاه داده خود، لطفا این مقاله را ببینید .

تعمیر جداول MyISAM با myisamchk

اگر از یک موتور ذخیره سازی MyISAM برای یک جدول استفاده می کنید، می توانید برنامه myisamchk را اجرا کنید تا آن را تعمیر کنید. برای انجام این کار؛ این موارد را دنبال کنید:

myisamchk برنامه فقط برای جدول که با استفاده از موتور ذخیره سازی MyISAM از کار می کند. این کار برای موتور InnoDB کار نمی کند.
  1. سرور MySQL را با استفاده از دستور مناسب برای توزیع لینوکس خود متوقف کنید:
    • برای CentOS و فدورا، نوع:
      service mysqld stop
    • برای دبیان و اوبونتو، تایپ کنید:
      service mysql stop
  2. دستور زیر را تایپ کنید:
    cd /var/lib/mysql
  3. تغییر به دایرکتوری که در آن پایگاه داده واقع شده است. برای مثال، اگر پایگاه داده به مشتریان نامیده شود ، مشتریان سی دی را تایپ کنید .
  4. دستور زیر را تایپ کنید، TABLE را با نام جدولی که میخواهید چک کنید را جایگزین کنید:
    myisamchk TABLE

    برای بررسی تمام جداول در پایگاه داده، دستور زیر را تایپ کنید:

    myisamchk * .MYI

    اگر دستور قبلی کار نمی کند، می توانید سعی کنید پرونده های موقت را حذف کنید که ممکن است از myisamchk به درستی اجرا نشود . برای انجام این کار، به پوشه / var / lib / mysql بروید و سپس دستور زیر را تایپ کنید:

    ls * / *. TMD
    

    اگر فایلهای TMD وجود دارد، دستور زیر را برای حذف آنها تایپ کنید:

    rm * / *. TMD

    سپس سعی کنید دوباره myisamchk را اجرا کنید.

  5. برای تلاش برای تعمیر یک جدول، دستور زیر را تایپ کنید و TABLE را با نام جدولی که می خواهید تعمیر کنید را جایگزین کنید :
    myisamchk --recover TABLE
  6. سرور MySQL را با استفاده از دستور مناسب برای توزیع لینوکس خود راه اندازی مجدد کنید:
    • برای CentOS و فدورا، نوع:
      service mysqld start
    • برای دبیان و اوبونتو، تایپ کنید:
      service mysql start
  7. آزمایش جدول یا جداول تعمیر شده.
چگونه دیتابیس ها را در MySQL تعمیر کنیم

چگونه دیتابیس ها را در MySQL تعمیر کنیم

اجرای فرآیند بازیابی InnoDB

اگر از موتور ذخیره سازی InnoDB برای یک جدول پایگاه داده استفاده می کنید، می توانید روند بازیابی InnoDB را اجرا کنید. برای انجام این کار؛ این موارد را دنبال کنید:

  1. برای باز کردن فایل my.cnf در سرور خود از ویرایشگر متن مورد نظر خود استفاده کنید . محل فایل my.cnf بستگی به توزیع لینوکس شما دارد:
    • در CentOS و فدورا، فایل my.cnf در دایرکتوری / etc واقع شده است.
    • در دبیان و اوبونتو، فایل my.cnf در دایرکتوری / etc / mysql واقع شده است.
  2. در فایل my.cnf ، بخش [mysqld] را بیابید .
  3. خط زیر را به بخش [mysqld] اضافه کنید :
    innodb_force_recovery=4
  4. تغییرات را به فایل my.cnf ذخیره کنید و سپس سرور MySQL را با استفاده از دستور مناسب برای توزیع لینوکس خود راه اندازی مجدد کنید:
    • برای CentOS و فدورا، نوع:
      service mysqld restart
    • برای دبیان و اوبونتو، تایپ کنید:
      service mysql restart
  5. دستور زیر را برای صادرات تمام پایگاه های داده به فایل databases.sql تایپ کنید:
    mysqldump --all-databases --add-drop-database --add-drop-table > databases.sql
  6. شروع برنامه mysql و سپس سعی کنید پایگاه داده های آسیب دیده یا پایگاه های داده را با استفاده از دستور DROP DATABASE رها کنید .
    اگر MySQL قادر به رها کردن پایگاه داده نباشد، شما می توانید آن را به صورت دستی در مرحله 8 بعد از قطع سرور MySQL حذف کنید.
  7. سرور MySQL را با استفاده از دستور مناسب برای توزیع لینوکس خود متوقف کنید:
    • برای CentOS و فدورا، نوع:
      service mysqld stop
    • برای دبیان و اوبونتو، تایپ کنید:
      service mysql stop
  8. اگر در مرحله 6 نمیتوانید پایگاه داده را رها کنید، دستورات زیر را تایپ کنید تا آن را به صورت دستی پاک کنید. جایگزین DBNAME با نام پایگاه داده ای که می خواهید حذف کنید:
    cd /var/lib/mysql
    rm -rf DBNAME
    اطمینان حاصل کنید که دایرکتوری mysql یا performance_schema را حذف نکنید !
  9. از ویرایشگر متن دلخواه خود برای باز کردن فایل my.cnf در سرور خود استفاده کنید و سپس از خط زیر در بخش [mysqld] نظر دهید :
    # innodb_force_recovery = 4
    این حالت بازیابی InnoDB را غیرفعال می کند.
  10. تغییرات را به فایل my.cnf ذخیره کنید و سپس سرور MySQL را با استفاده از دستور مناسب برای توزیع لینوکس خود شروع کنید:
    • برای CentOS و فدورا، نوع:
      service mysqld start
    • برای دبیان و اوبونتو، تایپ کنید:
      service mysql start
  11. دستور زیر را برای بازگرداندن پایگاه داده ها از فایل پشتیبان ایجاد شده در مرحله 5 تایپ کنید:
    mysql < databases.sql
  12. تست پایگاه داده بازسازی شده.

مطالب مرتبط با این آموزش »

 

این صفحه چطور بود؟ post