■MySQLに接続しようとすると Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' と表示される
エラーが発生したままなら、MySQLの再起動を試す
$ sudo service mysqld restart
$ sudo /etc/init.d/mysqld restart
それでも駄目なら、手動で mysql.sock を作るといいらしい(未検証)
$ sudo touch /var/lib/mysql/mysql.sock
$ sudo chown mysql:mysql /var/lib/mysql/mysql.sock
MySqlのソケットエラーを解決する - Qiita
https://qiita.com/kanohisa/items/564035efd74d9c75bdcb
mysqlが起動できない(Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)) - Qiita
https://qiita.com/carotene4035/items/e00076fe3990b9178cc0
ただし稼働中のサーバで、常にではなく時々発生しているものがある(すぐに自動で回復する)
メモリ不足や同時接続数の問題で、たまたま mysql.sock を読み込めなかった…とかかも
PHP - 【Mysql、PHP】mysql.sockが消えてしまう(105500)|teratail
https://teratail.com/questions/105500
正しい接続をしなかった場合にも発生することがあるらしい
MySQLがクラッシュした場合にもソケットファイルは削除されるらしい
ディスク使用率が100%になった場合にも、この現象が発生することがある
その場合、「ディスク容量が残り少ない」を参考に不要なデータを削除する
■エラーになってMySQLを再起動するまで回復されなかったときに調査した内容
# cat /var/log/command/uptime/20180817/1530.log
15:30:02 up 102 days, 3:08, 0 users, load average: 5.44, 3.00, 1.33
15:28前後にロードアベレージが急激に上がっている
(シングルコアのサーバなのに、瞬間的に6近くまで上がっている / 過去のロードアベレージを記録する仕組みはあらかじめ構築してある)
# vi /var/log/messages
Aug 17 15:28:12 aws-terraport kernel: [8824004.377690] Out of memory: Kill process 2908 (mysqld) score 146 or sacrifice child
Aug 17 15:28:12 aws-terraport kernel: [8824004.381107] Killed process 2908 (mysqld) total-vm:1491044kB, anon-rss:12028kB, file-rss:0kB
メモリ不足になったようで、OOM Killer によりMySQLが強制終了させられている
# vi /var/log/mysqld.log
180817 15:28:13 mysqld_safe Number of processes running now: 0
180817 15:28:13 mysqld_safe mysqld restarted
180817 15:28:13 [Note] /usr/libexec/mysql55/mysqld (mysqld 5.5.52) starting as process 32053 ...
180817 15:28:13 [Note] Plugin 'FEDERATED' is disabled.
180817 15:28:13 InnoDB: The InnoDB memory heap is disabled
180817 15:28:13 InnoDB: Mutexes and rw_locks use GCC atomic builtins
180817 15:28:13 InnoDB: Compressed tables use zlib 1.2.8
180817 15:28:13 InnoDB: Using Linux native AIO
180817 15:28:13 InnoDB: Initializing buffer pool, size = 512.0MInnoDB: mmap(549453824 bytes) failed; errno 12
180817 15:28:13 InnoDB: Compressed tables use zlib 1.2.8
180817 15:28:13 InnoDB: Using Linux native AIO
180817 15:28:13 InnoDB: Initializing buffer pool, size = 512.0MInnoDB: mmap(549453824 bytes) failed; errno 12
180817 15:28:13 InnoDB: Completed initialization of buffer pool
180817 15:28:13 InnoDB: Fatal error: cannot allocate memory for the buffer pool
180817 15:28:13 [ERROR] Plugin 'InnoDB' init function returned error.
180817 15:28:13 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
180817 15:28:13 [ERROR] Unknown/unsupported storage engine: InnoDB
180817 15:28:13 [ERROR] Aborting
180817 15:28:13 [Note] /usr/libexec/mysql56/mysqld: Shutdown complete
180817 15:28:13 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended
直後に、mysqld_safeがMySQLを再起動しようとしている
が、「Fatal error: cannot allocate memory for the buffer pool」などがあるので、
メモリ不足で再起動に失敗し、そのままになっている
発生したサーバはAWSのEC2のmicroなので、単純に性能不足なのかもしれない
PHPプログラムやMySQLのチューニングでいくらか改善できるかもしれない
mysqldが落ちてた時の対応メモ - itochin2の日記(仮)
http://itochin2.hatenablog.com/entry/2014/03/06/142225
mysqldとmysqld_safeの関係 | OpenGroove
https://open-groove.net/mysql/mysqld-mysqldsafe/