Неустранимая ошибка: невозможно открыть и заблокировать таблицы привилегий: таблица "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 ответов
Удалите 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.
После 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:
У меня была такая же проблема при попытке запустить сервер и я следовал "проверенному" решению. Но все же была проблема. Проблема заключалась в том, что мой файл /etc/my.cnf не указывал на мой назначенный каталог данных, как определено, когда я выполнял mysql_install_db с определенным параметром --datadir. Как только я обновил это, сервер запустился правильно.
Мой случай на Ubuntu 14.04.2 LTS был похож на другие с my.cnf, но для меня причиной был ~/.my.cnf, который был оставлен после предыдущей установки. После удаления этого файла и очистки / переустановки mysql-сервера все заработало нормально.