このセクションでは、サーバーの起動に関する問題のトラブルシューティングの提案を提供します。 Windows システムに関するその他の推奨事項については、セクション2.3.5「Microsoft Windows MySQL Server インストールのトラブルシューティング」 を参照してください。
サーバーの起動時に問題がある場合、次を試してみます。
-
エラーログをチェックして、サーバーが起動しない原因を確認します。 ログファイルはデータディレクトリ (通常、Windows では
C:\Program Files\MySQL\MySQL Server 8.0\data
、Unix/Linux バイナリ配布では/usr/local/mysql/data
、Unix/Linux ソース配布では/usr/local/var
) にあります。 データディレクトリの
およびhost_name
.err
の形式のファイル名のファイルを探します。ここで、host_name
.loghost_name
はサーバーホストの名です。 次にこれらのファイルの最後の数行を調べます。 それらを表示するにはtail
を使用します。shell> tail host_name.err shell> tail host_name.log
-
使用しているストレージエンジンに必要なオプションがあれば指定します。
my.cnf
ファイルを作成して、使用するエンジンの起動オプションを指定します。 トランザクションテーブルをサポートするストレージエンジン (InnoDB
、NDB
) を使用する予定である場合、サーバーを起動する前に、それらが適切に構成されていることを確認します。InnoDB
テーブルを使用している場合は、ガイドラインについてはセクション15.8「InnoDB の構成」、オプションの構文についてはセクション15.14「InnoDB の起動オプションおよびシステム変数」を参照してください。ストレージエンジンは、省略したオプションについてはデフォルト値を使用しますが、使用可能なオプションを確認し、デフォルト値がインストールに対して適切でないようなオプションがあれば明示的に値を指定することを推奨します。
-
サーバーが、データディレクトリを検索する場所を認識していることを確認してください。 mysqld サーバーはこのディレクトリを現在のディレクトリとして使用します。 そこでデータベースを探し、ログファイルに書き込むことを想定しています。 サーバーはデータディレクトリで pid (プロセス ID) ファイルも書き込みます。
デフォルトのデータディレクトリの場所は、サーバーのコンパイル時にハードコードされます。 デフォルトのパス設定を確認するには、mysqld を
--verbose
オプションおよび--help
オプションで起動します。 データディレクトリがシステム上の別の場所にある場合は、その場所を、コマンド行またはオプションファイルで--datadir
オプションを使用して mysqld または mysqld_safe に指定します。 そうしないと、サーバーが正しく動作しません。--datadir
オプションの代替として、MySQL がインストールされているベースディレクトリの場所を、mysqld に--basedir
で指定できます。そうすれば、mysqld はそこでdata
ディレクトリを検索します。パスオプションの指定の結果を知るには、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
(許可が却下された
ことを意味します) を受け取る場合は、データディレクトリまたはそのコンテンツの特権が、サーバーアクセスを許可しないものであることを意味します。 この場合、関連するファイルおよびディレクトリの権限を変更して、サーバーがそれらを使用する権限を持つようにします。 サーバーをroot
から起動することもできますが、この場合セキュリティーの問題が生じるため、避けるべきです。データディレクトリの場所を変更し、データディレクトリとその内容の所有権をチェックして、サーバーがアクセスできることを確認します。 たとえば、データディレクトリが
/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
所有権が適切な場合でも、ファイルシステムのさまざまな部分へのアプリケーションのアクセスを管理するようなセキュリティーソフトウェアがシステム上で実行されている場合、MySQL が起動に失敗することがあります。 この場合は、そのソフトウェアを再構成して mysqld が通常の動作中に使用するディレクトリにアクセスできるようにします。
-
サーバーが使用するネットワークインタフェースが利用できることを確認します。
次のいずれかのエラーが発生した場合、ほかのプログラム (おそらく別の 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...
ps を使用して、別の mysqld サーバーが稼働しているかどうか判断します。 その場合、mysqld を再度起動する前にサーバーをシャットダウンします。 (別のサーバーが動作中で、複数のサーバーを稼働させる必要がある場合は、その方法に関する情報は、セクション5.8「1 つのマシン上での複数の MySQL インスタンスの実行」にあります。)
別のサーバーが稼働していない場合は、コマンド
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
mysqld を起動できない場合は、
--debug
オプションを使用して、トレースファイルを作成して問題を発見してみてください。 セクション5.9.4「DBUG パッケージ」を参照してください。