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の最新バージョンをインストールしています。
yum remove mysql*
を使用して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を起動します。
@ Bad Programmer による回答ごとにchown
およびchgrp
'ing /var/lib/mysql
の後、次のコマンドを実行する必要がある場合があります。
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/
これが誰かを助けることを願っています!
mysql_install_db –-user=mysql --ldata=/var/lib/mysql
Centos 7で私のために働いた
windowsで起動する前にmysqlを初期化します。
mysqld --initialize
私の問題の根本は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デーモンを起動し、その後はすべて正常に機能しました。
Mysql Zipバージョンをダウンロードするときに、mysqldを直接実行すると、次のエラーが発生します。2016-02-18T07:23:48.318481Z 0 [エラー]致命的なエラー:権限テーブルを開くことができません。存在しません2016-02-18T07:23:48.319482Z 0 [エラー]中止
最初に以下のコマンドを実行する必要があります:mysqld --initialize
このコマンドの前に、データフォルダーが空であることを確認してください。
OSX上のmysql 5.7で同じ問題に遭遇しました。
rm -rf {datadir}
mysqld --initialize --datadir {datadir}
mysqld --datadir {datadir}
データディレクトリを移動する場合、新しいデータディレクトリにアクセス許可を与えるだけでなく、すべての親ディレクトリにアクセス許可があることを確認する必要があります。
Datadirをハードドライブに移動し、Ubuntuに次のようにマウントしました。
/media/*user*/Data/
そして、私のdatadirはデータベースでした。
各メディア、serおよびDataディレクトリへのアクセス許可を771に設定する必要がありました。
Sudo chmod 771 *DIR*
これが機能しない場合、mysqlを機能させる別の方法は、/ etc/mysql/my.cnfのユーザーをrootに変更することです。ただし、セキュリティの観点からそれを行う際に問題があることは間違いありません。
このコマンドだけで、centos 6.6で魔法をかけることができます。
mysql_install_db
自分のために、私はしなければなりませんでした:
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
その後、データベースに戻って、最初にそれらを無効にしてから再度設定することができました。
私の場合、MySQLデータフォルダーのパスには特殊文字「ç」が含まれていたため、...
致命的なエラー:権限テーブルを開いてロックできません:テーブル 'mysql.Host'は存在しません。
私はすべての特殊文字を削除し、すべてが機能します。
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を使用する場合とは異なります。
サーバーを起動しようとしても同じ問題が発生し、「チェック済み」ソリューションに従いました。しかし、まだ問題がありました。問題は、/ etc/my.cnfファイルが--datadirを定義してmysql_install_dbを実行したときに定義された指定されたdatadirを指していないことでした。これを更新すると、サーバーは正常に起動しました。
MySQLを正常に実行していたサーバーが現在このエラーを表示している場合、MySQLのアンインストールと再インストールは過剰です。
私の場合、サーバーは停止し、いくつかのディスクブロックを使用しました。これは、/ var/lib/mysql/mysql/Host.frmおよび/var/lib/mysql/mysql/proc.frmを含むいくつかのファイルに影響しました。
幸いなことに、これらを別のサーバーからコピーすることができたので、このテーブルエラーが発生しました。
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
}
参照: