Fatal error: Can’t open and lock privilege tables: Table ‘mysql.host’ doesn’t exist

10年近く前にWebシステムを構築する時にデータベースMySQLにするかPostgreSQLにするか迷ったことがあります。当初の情報ではMySQLは高速、PostgreSQLは信頼性ということで、信頼性のあるシステムを構築する予定だったのでPostgreSQLを選択しました。

最近ではMySQLもPostgreSQLもそれほど変わらないのではないかと思い、弊社のデータベースはほぼMySQLにしています。PostgreSQLの問題は、更新が多いシステムではVACUUM処理が必要で、この処理に時間がかかるため運用に影響が出てきます。また、MySQLもバージョンアップでトランザクション処理があったり、マスター・スレーブ等負荷分散の設定もできるようになったため、MySQLでも信頼性のあるシステムは構築できるようになっています。

 

MySQLのインストールであまり困った事は無いのですが、今回MySQLをインストールし、/etc/init.d/mysql startと起動したところ下記のエラーがでました。

Starting MySQL.. ERROR! Manager of pid-file quit without updating file.

MySQLのエラーログをチェックしたところ、下記のメッセージが表示されています。

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

いろいろ検索してmysql_install_dbを実行してから起動すると正常に起動できると書かれていますが、何度やっても同じエラーです。

MySQLのページでmysql_install_dbを確認したところ、オプションがいくつかあるようでしたので、オプションを試してみました。

# mysql_install_db --datadir=データディレクトリ --user=mysql

これをrootで実行したところデータディレクトリの後ろにmysqlというディレクトリさが作成され、沢山のファイルが作成されています。
これで問題ないと思い、/etc/init.d/mysql startとしたところ正常に起動しました。単純にMySQLの初期化ができないため、何度起動しようとしても失敗していたということです。

/etc/my.cnfの設定ではデータディレクトリを–datadir=と同じに設定していたのですが、mysql_install_dbはmy.cnfを見ていないような感じでしたので、今回は明示的にオプションで対応することで問題なく起動できました。

mysqlの起動・終了に関しては特に問題がありませんので、mysql_install_dbはmy.cnfを見ないのでしょうか。

Fatal error: Can’t open and lock privilege tables: Table ‘mysql.host’ doesn’t exist” への2件のコメント

  1. ピンバック:CentOS5.6にMySQL5.5をインストールする « infoScoop Developer's Blog

  2. ピンバック:EC2にWordpress導入鯖江人のエンジニアブログ | 鯖江人のエンジニアブログ

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください