Неустранимая ошибка: невозможно открыть и заблокировать таблицы привилегий: таблица "mysql.host" не существует

Я на сервере, который заново установил на RHEL 5. Я смог установить Apache и PHP очень хорошо., Но у меня серьезные проблемы с моей установкой MySQL. Я попробовал следующее:

yum install mysql-server mysql 

И не получил никаких ошибок или конфликтов. Затем я попытался запустить mysql с помощью следующих команд:

chkconfig --levels 235 mysqld on
service mysqld start

И получить Timeout error occurred trying to start MySQL Daemon.

Я проверил свои логи и вижу эту ошибку:

[ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.host' doesn't exist

Я не уверен, куда идти отсюда.

Для справки я использую RHEL 5 и установил последние версии PHP 5 и Apache.

17 ответов

Решение
  1. Удалите mysql используя yum remove mysql*

  2. Рекурсивно удалить /usr/bin/mysql а также /var/lib/mysql

  3. Удалить файл /etc/my.cnf.rmp

  4. использование ps -e чтобы проверить процессы, чтобы убедиться, что mysql все еще не запущен.

  5. Перезагрузите сервер с reboot

  6. Бежать yum install mysql-server, Это также, кажется, устанавливает клиент MySQL как зависимость.

  7. Дайте MySQL владение и групповые привилегии с:

    chown -R mysql /var/lib/mysql

    chgrp -R mysql /var/lib/mysql

  8. использование service mysqld start запустить MySQL Daemon.

После chown а также chgrp"ИНГ /var/lib/mysql согласно ответу @Bad Programmer, вам также может потребоваться выполнить следующую команду:

sudo mysql_install_db --user=mysql --ldata=/var/lib/mysql

Затем перезапустите mysqld,

У меня была эта проблема на Arch Linux. Проблема была в том, что pacman установил пакет в другом месте, чем ожидал MySQL. Я смог решить проблему с этим:

sudo mysql_install_db --user=mysql --basedir=/usr/ --ldata=/var/lib/mysql/

Надеюсь, это поможет кому-то!

Корень моей проблемы, казалось, был selinux, который был включен (принудительно) автоматически при установке ОС.

Я хотел, чтобы мой MySQL в / данных.

После проверки, что my.cnf имел:

datadir=/data/mysql

(и оставляя сокет в /var/lib/mysql) Я выполнил команду, чтобы отключить selinux для mysqld (альтернатива - полностью его отключить):

setsebool -P mysqld_disable_trans=1

Я выполнил следующие команды:

> chown -R mysql .
> chgrp -R mysql .
> mysql_install_db --user=mysql

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

mysql_install_db –-user=mysql –ldata=/var/lib/mysql

Работал для меня в Centos 7

Инициализируйте mysql перед запуском на windows.

mysqld --initialize

При загрузке mysql zip-версии, если запустить mysqld напрямую, вы получите эту ошибку: 2016-02-18T07:23:48.318481Z 0 [ОШИБКА] Неустранимая ошибка: не удается открыть и заблокировать таблицы привилегий: Таблица 'mysql.user' не существует 2016-02-18T07:23:48.319482Z 0 [ОШИБКА] Отмена

Сначала вы должны выполнить следующую команду: mysqld --initialize

Убедитесь, что ваша папка данных пуста перед этой командой.

Просто этой команды достаточно, чтобы сотворить магию на centos 6.6

mysql_install_db

Я только что столкнулся с той же проблемой с MySQL 5.7 на OSX:

rm -rf {datadir}
mysqld --initialize --datadir {datadir}
mysqld --datadir {datadir}

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

Я перенес свой datadir на жесткий диск, смонтированный в Ubuntu как:

/media/*user*/Data/

и мой датадир был Базы данных.

Мне пришлось установить разрешения на 771 для каждого из носителей, пользователей и каталогов данных:

sudo chmod 771 *DIR*

Если это не работает, другой способ заставить MySQL работать - изменить пользователя в /etc/mysql/my.cnf на root; хотя, несомненно, есть некоторые проблемы с этим с точки зрения безопасности.

Для себя я должен был сделать:

yum remove mysql*

rm -rf /var/lib/mysql/
cp /etc/my.cnf ~/my.cnf.bkup

yum install -y mysql-server mysql-client

mysql_install_db

chown -R mysql:mysql /var/lib/mysql
chown -R mysql:mysql /var/log/mysql

service mysql start

Затем я смог вернуться в свои базы данных и снова настроить их после того, как я обстрелял их в первый раз.

В Windows выполните следующие команды в командной строке от имени администратора.

Step 1:
mysql_install_db.exe

Step 2:
mysqld --initialize

Step 3:
mysqld --console

Step 4:
In windows

Step 4:
mysqladmin -u root password "XXXXXXX"

Step 5:
mysql -u root -p

В CentOS EL 6 и, возможно, в более ранних версиях есть один способ попасть в этот же беспорядок.

Установите CentOS EL6 с минимальной установкой. Например, я использовал кикстарт для установки следующего:

%packages
@core
acpid
bison
cmake
dhcp-common
flex
gcc
gcc-c++
git
libaio-devel
make
man
ncurses-devel
perl
ntp
ntpdate
pciutils
tar
tcpdump
wget
%end

Вы обнаружите, что одна из зависимостей приведенного выше списка mysql-libs, Я обнаружил, что по умолчанию в моей системе my.cnf в /etc и это содержит:

[mysqld]
dataddir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

Когда вы строите из Generic Linux (Architecture Independent), Compressed TAR Archive ваш каталог данных по умолчанию /usr/local/mysql/data который конфликтует с /etc/my.cnf уже присутствует, который определяет datadir=/var/lib/mysql, Так же pid-file определенный в том же файле не имеет прав для пользователя / группы mysql для записи в него /var/run/mysqld,

Быстрое лекарство от mv /etc/my.cnf /etc/my.cnf.old которая должна заставить вашу процедуру с исходным кодом работать.

Конечно, опыт отличается от того, используете ли вы исходные RPM.

Если у вас есть сервер, который раньше успешно запускал MySQL, но теперь выдает эту ошибку, то удаление и повторная установка MySQL излишни.

В моем случае сервер умер и взял с собой несколько дисковых блоков. Это затронуло несколько файлов, в том числе /var/lib/mysql/mysql/host.frm и /var/lib/mysql/mysql/proc.frm

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

В моем случае путь к папке данных MySQL имел специальный символ "ç", и это заставило меня...

Неустранимая ошибка: невозможно открыть и заблокировать таблицы привилегий: таблица "mysql.host" не существует.

Я удалил все специальные символы и все работает.

Я получил похожую ошибку на overlayfs (overlay2), которая используется по умолчанию в Docker для Mac. Ошибка происходит при запуске mysql на изображении, после создания изображения с помощью mysql.

2017-11-15T06:44:22.141481Z 0 [ERROR] Fatal error: Can't open and lock privilege tables: Table storage engine for 'user' doesn't have this option

Переход на "aufs" решил проблему. (В Docker для Mac файл "daemon.json" можно редактировать, выбрав меню "Предпочтения...", вкладку "Демон" и вкладку "Дополнительно".)

/etc/docker/daemon.json:

{
  "storage-driver" : "aufs",
  "debug" : true,
  "experimental" : true
}

Ref:

https://github.com/moby/moby/issues/35503

https://qiita.com/Hige-Moja/items/7b1208f16997e2aa9028

У меня была такая же проблема при попытке запустить сервер и я следовал "проверенному" решению. Но все же была проблема. Проблема заключалась в том, что мой файл /etc/my.cnf не указывал на мой назначенный каталог данных, как определено, когда я выполнял mysql_install_db с определенным параметром --datadir. Как только я обновил это, сервер запустился правильно.

Мой случай на Ubuntu 14.04.2 LTS был похож на другие с my.cnf, но для меня причиной был ~/.my.cnf, который был оставлен после предыдущей установки. После удаления этого файла и очистки / переустановки mysql-сервера все заработало нормально.

Другие вопросы по тегам