web-dev-qa-db-ja.com

致命的なエラー:特権テーブルを開いてロックできません:テーブル '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の最新バージョンをインストールしています。

60
Bad Programmer
  1. yum remove mysql*を使用して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を起動します。

61
Bad Programmer

@ Bad Programmer による回答ごとにchownおよびchgrp 'ing /var/lib/mysqlの後、次のコマンドを実行する必要がある場合があります。

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

次に、mysqldを再起動します。

58
bk0

この問題はArch Linuxでも発生しました。問題は、pacmanがパッケージをMySQLが予期していた場所とは異なる場所にインストールしたことです。私はこれで問題を修正することができました:

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

これが誰かを助けることを願っています!

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

Centos 7で私のために働いた

11
JVJ

windowsで起動する前にmysqlを初期化します。

mysqld --initialize
10
tvrcgo

私の問題の根本はselinuxのようで、OSのインストール時に自動的に有効化(強制)されました。

/ dataにmysqlが必要でした。

My.cnfに以下が含まれていることを確認した後:

datadir=/data/mysql

(およびソケットを/ var/lib/mysqlに残します)mysqldのselinuxをオフにするコマンドを実行しました(代わりに完全にオフにすることです):

setsebool -P mysqld_disable_trans=1

次のコマンドを実行しました。

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

私はmysqlデーモンを起動し、その後はすべて正常に機能しました。

10
Ilane

Mysql Zipバージョンをダウンロードするときに、mysqldを直接実行すると、次のエラーが発生します。2016-02-18T07:23:48.318481Z 0 [エラー]致命的なエラー:権限テーブルを開くことができません。存在しません2016-02-18T07:23:48.319482Z 0 [エラー]中止

最初に以下のコマンドを実行する必要があります:mysqld --initialize

このコマンドの前に、データフォルダーが空であることを確認してください。

7
Levin

OSX上のmysql 5.7で同じ問題に遭遇しました。

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

データディレクトリを移動する場合、新しいデータディレクトリにアクセス許可を与えるだけでなく、すべての親ディレクトリにアクセス許可があることを確認する必要があります。

Datadirをハードドライブに移動し、Ubuntuに次のようにマウントしました。

/media/*user*/Data/

そして、私のdatadirはデータベースでした。

各メディア、serおよびDataディレクトリへのアクセス許可を771に設定する必要がありました。

Sudo chmod 771 *DIR*

これが機能しない場合、mysqlを機能させる別の方法は、/ etc/mysql/my.cnfのユーザーをrootに変更することです。ただし、セキュリティの観点からそれを行う際に問題があることは間違いありません。

3
Kohjah Breese

このコマンドだけで、centos 6.6で魔法をかけることができます。

mysql_install_db

2
venkat sam

自分のために、私はしなければなりませんでした:

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

その後、データベースに戻って、最初にそれらを無効にしてから再度設定することができました。

2
Pred

私の場合、MySQLデータフォルダーのパスには特殊文字「ç」が含まれていたため、...

致命的なエラー:権限テーブルを開いてロックできません:テーブル 'mysql.Host'は存在しません。

私はすべての特殊文字を削除し、すべてが機能します。

0
Felipe Loredo

CentOS EL 6およびおそらく以前のバージョンでは、この同じ混乱に陥る1つの方法があります。

最小限のインストールで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

上記のリストの依存関係の1つが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を使用する場合とは異なります。

0
Chris Labonne

サーバーを起動しようとしても同じ問題が発生し、「チェック済み」ソリューションに従いました。しかし、まだ問題がありました。問題は、/ etc/my.cnfファイルが--datadirを定義してmysql_install_dbを実行したときに定義された指定されたdatadirを指していないことでした。これを更新すると、サーバーは正常に起動しました。

0
zagatztu

MySQLを正常に実行していたサーバーが現在このエラーを表示している場合、MySQLのアンインストールと再インストールは過剰です。

私の場合、サーバーは停止し、いくつかのディスクブロックを使用しました。これは、/ var/lib/mysql/mysql/Host.frmおよび/var/lib/mysql/mysql/proc.frmを含むいくつかのファイルに影響しました。

幸いなことに、これらを別のサーバーからコピーすることができたので、このテーブルエラーが発生しました。

0
Nigel Pearson

Mac用のDockerのデフォルトであるoverlayfs(overlay2)でも同様のエラーが発生しました。 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」に切り替えると問題が解決しました。 (Mac版Dockerでは、「環境設定...」メニューを選択し、「デーモン」タブを選択し、「詳細」タブを選択することで、「daemon.json」を編集できます。)

/etc/docker/daemon.json:

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

参照:

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

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

0
Tsuneo Yoshioka