Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 27.1Mb
PDF (A4) - 27.2Mb
HTML Download (TGZ) - 7.2Mb
HTML Download (Zip) - 7.2Mb


2.10.1.1 mysql_install_db 実行の問題

mysql_install_db プログラムの目的は、新しい MySQL 権限テーブルを生成することです。それは既存の MySQL 権限テーブルを上書きせず、ほかのデータに影響を及ぼすことはありません。

権限のテーブルを再度作成する場合は、mysqld サーバーが稼働していればそれを停止します。次にデータディレクトリの mysql ディレクトリを保存するために名前変更を行い、次に mysql_install_db を実行します。現在のディレクトリが MySQL のインストールディレクトリで、mysql_install_dbbin ディレクトリにあり、データディレクトリ名が data であるとします。mysql データベースの名前変更を行い mysql_install_db を実行するには、次のコマンドを使用します。

shell> mv data/mysql data/mysql.old
shell> scripts/mysql_install_db --user=mysql

mysql_install_db を実行すると、次の問題が発生する場合があります。

  • mysql_install_db が付与テーブルのインストールに失敗する

    mysql_install_db が付与テーブルのインストールに失敗し、次のメッセージの表示後に終了する場合があります。

    Starting mysqld daemon with databases from XXXXXX
    mysqld ended

    この場合、エラーのログファイルを非常に慎重に調べる必要があります。ログは、エラーメッセージで指定されるディレクトリ XXXXXX にあるはずで、mysqld が起動しなかった理由を示しているはずです。どのような問題が発生したかわからない場合は、バグレポートを投稿するときにログを一緒に送ります。セクション1.7「質問またはバグをレポートする方法」を参照してください。

  • mysqld プロセスが実行されている

    これはサーバーが稼働していることを示しています。この場合、付与テーブルはおそらくすでに作成されています。その場合、mysql_install_db を起動する必要があるのは一度だけ (最初に MySQL をインストールしたとき) であるため、それを起動する必要はまったくありません。

  • 1 台のサーバーの起動中に 2 台目の mysqld サーバーのインストールができない

    これは既存の MySQL のインストールがあり、異なる場所に新たにインストールを行う場合に起こることがあります。たとえば、本番用のインストールがすでにあるが、テスト目的に 2 台目のインストールを作成する場合です。一般的に 2 台目のサーバーを起動しようとしたときに起こる問題は、1 台目のサーバーが使用しているネットワークインタフェースを 2 台目のサーバーが使用しようとした場合に発生します。この場合、次のエラーメッセージのいずれかが表示されるはずです。

    Can't start server: Bind on TCP/IP port:
    Address already in use
    Can't start server: Bind on unix socket...

    複数のサーバーの設定に関する説明は、セクション5.3「1 つのマシン上での複数の MySQL インスタンスの実行」を参照してください。

  • /tmp ディレクトリに対する書き込みアクセス権がない

    デフォルトの場所 (/tmp ディレクトリ) または TMP_DIR 環境変数 (設定されている場合) に、一時ファイルまたは Unix ソケットファイルを作成するための書き込みアクセス権がない場合、mysql_install_db または mysqld サーバーを起動するとエラーが生じます。

    mysql_install_db あるいは mysqld を起動する前に次のコマンドを実行して、一時ディレクトリおよび Unix のソケットファイルに別の場所を指定できます。ここで、some_tmp_dir は書き込み許可のあるディレクトリへのフルパス名です。

    shell> TMPDIR=/some_tmp_dir/
    shell> MYSQL_UNIX_PORT=/some_tmp_dir/mysql.sock
    shell> export TMPDIR MYSQL_UNIX_PORT

    そうすれば、mysql_install_db を起動して次のコマンドでサーバーを起動できるはずです。

    shell> scripts/mysql_install_db --user=mysql
    shell> bin/mysqld_safe --user=mysql &

    mysql_install_dbscripts ディレクトリにある場合には、最初のコマンドを scripts/mysql_install_db に変更します。

    セクションB.5.4.5「MySQL の UNIX ソケットファイルを保護または変更する方法」、およびセクション2.12「環境変数」を参照してください。

MySQL の配布で提供される mysql_install_db プログラムを実行するには、いくつかの方法があります。

  • 初期権限を標準のデフォルトと異なるものにする場合、mysql_install_db を実行する前に変更できます。しかし、付与テーブルを設定したあとにGRANT および REVOKE を使用して権限を変更することが推奨されます。つまり、mysql_install_db を起動し、次に mysql -u root mysql を使用して MySQL root ユーザーとしてサーバーに接続します。これで必要な GRANT および REVOKE ステートメントを発行できます。

    同じ権限で複数のマシンに MySQL をインストールする場合、GRANT および REVOKE ステートメントを 1 つのファイルに入れ、mysql_install_db を起動後に、mysql を使用してそのファイルをスクリプトとして実行できます。例:

    shell> scripts/mysql_install_db --user=mysql
    shell> bin/mysql -u root < your_script_file

    このようにすることで、各マシンでステートメントを手動で発行する必要がなくなります。

  • 付与テーブルを作成したあとで、完全に再作成できます。単に GRANT および REVOKE の使用方法を学習していて、mysql_install_db の実行後にあまりに多くの変更を行なったためテーブルを消去してやり直す場合には、このようにするとよいでしょう。

    付与テーブルを再度作成するには、mysql データベースディレクトリにあるすべての .frm.MYI、および .MYD ファイルを削除します。次に、mysql_install_db プログラムを再度実行します。

  • mysqld--skip-grant-tables オプションを使用して手動で起動し、mysql を使用してご自身で権限情報を追加することができます。

    shell> bin/mysqld_safe --user=mysql --skip-grant-tables &
    shell> bin/mysql mysql

    mysql から、mysql_install_db の SQL コマンドを手動で実行します。mysqladmin flush-privileges あるいは mysqladmin reload を必ずあとで実行して、付与テーブルをリロードするようサーバーに指示します。

    mysql_install_db を使用しなかった場合は、付与テーブルに手動でデータを移入しなければならないのみではなく、まず付与テーブルを作成する必要があります。


User Comments
  Posted by Nathan Zook on November 17, 2009
If you get a warning about not being able to create test tables, this indicates a permissions problem. First ensure that the user mysql will run as has the ability to write to the data directories. Note also that SELinux and AppArmor can cause permissions problems, even if the file permissions would allow access. This is a particular issue if you are wanting to run a server in a sandbox. Check the documentation for how to configure these security systems to permit mysql to access the directories in question.

  Posted by Larry Irwin on February 8, 2011
When you install a generic binary on a base Debian Lenny install, there is a leftover configuration /etc/mysql/my.cnf file that makes the script mysql_install_db fail.
Removing the folder and it contents solves the problem.
Sign Up Login You must be logged in to post a comment.