В один из дней случилось, что после рестарта службы 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.
Спасибо, а разве не нужно было сделать бекап перед тем как попытаться починить базы данных командой sudo mysqlcheck –check-upgrade –all-databases?
А вот да действительно нужно было, спасибо за указание.