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>bin/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
が起動しなかった理由が示されます。どんな問題が発生したか分からない場合、バグレポートをポストするときにログを一緒に送ります。How to Report Bugs or Problems
を参照してください。
mysqld プロセスが実行されている
これはサーバーが稼働していることを示しています。この場合グラントテーブルは多分すでに作成されています。その場合、mysql_install_db を起動する必要はまったくありません。なぜなら、それは一度だけ起動する必要があるからです (最初に MySQL をインストールした場合)。
1 台のサーバーの起動中に 2 番目の mysqld サーバーのインストールはできません。
これは既存の MySQL のインストールがあり、異なるロケーションに新たにインストールを行う場合に起こります。たとえば、本稼働用インストールがすでにあり、テスト目的に 2 番目のインストールを希望される場合です。一般的に 2 番目のサーバーを起動しようとしたときに起こる問題は 2 台目のサーバーが 1 台目のサーバーが使用しているネットワークインタフェースを使用しようとした場合に発生します。この場合、以下のエラーメッセージのいずれかが表示されます。
Can't start server: Bind on TCP/IP port: Address already in use Can't start server: Bind on unix socket...
複数のサーバーの設定に関する説明は、Running Multiple MySQL Servers on the Same Machine 参照してください。
/tmp
ディレクトリに対する書き込みアクセス権がありません
一時ファイル作成の書き込みアクセスがない場合あるいは
Unix
ソケットファイルがデフォルトのロケーション
(/tmp
ディレクトリ)
にない場合に、mysql_install_db
を実行したり
mysqld
サーバーを起動するとエラーが発生します。
一時ディレクトリまたは Unix
のソケットファイルに
mysql_install_db
あるいは mysqld
を起動する前に以下のコマンドを実行して別のロケーションを指定できます。そこでは
some_tmp_dir
は許可を書いたディレクトリへのフルのパス名です。
shell>TMPDIR=/
shell>some_tmp_dir
/MYSQL_UNIX_PORT=/
shell>some_tmp_dir
/mysql.sockexport TMPDIR MYSQL_UNIX_PORT
次に mysql_install_db を起動し以下のコマンドでサーバーを起動します。
shell>bin/mysql_install_db --user=mysql
shell>bin/mysqld_safe --user=mysql &
If mysql_install_db が
scripts
ディレクトリにある場合には、最初のコマンドを
scripts/mysql_install_db
に変更します。
How to Protect or Change the MySQL Unix Socket File、項2.14. 「環境変数」 を参照してください。
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
を使用してスクリプトとして
mysql_install_db
を起動後に実行します。例 :
shell>bin/mysql_install_db --user=mysql
shell>bin/mysql -u root < your_script_file
このようにすることで、各マシンでステートメントを手動で発行する必要がなくなります。
グラントテーブルを作成したあとに再度完全に作成できます。これらは
MySQL_install_db
を起動後に
GRANT
および
REVOKE
の使用の仕方を学ぶためにを色々変更を加えその後にテーブルからそれらをの変更を削除して起動する再に必要になります。
グラントテーブルを再度作成するには、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 を使用しなかった場合は、グラントテーブルを手動で作成しなければならないのみならず、それらを最初に作成しなければなりません。