Я использовал эту команду из оболочки для восстановления всех баз данных
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;
Я надеюсь, что смогу исправить это без проблем