Назад | Перейти на главную страницу

Невозможно запустить MySQL

Я использовал эту команду из оболочки для восстановления всех баз данных

mysqlcheck -u root -p --auto-repair --check --optimize --all-databases

и после этого я перезапустил сервер

когда он снова ожил, я попытался открыть свой форум vBulletin, но получил сообщение об ошибке базы данных.

а также попытался открыть phpMyAdmin, но получил эту ошибку:

#2002 - The server is not responding (or the local MySQL server's socket is not correctly configured).

Я проверил список служб и обнаружил, что службы MySQL нет в списке, поэтому я попытался запустить ее из оболочки и получил эту ошибку:

Starting MySQL.Manager of pid-file quit without updating fi[FAILED]

может ли кто-нибудь мне в этом помочь?

заранее спасибо.


Обновить

Я нашел эти строки в файле журнала

101101 01:36:01 mysqld started
101101 1:36:01 [Warning] Asked for 196608 thread stack, but got 126976
101101 1:36:01 [ERROR] /usr/sbin/mysqld: Table './mysql/user' is marked as crashed and last (automatic?) repair failed
101101 1:36:01 [ERROR] /usr/sbin/mysqld: Table './mysql/user' is marked as crashed and last (automatic?) repair failed
101101 1:36:01 [ERROR] Fatal error: Can't open and lock privilege tables: Table './mysql/user' is marked as crashed and last (automatic?) repair failed
101101 01:36:01 mysqld ended

Что мне тогда делать?

Попробуйте запустить mysqld с помощью --skip-grant-tables, чтобы он не пытался загрузить (аварийную) таблицу пользователей.

/etc/init.d/mysqld start --skip-grant-tables

затем войдите в mysql

mysql

затем попробуйте команду восстановления в пользовательской таблице

use mysql; 
REPAIR TABLE user;

Я не уверен, что синтаксис на 100% правильный.

Это происходит, когда mysqld не завершает работу должным образом. По сути, файл pid - файл, содержащий идентификатор процесса, запущенного в данный момент, - существует для определения того, активно ли этот процесс запущен. Когда система вышла из строя - то есть она нашла pid, но не может найти процесс, то есть сервер не был правильно остановлен - это требует ручного вмешательства.

Просто rm /var/run/mysqld.pid и все должно быть в порядке.

Андрей

ОБНОВЛЕНИЕ: на основе ваших последних файлов журнала (и того факта, что автоматическое восстановление не удалось), вот отличный пост о дополнительных методах ремонта. Кроме того, убедитесь, что на сервере достаточно места на диске.

Думаю, вам нужен mysqlrepair:

mysqlrepair -r tablename

(Только что понял, что это то же самое, что и mysqlcheck.)

Вам нужен явный ремонт вместо авторемонта.

Задача решена :)

Спасибо cstamas, Resorath, Andrew & Gennady, спасибо всем за помощь :)

Я пробовал это из оболочки, и все работало нормально:

service mysql stop 
mkdir /home/tmp
cd /var/lib/mysql
myisamchk --tmpdir=/home/tmp -r */*.MYI
service mysql start

У меня была такая же проблема с xampp, для xampp сначала перейдите в C:\xampp\mysql\bin\ и запустить демон

mysqld --skip-grant-tables --datadir=C:\xampp\mysql\data\

Затем откройте другой терминал по тому же пути и запустите mysqlcheck чтобы найти столы, нуждающиеся в ремонте

mysqlcheck mysql -a

После этого бега mysql и отремонтировать столы

mysql
use mysql; 
REPAIR TABLE table_name;

Я надеюсь, что смогу исправить это без проблем