Неустранимая ошибка: не удается открыть и заблокировать таблицы привилегий: Таблица "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.

Ответ 1

  • Удалите mysql с помощью yum remove mysql*

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

  • Удалите файл /etc/my.cnf.rmp

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

  • Перезагрузите сервер с помощью reboot

  • Запустите yum install mysql-server. Это также похоже на установку клиента mysql в качестве зависимости.

  • Предоставьте владельцам mysql и групповым привилегиям:

    chown -R mysql /var/lib/mysql

    chgrp -R mysql /var/lib/mysql

  • Используйте service mysqld start, чтобы запустить MySQL Daemon.

Ответ 2

После chown и chgrp 'ing /var/lib/mysql за ответ @Bad Programmer вам также может потребоваться выполнить следующую команду:

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

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

Ответ 3

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

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

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

Ответ 4

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

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

Ответ 5

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

Мне нужен мой mysql в /data.

После проверки того, что 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, и после этого все сработало.

Ответ 6

инициализировать mysql перед запуском в Windows.

mysqld --initialize

Ответ 7

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

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

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

Ответ 8

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

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

/media/*user*/Data/

а мой datadir - это базы данных.

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

sudo chmod 771 *DIR*

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

Ответ 9

Я просто встретил ту же проблему с mysql 5.7 на OSX:

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

Ответ 10

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

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

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

Ответ 11

Только этой команды достаточно, чтобы сделать магию на centos 6.6

mysql_install_db

Ответ 12

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

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

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

Ответ 13

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

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

%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 исходного кода.

Ответ 14

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

Ответ 15

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

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

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

Ответ 16

У меня есть аналогичная ошибка на 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

Ответ 17

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