====== MySQLに繋がらない ====== WordPress を使っているサイトで「データベース接続確立エラー」が発生。結論から言うと、MySQL を再起動させることで解決しました。\\ その上で再発防止のため、Swap領域の作成と innodb_buffer_pool_size を増やしました。 # MySQL に接続しようとすると、以下のエラーがでる $ mysql -u root -p ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.ock' (111) # 再起動で解決 $ sudo service mysqld restart ===== 以下、解決までの調査の流れ ===== 「service mysqld status」で MySQL の状態を確認すると、「Active: failed」で停止している $ service mysqld status Redirecting to /bin/systemctl status mysqld.service ● mysqld.service - MySQL Server Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled) Active: failed (Result: exit-code) since 木 2019-03-07 10:57:29 JST; 42min ago Status: "SERVER_BOOTING" Error: 2 (そのようなファイルやディレクトリはありません) 一応、実行中のプロセス一覧も確認するが「/usr/sbin/mysqld」がない $ ps ax | grep mysql my.cnf で「mysql.sock」とログフィアルの場所を確認 $ sudoedit /etc/my.cnf socket=/var/lib/mysql/mysql.sock log-error=/var/log/mysql/mysqld.log # mysql.sock を確認 $ sudo ls -l /var/lib/mysql/ | grep mysql.sock srwxrwxrwx 1 mysql mysql 0 3月 7 16:41 mysql.sock # ログの確認 $ less /var/log/mysql/mysqld.log [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.12) starting as process 18440 [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] /usr/sbin/mysqld: ready for connections. Version: '8.0.12' socket: '/var/lib/mysql/mysql.sock' port: 3306 MySQL Community Server - GPL. [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.12) starting as process 18537 [ERROR] [MY-012681] [InnoDB] InnoDB: mmap(137428992 bytes) failed; errno 12 [ERROR] [MY-012956] [InnoDB] InnoDB: Cannot allocate memory for the buffer pool [ERROR] [MY-012930] [InnoDB] InnoDB: Plugin initialization aborted with error Generic error. [ERROR] [MY-010334] [Server] Failed to initialize DD Storage Engine [ERROR] [MY-010020] [Server] Data Dictionary initialization failed. [ERROR] [MY-010119] [Server] Aborting [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.12) MySQL Community Server - GPL. どうやら DB がクラッシュしたため、リカバリーを行った模様。しかし、バッファープールのメモリが足りずデータディクショナリの初期化に失敗し、停止してしまったようです。\\ まずは、MySQL を再起動してサイトに繋がるように。 # 再起動 $ sudo service mysqld restart # ステータスを確認。「Active: active」になってます $ service mysqld status Redirecting to /bin/systemctl status mysqld.service ● mysqld.service - MySQL Server Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled) Active: active (running) since 木 2019-03-07 11:51:11 JST; 21min ago # MySQL に接続できるか確認 $ mysql -u root -p 特に問題は無さそうだったので、再発しないように対策を行います。 ===== Swapを確認 ===== $ free -m total used free shared buff/cache available Mem: 1837 531 677 64 628 1031 Swap: 0 0 0 AWSのEC2で、インスタンスタイプ「t2.small」を使ってますが、Swap領域は無しとのこと。 AWSであれば、Swap領域はインスタンスストア上に作成することが推奨されているようですが、残念ながら「t2.small」には用意されていない模様。\\ [[https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/InstanceStorage.html#instance-store-volumes|インスタンスタイプ毎のインスタンスストアボリューム]] ===== Swap領域の作成 ===== # 空ファイル作成 sudo dd if=/dev/zero of=/swapfile bs=1M count=1024 # 作成した空ファイルをswap領域に設定 sudo mkswap /swapfile # 権限を変更 sudo chmod 600 /swapfile # スワップ領域を有効化 sudo swapon /swapfile # swap領域確認 free -m total used free shared buff/cache available Mem: 1837 545 207 88 1084 1014 Swap: 1023 0 1023 # MySQL 再起動 sudo service mysqld restart # 再起動時にマウントされるように fstab を編集 sudoedit /etc/fstab /swapfile swap swap defaults 0 0 # エラーが出ないか確認 sudo mount -a # 再起動 shutdown -r now ===== innodb_buffer_pool_size を増やす ===== まずは、現在のバッファプールサイズを確認。 $ mysql -u root -p > show variables like 'innodb_buffer_pool_size'; +-------------------------+-----------+ | Variable_name | Value | +-------------------------+-----------+ | innodb_buffer_pool_size | 134217728 | +-------------------------+-----------+ 1 row in set (0.00 sec) サイズを増やす。 # my.cnfに追記 $ sudoedit /etc/my.cnf [mysqld] innodb_buffer_pool_size = 256M # MySQL の再起動 $ sudo service mysqld restart サイズが反映されているか確認。 > show variables like 'innodb_buffer_pool_size'; +-------------------------+-----------+ | Variable_name | Value | +-------------------------+-----------+ | innodb_buffer_pool_size | 268435456 | +-------------------------+-----------+ 1 row in set (0.00 sec)