Поврежденные таблицы на MySQL сервере

Posted by

В один из дней случилось, что после рестарта службы mysql на сервере, информация выводимая в консоль заинтересовала настолько тем, что якобы имеются поврежденные таблицы и после этого уже подключиться к консоли администрирования не получается. Начав анализировать и собирать данные решил задокументировать результаты своих действий в виде заметки. То что может для кого-то я все просто и сказанное ниже не чем не является значительным может просто закрыть и не смотреть, гневные и разжигательные комментарии оставить при себе, у меня появилась проблема и для себя я решил ее рассмотреть, а результат выложить на своем блоге так сказать напоминалка. Вот и сейчас.

Итак после перезапуска службы mysql:

ekzorchik@srv-glpi:~$ sudo /etc/init.d/mysql restart

* Stopping MySQL database server mysqld [ OK ]

* Starting MySQL database server mysqld [ OK ]

* Checking for tables which need an upgrade, are corrupt or were

not closed cleanly.

Пробую подключиться к консоли администрирования mysql сервера:

ekzorchik@srv-glpi:~$ mysql -u root -p712mbddr@;

ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’ (2)

Так СТОП! У меня либо:

  • Повреждены таблицы
  • Таблицы не закрыты
  • Таблицы не обновились вследствии если я обновлял версию MySQL

Чтобы найти все таблицы и поправить их следует использовать следующее:

ekzorchik@srv-glpi:~$ sudo mysqlcheck --check-upgrade --all-databases --auto-repair -u root-p712mbddr@

mysqlcheck: Got error: 2002: Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’ (2) when trying to connect

Так, а получается что MySQL сервер вообще что ли не запущен?:

ekzorchik@srv-glpi:~$ sudo netstat -tulpn | grep :3306

tcp 0 0 10.7.8.143:3306 0.0.0.0:* LISTEN 6040/mysqld

Да нет, вроде работает. Хотя когда я его остановил то запустить уже больше не мог, логи говорили следующее:

ekzorchik@srv-glpi:~$ sudo /etc/init.d/mysql stop

* Stopping MySQL database server mysqld

ekzorchik@srv-glpi:~$ sudo /etc/init.d/mysql start

* Starting MySQL database server mysqld [fail]

ekzorchik@srv-glpi:~$ sudo tail -f /var/log/syslog

Aug 29 09:40:59 srv-glpi /etc/init.d/mysql[7713]: 0 processes alive and ‘/usr/bin/mysqladmin —defaults-file=/etc/mysql/debian.cnf ping’ resulted in

Aug 29 09:40:59 srv-glpi /etc/init.d/mysql[7713]: #007/usr/bin/mysqladmin: connect to server at ‘localhost’ failed

Aug 29 09:40:59 srv-glpi /etc/init.d/mysql[7713]: error: ‘Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’ (2)’

Aug 29 09:40:59 srv-glpi /etc/init.d/mysql[7713]: Check that mysqld is running and that the socket: ‘/var/run/mysqld/mysqld.sock’ exists!

Aug 29 09:40:59 srv-glpi /etc/init.d/mysql[7713]:

Aug 29 09:45:14 srv-glpi /etc/init.d/mysql[8762]: 0 processes alive and ‘/usr/bin/mysqladmin —defaults-file=/etc/mysql/debian.cnf ping’ resulted in

Aug 29 09:45:14 srv-glpi /etc/init.d/mysql[8762]: #007/usr/bin/mysqladmin: connect to server at ‘localhost’ failed

Aug 29 09:45:14 srv-glpi /etc/init.d/mysql[8762]: error: ‘Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’ (2)’

Aug 29 09:45:14 srv-glpi /etc/init.d/mysql[8762]: Check that mysqld is running and that the socket: ‘/var/run/mysqld/mysqld.sock’ exists!

Aug 29 09:45:14 srv-glpi /etc/init.d/mysql[8762]:

Нужно ведь что-то делать, использование базы данных на данном сервере мне сильно необходимо, да и к тому же разобрать на будующее как решить такую проблему надо, завершу все процессы mysql:

ekzorchik@srv-glpi:~$ sudo killall mysqld

ekzorchik@srv-glpi:~$ sudo service mysql start

start: Job is already running: mysql

ekzorchik@srv-glpi:~$ mysql -u root -p712mbddr@;

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 38

Все просто, а теперь уже попытаюсь произвести процедуру восстановления таблиц:

ekzorchik@srv-glpi:~$ sudo mysqlcheck --check-upgrade --all-databases -u root -p712mbddr@

mysql.columns_priv OK

mysql.db OK

mysql.event OK

mysql.func OK

mysql.general_log OK

mysql.help_category OK

mysql.help_keyword OK

mysql.help_relation OK

mysql.help_topic OK

mysql.host OK

mysql.ndb_binlog_index OK

mysql.plugin OK

mysql.proc OK

mysql.procs_priv OK

mysql.proxies_priv OK

mysql.servers OK

mysql.slow_log OK

mysql.tables_priv OK

mysql.time_zone OK

mysql.time_zone_leap_second OK

mysql.time_zone_name OK

mysql.time_zone_transition OK

mysql.time_zone_transition_type OK

mysql.user OK

polygon.authors OK

Отлично, процедура восстановления таблиц завершилась успешно и также нужно произвести модернизацию:

ekzorchik@srv-glpi:~$ sudo mysql_upgrade --force -u root -p712mbddr@

Looking for ‘mysql’ as: mysql

Looking for ‘mysqlcheck’ as: mysqlcheck

Running ‘mysqlcheck’ with connection arguments: ‘—port=3306’ ‘—socket=/var/run/mysqld/mysqld.sock’

Running ‘mysqlcheck’ with connection arguments: ‘—port=3306’ ‘—socket=/var/run/mysqld/mysqld.sock’

mysql.columns_priv OK

mysql.db OK

mysql.event OK

mysql.func OK

mysql.general_log OK

mysql.help_category OK

mysql.help_keyword OK

mysql.help_relation OK

mysql.help_topic OK

mysql.host OK

mysql.ndb_binlog_index OK

mysql.plugin OK

mysql.proc OK

mysql.procs_priv OK

mysql.proxies_priv OK

mysql.servers OK

mysql.slow_log OK

mysql.tables_priv OK

mysql.time_zone OK

mysql.time_zone_leap_second OK

mysql.time_zone_name OK

mysql.time_zone_transition OK

mysql.time_zone_transition_type OK

mysql.user OK

polygon.authors OK

Running ‘mysql_fix_privilege_tables’…

OK

Вот теперь все. Еще одна ошибка и путь ее решения добавилось в мою копилку. Все на первый взгляд и не так уж и сложно, обязательно нужно найти в системе где по приложению ведутся логи работы, после завершить все зависшие процессы, проверить что Вы до этого вносили (не пренебрегайте тем, что все важный изменения делайте после бекапа и записывайте по крайней мере для себя что и для чего делаете), а уже только после этого искать решению с помощью Google. Т.к. Большинство всех встречающихся у Вас вопросов по ошибкам уже рассмотрены и выложены результаты решения во всемирной паутине. На этом все, с уважением, автор блога – ekzorchik.

2 комментария

  1. Спасибо, а разве не нужно было сделать бекап перед тем как попытаться починить базы данных командой sudo mysqlcheck —check-upgrade —all-databases?

Leave a Reply

Ваш e-mail не будет опубликован. Обязательные поля помечены *

семнадцать − 3 =