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
が起動しなかった理由が示されます。どんな問題が発生したか分からない場合、バグ
レポートをポストする時にログを一緒に送ります。項1.7. 「質問またはバグの報告」
参照。
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...
複数のサーバの設定に関する説明は、項4.12. 「同じマシン上での複数 MySQL サーバの実行」 参照してください。
あなたには
/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
に変更します。
項B.1.4.5. 「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
ステートメントを一つのファイルに入れ、そのファイルを
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 を使用しなかった場合は、グラント テーブルを手動で作成しなければならないのみならず、それらを最初に作成しなければなりません。