mysql_install_db プログラムの目的は、新しい MySQL 権限テーブルを生成することです。それは既存の MySQL 権限テーブルを上書きせず、ほかのデータに影響を及ぼすことはありません。
権限のテーブルを再度作成する場合は、mysqld サーバーが稼働していればそれを停止します。次にデータディレクトリの mysql
ディレクトリを保存するために名前変更を行い、次に mysql_install_db を実行します。現在のディレクトリが MySQL のインストールディレクトリで、mysql_install_db が bin
ディレクトリにあり、データディレクトリ名が 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.6「質問またはバグをレポートする方法」を参照してください。 -
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_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_db が
scripts
ディレクトリにある場合には、最初のコマンドを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
を使用して MySQLroot
ユーザーとしてサーバーに接続します。これで必要な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 を使用しなかった場合は、付与テーブルに手動でデータを移入しなければならないのみではなく、まず付与テーブルを作成する必要があります。