この項では Unix 上のサーバ起動時の問題に関するトラブルシューティングについて説明します。Windows を使用している場合には、項2.3.13. 「Windows への MySQL インストールにおけるトラブルシューティング」 を参照してください。
サーバの起動時に問題がある場合、以下を試してみます。
エラーログをチェックしてサーバが起動しない理由を調べます。
使用しているストレージ エンジンに必要なオプションを指定します。
サーバがデータ ディレクトリの場所を検索できるか確認します。
サーバがデータ ディレクトリにアクセスできるか確認します。データ ディレクトリおよびそのコンテンツの所有者の権利および権限をサーバがそれらを読み込んで変更できるように設定します。
サーバに必要なネットワーク インターフェースが利用できるか確認します。
ストレージ
エンジンにその振る舞いを管理するオプションが付いているものもあります。my.cnf
ファイルを作成して使用するエンジンの起動オプションを指定します。トランザクション
テーブル
(InnoDB
、NDB
)
をサポートするストレージ
エンジンを使用する場合には、サーバを起動する前にそれらが所定の設定になっているか確認します。
MySQL Enterprise. お客様の環境に適した起動オプションに関する専門家の助言が必要な場合には、MySQL ネットワーク モニタリングおよびアドバイザリ サービスのご購読をお勧めします。詳細は、http://www.mysql.com/products/enterprise/advisors.html を参照してください。
InnoDB
テーブルを使用している場合は、項13.5.3. 「InnoDB
設定」
を参照してください。
MySQL Cluster を使用している場合、項14.4. 「MySQL Cluster の設定」 を参照してください。
ストレージ エンジンは特に指定しない場合はデフォルトの値を使用します。しかし、デフォルトの値が必ずしも適切であるとは限らないので利用できるオプションを確認して明示的に値を指定することをお勧めします。
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 を再度起動する前にサーバをシャットダウンします。(別のサーバの動作中に、複数のサーバを稼動させる運用の仕方に関する情報は、項4.12. 「同じマシン上での複数 MySQL サーバの実行」 にあります。)
サーバがどれも動作していない場合、コマンド
telnet
を実行してみます。(デフォルトの MySQL
ポート番号は 3306 です。)次に Enter
を数回押します。次のようなエラーメッセージが表示されなかった場合
your_host_name
tcp_ip_port_number
telnet:Unable to connect to remote host:Connection
refused
、mysqld
が使用しようとしている TCP/IP
ポートを他のプログラムが使用しています。その際どのプログラムが使用しているかを調べてそれを無効にするか、または
mysqld に --port
オプションで別のポートを指定します。この場合、サーバに
TCP/IP 経由で接続する際にクライアント
プログラムにポート番号を指定する必要があります。
ポートが接続できない別のの理由にファイアウォールがその接続をブロックしている場合があります。その場合、ファイアウォールの設定をポートにアクセスできるように変更します。
サーバが起動しても接続できない場合、以下のようなエントリが
/etc/hosts
ないか確認します。
127.0.0.1 localhost
この問題は実行中のスレッド ライブラリがないシステムで MIT-pthreads を使用する設定が必要な MySQL でのみ発生します。
mysqld
を起動できない場合、トレース
ファイルを作成し --debug
オプションを使用して問題を探します。Creating Trace Files
参照。