質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

2回答

8831閲覧

mysql.connector.errors.OperationalError: Mysql Connection not available. が解決できない

suvera

総合スコア106

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2016/09/27 03:03

編集2016/09/29 00:37

###前提・実現したいこと
DockerのMySQLイメージからコンテナを作成してDBを運用しています。
基本的には問題なく動いているのですが作成から翌日までそのままにして
翌朝アクセスしようとするとエラーが出る問題を発見しました。
MySQLとの接続が切れているといったことを言われるのですが解決策がわからなかったため質問させていただきます。

あれから毎日この問題に悩まされています。
MySQL自体はい動いているように思えます。

gunicorn message:app --config gunicornconf.py

で接続を行ったままで放置し、翌朝アクセスするとこのエラーが出るようになっています。

Ctrl+Z pkill -SIGKILL -f gunicorn

で一度切断した後、再度接続すると元通り復活します。

何をどうしたら起動しっぱなしで外部からのアクセスを常に受け取れる状態にして置けるんですか?

###発生している問題・エラーメッセージ

[2016-09-20 01:15:24 +0000] [14653] [ERROR] Error handling request /message_get Traceback (most recent call last): File "/root/.pyenv/versions/3.5.2/lib/python3.5/site-packages/gunicorn/workers/sync.py", line 135, in handle self.handle_request(listener, req, client, addr) File "/root/.pyenv/versions/3.5.2/lib/python3.5/site-packages/gunicorn/workers/sync.py", line 176, in handle_request respiter = self.wsgi(environ, resp.start_response) File "/root/.pyenv/versions/3.5.2/lib/python3.5/site-packages/falcon/api.py", line 189, in __call__ responder(req, resp, **params) File "/var/www/apps/message.py", line 31, in on_get msg = self.showMessage() File "/var/www/apps/message.py", line 21, in getMessage cursor = self.connector.cursor() File "/root/.pyenv/versions/3.5.2/lib/python3.5/site-packages/mysql/connector/connection.py", line 809, in cursor raise errors.OperationalError("MySQL Connection not available.") mysql.connector.errors.OperationalError: MySQL Connection not available.

###補足情報(言語/FW/ツール等のバージョンなど)
Python3
gunicorn
falcon
MySQL5

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mahata

2016/09/27 05:35

接続が切れたときは MySQL コンテナはまだ動いているのでしょうか? `docker ps` で何か動いていることが確認できますか?
suvera

2016/09/27 08:24

動いています。 docker ps でコンテナが生きていることは確認しました。
suvera

2016/09/28 00:05

自分も問題が理解できているわけではないですが 同じ問題に思えます。
guest

回答2

0

時間がたつとエラーになるということは、サーバ側の無通信タイムアウトで強制切断されているのではないでしょうか?無通信タイムアウトにかぎらず、サーバ側の都合で接続が切れることはあるので、切れていたら再接続するというのがベストプラクティスになります。
File "/var/www/apps/message.py", line 21, in getMessage
のところが修正できるのであれば、以下のようなコードで「切れていたら再接続」が実装できるように思われます。

python

1 self.connector.ping(reconnect=True) 2 cursor = self.connector.cursor()

もう一つの方法としては、コネクションプールを使います。
おそらく、今はコネクションをプログラムの中の変数に保持しているのだと思いますが、これをやめて、コネクションプールを使うように変更します。

python

1dbconfig = { 2 "database": "test", 3 "user": "joe" 4} 5# プールから取得(このとき、接続が切れていてもプールのロジックで復旧してくれる) 6cnx = mysql.connector.connect(pool_name = "mypool", 7 pool_size = 3, 8 **dbconfig) 9# cnx を使ってデータベースにアクセス 10... 11# プールに返却 12cnx.close()

投稿2016/09/28 07:09

編集2016/09/28 07:29
mit0223

総合スコア3401

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

自己解決

http://qiita.com/satococoa/items/e3396d9d75b9cf7e6214

こちらを参考に時間を伸ばしたところ一応の解決は見えました。

投稿2016/09/30 07:27

suvera

総合スコア106

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mit0223

2016/09/30 08:08

そうですか。ただ、根本的な解決になっていないと思います。本来、コネクションをプログラムで長時間保持すること自身良くありません。性能が気にならないなら毎回再接続しても良いくらいです。コネクションを長時間保持すると、途中の通信機器とかで遮断されたり、サーバを再起動するだけで、コネクションが切れたりします。 私の案にそってプログラムを修正すべきと思いますが、message.py は修正できないのでしょうか?
suvera

2016/10/03 07:32

コメントありがとうございます。 即急に接続できる時間を伸ばす必要があったため今回はこちらの処理で対応しました。 ただ根本的な解決にい至っていないことは理解しているので 解決すべきものとしてIssueにしました。 色々な問題で今すぐ手を付けられないのですが近いうちにmit0223さんの方法を参考に解決させます。 解答ありがとうございました。
mit0223

2016/10/03 08:31

> 根本的な解決にい至っていないことは理解しているので解決すべきものとしてIssueにしました。 安心しました。老婆心ですみません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問