После сбоя MySQL возможно повреждение служебных баз.
При старте в лог сыпится примерно следующее:
InnoDB: Database was not shut down normally!
InnoDB: Starting crash recovery.
InnoDB: Reading tablespace information from the .ibd files...
InnoDB: Restoring possible half-written data pages from the doublewrite
InnoDB: buffer...
InnoDB: Starting log scan based on checkpoint at
InnoDB: log sequence number 0 49614.
InnoDB: Doing recovery: scanned up to log sequence number 0 49614
InnoDB: Started; log sequence number 0 49614
[Note] Recovering after a crash using /var/log/mysql/mysql-bin
[Note] Starting crash recovery...
[Note] Crash recovery finished.
[ERROR] /usr/sbin/mysqld: Incorrect information in file: './mysql/host.frm'
[ERROR] /usr/sbin/mysqld: Incorrect information in file: './mysql/host.frm'
[ERROR] Fatal error: Can't open and lock privilege tables: Incorrect information in file: './mysql/host.frm'
В том числе это актуально для таблиц db, func, proc, user и пр.
Если бекапов нет, то придется заново инициализировать служебные базы MySQL. Для этого первым делом сохраняем в надежно место содержимое /var/lib/mysql и /var/log/mysql на случай, если что-то пойдет не так.
К тому же данные о пользователях будут утеряны и их придется создавать заново, естественно нужно будет дать те же права и пароли, которые были ранее (ниже я приведу пример).
Итак, сохранив данные двух вышеуказанных каталогов, удаляем содержимое /var/lib/mysql/mysql/* (Обратите внимание, удалить нужно содержимое именно подкаталога mysql в каталоге /var/lib/mysql)
Инициализируем базу данных
#mysql_install_db
Вводим новый (в смысле старый пароль рута, вы же его помните ;))
dpkg-reconfigure mysql-server-5.0
запускаем MYsql
/etc/init.d/mysql start
Под рутом смотрим список баз, которые увидел мускуль
mysql -u root -p
SHOW DATABASES;
На выходе вы получите список баз.
Теперь создаем нужных пользователей и назначаем им права на базы (повторить для всех нужных пользователей и баз)
GRANT ALL ON base_name.* TO user@localhost IDENTIFIED BY "yourpassword";
base_name - имя нужной базы
user - пользователь
yourpassword - пароль на базу
На этом все. Запускайте MySQL-зависимые сервисы и наблюдайте за результатом.
ЗЫ. И делайте, в конце концов, бекапы ;)
понедельник, 14 декабря 2009 г.
Подписаться на:
Комментарии к сообщению (Atom)
0 коммент.:
Отправить комментарий