Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да поправя MySQL бази данни и таблици

Тази статия описва как да поправите MySQL таблици и бази данни. С нарастването на таблиците на базата данни може да се появят грешки от време на време. Когато го направят, MySQL включва няколко инструмента, които можете да използвате за проверка и поправка на таблици на база данни. За да направите това, следвайте процедурите по-долу в реда, в който се появяват.

Тази статия се отнася само за продукти, изброени в Подробности за статията странична лента. Трябва да имате root достъп до сървъра, за да следвате тези процедури.

Стъпка 1:Архивиране на базите данни

Преди да се опитате да поправите която и да е база данни, първо трябва да я архивирате. За да архивирате всички файлове от всичките си бази данни, следвайте тези стъпки:

  1. Влезте в сървъра си чрез SSH.
  2. Спрете MySQL сървъра, като използвате съответната команда за вашата Linux дистрибуция:
    • За CentOS и Fedora въведете:
      service mysqld stop
    • За Debian и Ubuntu въведете:

      service mysql stop
  3. Въведете следната команда:

    cp -rfv /var/lib/mysql /var/lib/mysql$(date +%s)
    Тази команда копира всички файлове от всичките ви бази данни в име на директория въз основа на текущото време (по-точно броят на секундите, изминали от 1 януари 1970 г.). Това гарантира, че всяко архивиране на база данни се съхранява в директория с уникално име. За допълнителна защита можете (и трябва) да архивирате файловете на базата данни на отдалечено място, което не е на сървъра.
  4. Рестартирайте MySQL сървъра, като използвате съответната команда за вашата Linux дистрибуция:

    • За CentOS и Fedora въведете:
      service mysqld start
    • За Debian и Ubuntu въведете:

      service mysql start

Стъпка 2:Изпълнение на mysqlcheck

След като архивирате вашите бази данни, сте готови да започнете да отстранявате неизправности. mysqlcheck програмата ви позволява да проверявате и поправяте бази данни, докато MySQL работи. Тази функция е полезна, когато искате да работите върху база данни, без да спирате цялата услуга MySQL.

Освен това, mysqlcheck работи върху таблици, които използват механизмите на базата данни MyISAM или InnoDB.

За информация как да определите коя машина за съхранение използва таблицата на базата данни, моля, вижте тази статия.

За да използвате mysqlcheck , следвайте тези стъпки:

  1. Като root потребител, въведете следната команда:
    cd /var/lib/mysql
  2. Въведете следната команда, като замените базата данни с името на базата данни, която искате да проверите:

    mysqlcheck database

    Предишната команда проверява всички таблици в посочената база данни. Като алтернатива, за да проверите конкретна таблица в база данни, въведете следната команда. Заменете базата данни с името на базата данни и заменете таблицата с името на таблицата, която искате да проверите:

    mysqlcheck database table
  3. Mysqlcheck проверява посочената база данни и таблици. Ако дадена таблица премине проверката, mysqlcheck показва OK за масата. Ако обаче mysqlcheck съобщава за грешка за таблица, въведете следната команда, за да опитате да я поправите. Заменете базата данни с името на базата данни и таблицата с името на таблицата:

    mysqlcheck -r database table
  4. Ако mysqlcheck не можете успешно да поправите масата или масите, преминете към следната процедура.

Стъпка 3:Извършване на специфична за двигателя диагностика

Ако изпълнявате mysqlcheck не отстранява проблема, следващата стъпка е да стартирате диагностика, специфична за двигателя, използван от таблицата или таблиците на базата данни. Следвайте съответната процедура по-долу за машината за съхранение на база данни на вашата таблица.

За информация как да определите коя машина за съхранение използват вашите таблици на база данни, моля, вижте тази статия.
Поправяне на MyISAM таблици с myisamchk

Ако използвате механизма за съхранение на MyISAM за таблица, можете да стартирате myisamchk програма за ремонта му. За да направите това, изпълнете следните стъпки:

myisamchk програмата работи само за таблици, които използват механизма за съхранение на MyISAM. Не работи за двигателя InnoDB.
  1. Спрете MySQL сървъра, като използвате съответната команда за вашата Linux дистрибуция:
    • За CentOS и Fedora въведете:
      service mysqld stop
    • За Debian и Ubuntu въведете:

      service mysql stop
  2. Въведете следната команда:

    cd /var/lib/mysql
  3. Промяна на директорията, където се намира базата данни. Например, ако базата данни е с име клиенти , въведете cd клиенти.
  4. Въведете следната команда, като замените таблицата с името на таблицата, която искате да проверите:

    myisamchk table

    За да проверите всички таблици в база данни, въведете следната команда:

    myisamchk *.MYI

    Ако предишната команда не работи, можете да опитате да изтриете временни файлове, които може да пречат на myisamchk от правилното движение. За да направите това, върнете се обратно към /var/lib/mysql директория и след това въведете следната команда:

    ls */*.TMD
    

    Ако има изброени .TMD файлове, въведете следната команда, за да ги изтриете:

    rm */*.TMD

    След това опитайте да стартирате myisamchk отново.

  5. За да опитате да поправите таблица, въведете следната команда, като замените таблица с името на таблицата, която искате да поправите:

    myisamchk --recover table
  6. Рестартирайте MySQL сървъра, като използвате съответната команда за вашата Linux дистрибуция:

    • За CentOS и Fedora въведете:
      service mysqld start
    • За Debian и Ubuntu въведете:

      service mysql start
  7. Тествайте ремонтираната маса или маси.
Изпълнение на процеса на възстановяване на InnoDB

Ако използвате машината за съхранение на InnoDB за таблица на база данни, можете да стартирате процеса на възстановяване на InnoDB. За да направите това, изпълнете следните стъпки:

  1. Използвайте предпочитания от вас текстов редактор, за да отворите my.cnf файл на вашия сървър. Местоположението на my.cnf файл зависи от вашата Linux дистрибуция:
    • На CentOS и Fedora, my.cnf файлът се намира в /etc указател.
    • В Debian и Ubuntu, my.cnf файлът се намира в /etc/mysql указател.
  2. В my.cnf файл, намерете [mysqld] раздел.
  3. Добавете следния ред към [mysqld] раздел:

    innodb_force_recovery=4
  4. Запазете промените в my.cnf файл и след това рестартирайте MySQL сървъра, като използвате съответната команда за вашата Linux дистрибуция:

    • За CentOS и Fedora въведете:
      service mysqld restart
    • За Debian и Ubuntu въведете:

      service mysql restart
  5. Въведете следната команда, за да експортирате всички бази данни в databases.sql файл:

    mysqldump --all-databases --add-drop-database --add-drop-table --routines > databases.sql
  6. Стартирайте mysql програма и след това опитайте да изхвърлите засегнатата база данни или бази данни с помощта на DROP DATABASE команда.

    Ако MySQL не може да изтрие база данни, можете да я изтриете ръчно в стъпка 8 по-долу, след като спрете MySQL сървъра.
  7. Спрете MySQL сървъра, като използвате съответната команда за вашата Linux дистрибуция:

    • За CentOS и Fedora въведете:
      service mysqld stop
    • За Debian и Ubuntu въведете:

      service mysql stop
  8. Ако не сте успели да изтриете база данни в стъпка 6, въведете следните команди, за да я изтриете ръчно. Заменете базата данни с името на базата данни, която искате да изтриете:

    cd /var/lib/mysql
    rm -rf database
    Уверете се, че не изтривате mysql или схема_изпълнение директории!
  9. Използвайте предпочитания от вас текстов редактор, за да отворите my.cnf файл на вашия сървър и след това коментирайте следния ред в [mysqld] раздел, както е показано:

    #innodb_force_recovery=4
    Това деактивира режима за възстановяване на InnoDB.
  10. Запазете промените в my.cnf файл и след това стартирайте MySQL сървъра, като използвате съответната команда за вашата Linux дистрибуция:

    • За CentOS и Fedora въведете:
      service mysqld start
    • За Debian и Ubuntu въведете:

      service mysql start
  11. Въведете следната команда, за да възстановите базите данни от архивния файл, който сте създали в стъпка 5:

    mysql < databases.sql
  12. Тествайте възстановената база данни.

Повече информация

  • За повече информация относно mysqlcheck , моля, посетете https://dev.mysql.com/doc/refman/5.5/en/mysqlcheck.html.
  • За повече информация относно myisamchk , моля, посетете https://dev.mysql.com/doc/refman/5.5/en/myisamchk.html.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL VARCHAR дължини и UTF-8

  2. Не може да се свърже с MySQL 4.1+ чрез старо удостоверяване

  3. Как да получите най-новия запис във всяка група с помощта на GROUP BY?

  4. int(11) срещу int(всичко друго)

  5. Използването на if(isset($_POST['submit'])), за да не се показва ехо, когато скриптът е отворен, не работи