このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
db:mysql:障害対応:mysqlに繋がらない_error_2002_hy000:can_t_connect_to_local_mysql_server_through_socket_var_lib_mysql_mysql.ock_111 [2019/03/07 13:14] yusuke_komori |
db:mysql:障害対応:mysqlに繋がらない_error_2002_hy000:can_t_connect_to_local_mysql_server_through_socket_var_lib_mysql_mysql.ock_111 [2019/05/07 10:39] (現在) yusuke_komori |
||
---|---|---|---|
行 1: | 行 1: | ||
====== MySQLに繋がらない ====== | ====== MySQLに繋がらない ====== | ||
- | WordPressを使っているサイトで「データベース接続確立エラー」が発生。結論から言うと、MySQLを再起動させることで解決しました。 | + | WordPress を使っているサイトで「データベース接続確立エラー」が発生。結論から言うと、MySQL を再起動させることで解決しました。\\ |
+ | その上で再発防止のため、Swap領域の作成と innodb_buffer_pool_size を増やしました。 | ||
< | < | ||
- | # MySQLに接続しようとすると、以下のエラーがでる | + | # MySQL に接続しようとすると、以下のエラーがでる |
$ mysql -u root -p | $ mysql -u root -p | ||
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/ | ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/ | ||
行 10: | 行 11: | ||
</ | </ | ||
===== 以下、解決までの調査の流れ ===== | ===== 以下、解決までの調査の流れ ===== | ||
- | 「service mysqld status」でMySQLの状態を確認すると、「Active: | + | 「service mysqld status」で MySQL の状態を確認すると、「Active: |
< | < | ||
$ service mysqld status | $ service mysqld status | ||
- | Redirecting to / | + | Redirecting to / |
- | ● mysqld.service - MySQL Server | + | ● mysqld.service - MySQL Server |
- | Loaded: loaded (/ | + | |
| | ||
| | ||
- | Error: 2 (そのようなファイルやディレクトリはありません) | + | |
</ | </ | ||
一応、実行中のプロセス一覧も確認するが「/ | 一応、実行中のプロセス一覧も確認するが「/ | ||
行 24: | 行 25: | ||
$ ps ax | grep mysql | $ ps ax | grep mysql | ||
</ | </ | ||
- | my.cnfで「mysql.sock」とログフィアルの確認を行う | + | my.cnf で「mysql.sock」とログフィアルの場所を確認 |
< | < | ||
$ sudoedit /etc/my.cnf | $ sudoedit /etc/my.cnf | ||
行 30: | 行 31: | ||
| | ||
- | # mysql.sock | + | # mysql.sock を確認 |
$ sudo ls -l / | $ sudo ls -l / | ||
+ | srwxrwxrwx | ||
- | # ログファイルの確認 | + | # ログの確認 |
$ less / | $ less / | ||
[System] [MY-010116] [Server] / | [System] [MY-010116] [Server] / | ||
行 48: | 行 50: | ||
[ERROR] [MY-010119] [Server] Aborting | [ERROR] [MY-010119] [Server] Aborting | ||
[System] [MY-010910] [Server] / | [System] [MY-010910] [Server] / | ||
- | [System] [MY-010116] [Server] / | ||
- | [System] [MY-010229] [Server] Starting crash recovery... | ||
- | [System] [MY-010232] [Server] Crash recovery finished. | ||
- | [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed. | ||
- | [System] [MY-010931] [Server] / | ||
</ | </ | ||
- | どうやらDBがクラッシュしたため、リカバリーを行った模様。しかし、バッファープールのメモリが足りずデータディクショナリの初期化に失敗し停止してしまったようです。\\ | + | どうやら DB がクラッシュしたため、リカバリーを行った模様。しかし、バッファープールのメモリが足りずデータディクショナリの初期化に失敗し、停止してしまったようです。\\ |
- | まずは、MySQLを再起動してサイトに繋がるように。 | + | まずは、MySQL を再起動してサイトに繋がるように。 |
< | < | ||
# 再起動 | # 再起動 | ||
行 62: | 行 59: | ||
# ステータスを確認。「Active: | # ステータスを確認。「Active: | ||
$ service mysqld status | $ service mysqld status | ||
- | | + | Redirecting to / |
- | ● mysqld.service - MySQL Server | + | ● mysqld.service - MySQL Server |
| | ||
| | ||
- | # MySQLに接続できるか確認 | + | # MySQL に接続できるか確認 |
$ mysql -u root -p | $ mysql -u root -p | ||
</ | </ | ||
- | 特に問題は無さそうだったので、再発しないようにバッファープールを増やします。 | + | 特に問題は無さそうだったので、再発しないように対策を行います。 |
+ | ===== Swapを確認 ===== | ||
+ | < | ||
+ | $ free -m | ||
+ | total | ||
+ | Mem: | ||
+ | Swap: | ||
+ | </ | ||
+ | AWSのEC2で、インスタンスタイプ「t2.small」を使ってますが、Swap領域は無しとのこと。 | ||
+ | AWSであれば、Swap領域はインスタンスストア上に作成することが推奨されているようですが、残念ながら「t2.small」には用意されていない模様。\\ | ||
+ | [[https:// | ||
+ | |||
+ | ===== Swap領域の作成 ===== | ||
+ | < | ||
+ | # 空ファイル作成 | ||
+ | sudo dd if=/ | ||
+ | |||
+ | # 作成した空ファイルをswap領域に設定 | ||
+ | sudo mkswap /swapfile | ||
+ | |||
+ | # 権限を変更 | ||
+ | sudo chmod 600 /swapfile | ||
+ | |||
+ | # スワップ領域を有効化 | ||
+ | sudo swapon /swapfile | ||
+ | |||
+ | # swap領域確認 | ||
+ | free -m | ||
+ | total | ||
+ | Mem: | ||
+ | Swap: 1023 0 | ||
+ | |||
+ | # MySQL 再起動 | ||
+ | sudo service mysqld restart | ||
+ | |||
+ | # 再起動時にマウントされるように fstab を編集 | ||
+ | sudoedit / | ||
+ | / | ||
+ | |||
+ | # エラーが出ないか確認 | ||
+ | sudo mount -a | ||
+ | |||
+ | # 再起動 | ||
+ | shutdown -r now | ||
+ | </ | ||
+ | |||
+ | ===== innodb_buffer_pool_size を増やす ===== | ||
+ | まずは、現在のバッファプールサイズを確認。 | ||
+ | < | ||
+ | $ mysql -u root -p | ||
+ | |||
+ | > show variables like ' | ||
+ | +-------------------------+-----------+ | ||
+ | | Variable_name | ||
+ | +-------------------------+-----------+ | ||
+ | | innodb_buffer_pool_size | 134217728 | | ||
+ | +-------------------------+-----------+ | ||
+ | 1 row in set (0.00 sec) | ||
+ | </ | ||
+ | サイズを増やす。 | ||
+ | < | ||
+ | # my.cnfに追記 | ||
+ | $ sudoedit / | ||
+ | [mysqld] | ||
+ | innodb_buffer_pool_size = 256M | ||
+ | |||
+ | # MySQL の再起動 | ||
+ | $ sudo service mysqld restart | ||
+ | </ | ||
+ | サイズが反映されているか確認。 | ||
+ | < | ||
+ | > show variables like ' | ||
+ | +-------------------------+-----------+ | ||
+ | | Variable_name | ||
+ | +-------------------------+-----------+ | ||
+ | | innodb_buffer_pool_size | 268435456 | | ||
+ | +-------------------------+-----------+ | ||
+ | 1 row in set (0.00 sec) | ||
+ | </ | ||