Debian (Jessie) サーバー上の MySQL で奇妙な問題が発生しています。
サーバーが再起動されると、systemd は mysqld を起動しようとしますが、失敗します (ポート 3306 がすでに使用されているように見えますが、その理由はわかりません)。
ただし、数分後にサーバーに SSH 接続して実行するとsudo systemctl start mysql
成功します。
サーバーを再起動するたびに問題が再現されます。
すでにこの問題に遭遇した人はいますか、または MySQL が正しく起動するのを妨げる原因は何だと思いますか? 再起動後に MySQL を起動する前に遅延を追加することもできますが、何が起こっているのか理解したいのですが、実際にそれで問題が解決するかどうかさえわかりません。
再起動後の結果は次のとおりですsudo systemctl status mysql -l
。
● mysql.service - LSB: Start and stop the mysql database server daemon
Loaded: loaded (/etc/init.d/mysql)
Active: failed (Result: exit-code) since Fri 2017-09-01 21:54:44 CEST; 1min 41s ago
Process: 581 ExecStart=/etc/init.d/mysql start (code=exited, status=1/FAILURE)
Sep 01 21:54:06 gimli systemd[1]: Starting LSB: Start and stop the mysql database server daemon...
Sep 01 21:54:44 gimli mysql[581]: Starting MySQL database server: mysqld . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . failed!
Sep 01 21:54:44 gimli systemd[1]: mysql.service: control process exited, code=exited status=1
Sep 01 21:54:44 gimli systemd[1]: Failed to start LSB: Start and stop the mysql database server daemon.
Sep 01 21:54:44 gimli systemd[1]: Unit mysql.service entered failed state.
対応するログ/var/log/mysql/error.log
170901 21:54:16 [Warning] Using unique option prefix myisam-recover instead of myisam-recover-options is deprecated and will be removed in a future release. Please use the full name instead.
170901 21:54:16 [Note] Plugin 'FEDERATED' is disabled.
170901 21:54:17 InnoDB: The InnoDB memory heap is disabled
170901 21:54:17 InnoDB: Mutexes and rw_locks use GCC atomic builtins
170901 21:54:17 InnoDB: Compressed tables use zlib 1.2.8
170901 21:54:17 InnoDB: Using Linux native AIO
170901 21:54:17 InnoDB: Initializing buffer pool, size = 128.0M
170901 21:54:17 InnoDB: Completed initialization of buffer pool
170901 21:54:17 InnoDB: highest supported file format is Barracuda.
170901 21:54:22 InnoDB: Waiting for the background threads to start
170901 21:54:23 InnoDB: 5.5.57 started; log sequence number 351234412
170901 21:54:23 [Note] Server hostname (bind-address): '192.168.1.14'; port: 3306
170901 21:54:23 [Note] - '192.168.1.14' resolves to '192.168.1.14';
170901 21:54:23 [Note] Server socket created on IP: '192.168.1.14'.
170901 21:54:23 [ERROR] Can't start server: Bind on TCP/IP port: Cannot assign requested address
170901 21:54:23 [ERROR] Do you already have another mysqld server running on port: 3306 ?
170901 21:54:23 [ERROR] Aborting
170901 21:54:23 InnoDB: Starting shutdown...
170901 21:54:24 InnoDB: Shutdown completed; log sequence number 351234412
170901 21:54:24 [Note] /usr/sbin/mysqld: Shutdown complete
ただし、sudo systemctl start mysql
手動で実行すると、正常に動作します。
170901 22:01:36 [Warning] Using unique option prefix myisam-recover instead of myisam-recover-options is deprecated and will be removed in a future release. Please use the full name instead.
170901 22:01:36 [Note] Plugin 'FEDERATED' is disabled.
170901 22:01:36 InnoDB: The InnoDB memory heap is disabled
170901 22:01:36 InnoDB: Mutexes and rw_locks use GCC atomic builtins
170901 22:01:36 InnoDB: Compressed tables use zlib 1.2.8
170901 22:01:36 InnoDB: Using Linux native AIO
170901 22:01:36 InnoDB: Initializing buffer pool, size = 128.0M
170901 22:01:36 InnoDB: Completed initialization of buffer pool
170901 22:01:36 InnoDB: highest supported file format is Barracuda.
170901 22:01:36 InnoDB: Waiting for the background threads to start
170901 22:01:37 InnoDB: 5.5.57 started; log sequence number 351234412
170901 22:01:37 [Note] Server hostname (bind-address): '192.168.1.14'; port: 3306
170901 22:01:37 [Note] - '192.168.1.14' resolves to '192.168.1.14';
170901 22:01:37 [Note] Server socket created on IP: '192.168.1.14'.
170901 22:01:37 [Note] Event Scheduler: Loaded 0 events
170901 22:01:37 [Note] /usr/sbin/mysqld: ready for connections.
Version: '5.5.57-0+deb8u1' socket: '/var/run/mysqld/mysqld.sock' port: 3306 (Debian)
私の知る限り、systemd スクリプトは変更されていません (Debian mysql パッケージに付属しているものです)。また、私の知る限り、正しく動作したことがありません。3306 ポートは、別のプロセスによって使用されることは想定されていません。
答え1
再起動して root として実行した直後にサーバーに SSH 接続して、netstat -lp | grep 3306
実際にそのポートでリッスンしているプログラムを確認し、問題をさらにデバッグできるようにします。
答え2
どうやら問題は、mysql の起動時にネットワーク インターフェイスが起動していなかったことです。これはおそらく、DHCP に少し時間がかかることに関係しています。
少なくとも、インターフェイスを静的 IP に設定したので、mysql の問題は発生しなくなりました (繰り返しますが、起動のたびに再現可能です)。これで問題は解決しました。
Debian で静的 IP を設定する手順は次のとおりです。
- SSH機能が失われる可能性があるため、ネットワークをいじる前に、サーバーに物理的にアクセスできることを確認してください(電源ボタン、キーボード、画面)。
- /etc/network/interfacesを編集する
置き換え
iface eth0 inet dhcp
:iface eth0 inet static address 192.168.1.14 network 192.168.1.0 netmask 255.255.255.0 broadcast 192.168.1.255 gateway 192.168.1.1
- 再起動します(注:たとえば でネットワークを再起動するだけで十分なはずです
systemctl restart networking
が、私の場合は接続が失われましたが、電源ボタンでサーバーを再起動せずに再接続できませんでした)
この例では、静的IP 192.168.1.14とゲートウェイ192.168.1.1を割り当てます。
もちろん、これは単なる回避策であり、実際の問題は、mysql がネットワーク インターフェイスが起動するまで待機する必要があることですが、それを実行できるほど systemd をよく知りません。