mysql:5290
From: "Yasuhide Nomura" <"Yasuhide Nomura" <mag@xxxxxxxxxx>>
Date: Mon, 1 Apr 2002 03:13:50 +0900
Subject: [mysql 05290] MySQL が MySQL クライアントと共にダウン
野村です。
先日私の携わるシステムで次のような障害が発生しました。
解決できずに困っております。エラー番号146がキーになると思いますが、原因がお
分かりの方お願いします。解決のヒントでも結構ですので、情報をお願いします。
---
環境:
同一サービスを提供する複数台マシンがスタンドアローンで構成されている。
各ホストにはMySQLサーバおよびMySQLクライアント機能を有するプログラムが稼動し
ている。
各サーバにはMySQL(mysqld)が2インスタンス起動している。
MySQLクライアント機能を有するプログラムのプロセスリーダは2インスタンス起動し
ており、親ごとにローカルMySQLへの接続するインスタンスが決められる。また、親
プロセスから起動した子プロセスは他のプロセスとは無関係にMySQLへUnix ソケット
を使用し接続する。
MySQLへは子プロセスの数だけコネクションが確立される。
障害:
クライアントプログラムがMySQL以外のコードで停滞状態となり、クライアントプロ
セス数が増加した。
クライアントプロセスからMySQLへの接続エラーとして次のメッセージが表示され
た。
Can't connect to local MySQL server through socket '/tmp/mysql.sock'
(146)
このとき、mysqladmin processlistでは2コネクションしかなかった。
上記エラーが続き、異常となったMySQLクライアントのプロセスグループの接続先イ
ンスタンスのMySQLサーバも同時にダウンしてしまった。
事後検証:
障害以前から障害発生時までmysqladmin processlistで確認していたが、プロセスリ
ストには20リスト程度しか表示されていなかった。(通常時では本システムは500程度
でも稼動している)
サーバのリソースには空きがある。(sarでのfreemem, freeswap)
もう一方のインスタンスには影響がなかった。
クライアントプロセスの停滞状態はMySQL APIコード外で発生していた。
クライアントプロセスは次の状況で停滞していた。
-
mysql_real_connect
mysql_escape_string
mysql_query
<-- 処理にトラブルがあり、複数のプロセスが長時間停滞状態 --> クライアントと
共にMySQLダウン
mysql_close
-
疑問点:
MySQLサーバはMySQLコマンドのmysqladmin processlistで表示されている(た)以外の
(接続中か接続していた)クライアントに対してリソースを与えているのか?
wait_timeoutによって、アイドルコネクションは切断するようにしていたためリスト
は通常に比べ1割程度のコネクションでなぜダウンを引き起こしたのか? しかも片方
のインスタンスのみ。
mysql_closeを行えなかったのが原因か?
perror 146(146 = Lock timed out; Retry transaction)とはどういう状態に発生す
るのか?
---
よろしくお願いします。
野村 安英
mag@xxxxxxxxxx
-> 5290 2002-04-01 03:13 ["Yasuhide Nomura" <m] MySQL が MySQL クライアントと共にダウン 5291 2002-04-01 08:13 ┗[とみたまさひろ <tomm] 5294 2002-04-01 11:38 ┗["Yasuhide Nomura" <m] 5299 2002-04-02 07:30 ┗[とみたまさひろ <tomm] 5307 2002-04-03 21:34 ┗["Yasuhide Nomura" <m] 5309 2002-04-03 22:42 ┗[とみたまさひろ <tomm] 5310 2002-04-03 23:27 ┗[Shuhei Tomita <shuhe] 5311 2002-04-04 08:17 ┗[とみたまさひろ <tomm] 5330 2002-04-08 20:18 ┗["Yasuhide Nomura" <m]