ユーザ用ツール

サイト用ツール


db:mysql:障害対応:mysqlに繋がらない_error_2002_hy000:can_t_connect_to_local_mysql_server_through_socket_var_lib_mysql_mysql.ock_111

差分

このページの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 を増やしました。
 <code:none> <code:none>
-# MySQLに接続しようとすると、以下のエラーがでる+# MySQL に接続しようとすると、以下のエラーがでる
 $ mysql -u root -p $ mysql -u root -p
 ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.ock' (111) ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.ock' (111)
行 10: 行 11:
 </code> </code>
 ===== 以下、解決までの調査の流れ ===== ===== 以下、解決までの調査の流れ =====
-「service mysqld status」でMySQLの状態を確認すると、「Active: failed」で停止している+「service mysqld status」で MySQL の状態を確認すると、「Active: failed」で停止している
 <code> <code>
 $ service mysqld status $ service mysqld status
- Redirecting to /bin/systemctl status mysqld.service +Redirecting to /bin/systemctl status mysqld.service 
- ● mysqld.service - MySQL Server +● mysqld.service - MySQL Server 
-  Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)+   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    Active: failed (Result: exit-code) since 木 2019-03-07 10:57:29 JST; 42min ago
    Status: "SERVER_BOOTING"    Status: "SERVER_BOOTING"
-     Error: 2 (そのようなファイルやディレクトリはありません)+    Error: 2 (そのようなファイルやディレクトリはありません)
 </code> </code>
 一応、実行中のプロセス一覧も確認するが「/usr/sbin/mysqld」がない 一応、実行中のプロセス一覧も確認するが「/usr/sbin/mysqld」がない
行 24: 行 25:
 $ ps ax | grep mysql $ ps ax | grep mysql
 </code> </code>
-my.cnfで「mysql.sock」とログフィアルの確認を行う+my.cnf で「mysql.sock」とログフィアルの場所を確認
 <code> <code>
 $ sudoedit /etc/my.cnf $ sudoedit /etc/my.cnf
行 30: 行 31:
  log-error=/var/log/mysql/mysqld.log  log-error=/var/log/mysql/mysqld.log
  
-# mysql.sock は存在するのを確認+# mysql.sock を確認
 $ sudo ls -l /var/lib/mysql/ | grep 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 $ less /var/log/mysql/mysqld.log
   [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.12) starting as process 18440   [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.12) starting as process 18440
行 48: 行 50:
   [ERROR] [MY-010119] [Server] Aborting   [ERROR] [MY-010119] [Server] Aborting
   [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.12)  MySQL Community Server - GPL.   [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.12)  MySQL Community Server - GPL.
-  [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.12) starting as process 21359 
-  [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. 
 </code> </code>
-どうやらDBがクラッシュしたため、リカバリーを行った模様。しかし、バッファープールのメモリが足りずデータディクショナリの初期化に失敗し停止してしまったようです。\\ +どうやら DB がクラッシュしたため、リカバリーを行った模様。しかし、バッファープールのメモリが足りずデータディクショナリの初期化に失敗し停止してしまったようです。\\ 
-まずは、MySQLを再起動してサイトに繋がるように。+まずは、MySQL を再起動してサイトに繋がるように。
 <code> <code>
 # 再起動 # 再起動
行 62: 行 59:
 # ステータスを確認。「Active: active」になってます # ステータスを確認。「Active: active」になってます
 $ service mysqld status $ service mysqld status
-  Redirecting to /bin/systemctl status mysqld.service +Redirecting to /bin/systemctl status mysqld.service 
-  ● mysqld.service - MySQL Server+● mysqld.service - MySQL Server
    Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)    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    Active: active (running) since 木 2019-03-07 11:51:11 JST; 21min ago
  
-# MySQLに接続できるか確認+# MySQL に接続できるか確認
 $ mysql -u root -p $ mysql -u root -p
 </code> </code>
-特に問題は無さそうだったので、再発しないようにバッファプールを増やします。+特に問題は無さそうだったので、再発しないように対策を行います。 
 +===== Swapを確認 ===== 
 +<code> 
 +$ free -m 
 +        total   used   free   shared  buff/cache   available 
 +Mem:     1837    531    677       64         628        1031 
 +Swap:            0      0 
 +</code> 
 +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領域の作成 ===== 
 +<code> 
 +# 空ファイル作成 
 +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 
 +</code> 
 + 
 +===== innodb_buffer_pool_size を増やす ===== 
 +まずは、現在のバッファプールサイズを確認。 
 +<code> 
 +$ 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) 
 +</code> 
 +サイズを増やす。 
 +<code> 
 +# my.cnfに追記 
 +$ sudoedit /etc/my.cnf 
 +[mysqld] 
 +innodb_buffer_pool_size = 256M 
 + 
 +# MySQL の再起動 
 +$ sudo service mysqld restart 
 +</code> 
 +サイズが反映されているか確認。 
 +<code> 
 +> show variables like 'innodb_buffer_pool_size'; 
 ++-------------------------+-----------+ 
 +| Variable_name           | Value     | 
 ++-------------------------+-----------+ 
 +| innodb_buffer_pool_size | 268435456 | 
 ++-------------------------+-----------+ 
 +1 row in set (0.00 sec) 
 +</code>
  
db/mysql/障害対応/mysqlに繋がらない_error_2002_hy000/can_t_connect_to_local_mysql_server_through_socket_var_lib_mysql_mysql.ock_111.1551932071.txt.gz · 最終更新: 2019/03/07 13:14 by yusuke_komori