この項では Unix 上のサーバー起動時の問題に関するトラブルシューティングについて説明します。Windows を使用している場合には、項2.3.13. 「Windows への MySQL インストールにおけるトラブルシューティング」 を参照してください。
サーバーの起動時に問題がある場合、以下を試してみます。
エラーログを確認してサーバーが起動しない理由を調べます。
使用しているストレージエンジンに必要なオプションを指定します。
サーバーがデータディレクトリの場所を検索できるか確認します。
サーバーがデータディレクトリにアクセスできるか確認します。データディレクトリおよびそのコンテンツの所有者の権利および権限をサーバーがそれらを読み込んで変更できるように設定します。
サーバーに必要なネットワークインタフェースが利用できるか確認します。
ストレージエンジンにその振る舞いを管理するオプションが付いているものもあります。my.cnf
ファイルを作成して使用するエンジンのスタートアップオプションを指定します。トランザクションテーブル
(InnoDB
、NDB
)
をサポートするストレージエンジンを使用する場合には、サーバーを起動する前にそれらが所定の設定になっているか確認します。
InnoDB
テーブルを使用している場合は、項9.2. 「InnoDB
設定」
を参照してください。
MySQL Cluster を使用している場合、MySQL Cluster Configuration を参照してください。
ストレージエンジンは特に指定しない場合はデフォルトの値を使用します。しかし、デフォルトの値が必ずしも適切であるとは限らないので利用できるオプションを確認して明示的に値を指定することをお勧めします。
mysqld サーバーが起動すると、ロケーションをデータディレクトリに変更します。そこでデータベースを探し、ログファイルを書き込みます。サーバーはデータディレクトリで pid (プロセス ID) ファイルも書き込みます。
サーバーをコンパイルするとデータディレクトリのロケーションが組み込まれます。ここがデフォルトでサーバーがデータディレクトリを探す場所です。データディレクトリがシステムのどこか別の場所にある場合には、サーバーは正常に動作しません。mysqld
を --verbose
および
--help
オプションを実行してデフォルトのパスの設定を決定できます。
システム上のデフォルトのロケーションが MySQL のインストールレイアウトと一致しない場合、オプションをコマンドラインあるいはオプションファイルの mysqld あるいは mysqld_safe に指定してそれらをオーバーライドできます。
データディレクトリのロケーションを明示的に指定するには、--datadir
オプションを使用します。しかし、通常は
MySQL
をインストールしそこでデータディレクトリを探すベースディレクトリのロケーションを
mysqld
に指定できます。--basedir
オプションで指定できます。
パスオプションの指定の結果を知るには、mysqld
をそれらのオプションで実行し次に--verbose
および --help
オプションを実行します。たとえば、ロケーションを
mysqld
をインストールしたディレクトリに変更して次に以下のコマンドを実行すると、その結果
/usr/local
のベースディレクトリでサーバーが起動します。
shell> ./mysqld --basedir=/usr/local --verbose --help
--datadir
のようなオプションも同様に指定できますが、--verbose
および --help
は最後のオプションになります。
任意のパスを設定したあと、サーバーを--verbose
および --help
を使用しないで起動します。
mysqld が動作しているときに、以下のコマンドを実行してどのパス設定が使用されているか確認できます。
shell> mysqladmin variables
または
shell> mysqladmin -h host_name
variables
host_name
は MySQL
サーバーのホスト名です。
mysqld
を実行したときに Errcode
13
(Permission
denied
を意味する)
が表示された場合は、データディレクトリの権限あるいはそのコンテンツがサーバーのアクセスを許可していないことを意味します。この場合、関連するファイルおよびディレクトリの権限を変更してサーバーがそれらのを使用できるようにします。サーバーを
root
からも起動できますが、この場合セキュリティーが脆弱になるためこの立ち上げは避けるべきです。
Unix
では、ロケーションをデータディレクトリに変更してデータディレクトリおよびそのコンテンツの所有者権限を確認し、サーバーにアクセス権があるか確認します。たとえば、データディレクトリが
/usr/local/mysql/var
の場合は、以下のコマンドを使用します。
shell> ls -la /usr/local/mysql/var
データディレクトリあるいはそのファイルまたはサブディレクトリがサーバーを運用するためのログインアカウントの所有でない場合、それらの所有者権限をそのアカウントに変更します。そのアカウントが
mysql
の場合、以下のコマンドを使用します。
shell>chown -R mysql /usr/local/mysql/var
shell>chgrp -R mysql /usr/local/mysql/var
サーバーが正常に起動できない場合、エラーログを確認します。ログファイルはデータディレクトリ
(一般的には Windows では
C:\Program Files\MySQL\MySQL Server
5.1\data
、Unix
のバイナリ配布では
/usr/local/mysql/data
、Unix
のソース配布では
/usr/local/var
)
にあります。データディレクトリの
および
host_name
.err
のフォーム名のファイルは、host_name
.loghost_name
はサーバーのホスト名です。次にこれらのファイルの最後の数行を調べます。Unix
では、それらの表示に
tail
を使用します。
shell>tail
shell>host_name
.errtail
host_name
.log
エラーログにはサーバーが起動しなかった情報が含まれています。
以下のいずれかのエラーが発生した場合、ほかのプログラム (多分別の mysqld サーバー) が mysqld が使用する TCP/IP ポートあるいは Unix のソケットファイルを使用していることを意味します。
Can't start server: Bind on TCP/IP port: Address already in use Can't start server: Bind on unix socket...
別の mysqld サーバーを動作している場合には、ps を使用します。その場合、mysqld を再度起動する前にサーバーをシャットダウンします。(別のサーバーの動作中に、複数のサーバーを稼働させる運用の仕方に関する情報は、Running Multiple MySQL Servers on the Same Machine にあります)。
サーバーがどれも動作していない場合、コマンド
telnet
を実行してみます。(デフォルトの MySQL
ポート番号は 3306 です)。次に Enter
を数回押します。your_host_name
tcp_ip_port_number
telnet:
Unable to connect to remote host: Connection refused
のようなエラーメッセージが表示されない場合は、mysqld
が使用しようとしている TCP/IP
ポートをほかのプログラムが使用しています。そのプログラムを突きとめて無効にするか、--port
オプションを使って別のポートで待機するよう
mysqld
に命令する必要があります。この場合、サーバーに
TCP/IP
経由で接続する際にクライアントプログラムにポート番号を指定する必要があります。
ポートが接続できない別のの理由にファイアウォールがその接続をブロックしている場合があります。その場合、ファイアウォールの設定をポートにアクセスできるように変更します。
サーバーが起動しても接続できない場合、以下のようなエントリが
/etc/hosts
ないか確認します。
127.0.0.1 localhost
この問題は実行中のスレッドライブラリがないシステムで MIT-pthreads を使用する設定が必要な MySQL でのみ発生します。
mysqld
を起動できない場合、トレースファイルを作成し
--debug
オプションを使用して問題を探します。MySQL
Internals: Porting を参照してください。