2012-02-02 7 views
2

Apache 2.2.9/Debian上でwsgiを実行していて、mysql 5.0.51aを使用していました。展開されたdjangoのインストールと、 2つのデータベースを使用して実行しています。mysqlサーバがなくなりました(エラー#2006)

すべてのユーザーに対して、特定の機能が発生しました。2006:サーバーがなくなったエラー。 GUI(Djangoのウェブサイト)が利用可能であり続けている間にバックグラウンドで起こって

t = threading.Thread(target = logic.report, 
        args = [proj_info, userdata] 
        ) 
t.setDaemon(True) 
t.start() 

それは何か:物事の前に呼び出される最後の関数の隣には、間違って行くことを始める は次のように、スレッドです。これは数十回もうまくいっていますが、今日の午後は失敗しました。

Djangoは(ブラウザを介して、そしてもちろん、私は追加情報のために開いているタブを保つために忘れてしまった)返されるエラーは、午前14時15分18秒で起こって何かを指摘し、ので、ここでいくつかのmysql.logは

120202 14:15:18 3449 Connect  [email protected] on beta2db 
      3449 Query  SET NAMES utf8 
      3449 Query  set autocommit=0 
      3449 Query  SELECT `auth_user`.`id`, `auth_user`.`username`, `auth_user`.`first_name`, `auth_user`.`last_name`, `auth_user`.`email`, `auth_user`.`password`, `auth_user`.`is_staff`, `auth_user`.`is_active`, `auth_user`.`is_superuser`, `auth_user`.`last_login`, `auth_user`.`date_joined` FROM `auth_user` WHERE `auth_user`.`id` = 3 
      3449 Query  SELECT `insight_test_run`.`id`, `insight_test_run`.`rawfile`, `insight_test_run`.`koekfile`, `insight_test_run`.`measure_date`, `insight_test_run`.`test_id`, `insight_test_run`.`subject_id`, `insight_test_run`.`quality` FROM `insight_test_run` WHERE `insight_test_run`.`id` = 514 
      3449 Query  SELECT `insight_project`.`id`, `insight_project`.`client`, `insight_project`.`description`, `insight_project`.`directory` FROM `insight_project` INNER JOIN `insight_project_test_run` ON (`insight_project`.`id` = `insight_project_test_run`.`project_id`) WHERE `insight_project_test_run`.`test_run_id` = 514 
      3449 Query  SELECT `auth_user`.`id`, `auth_user`.`username`, `auth_user`.`first_name`, `auth_user`.`last_name`, `auth_user`.`email`, `auth_user`.`password`, `auth_user`.`is_staff`, `auth_user`.`is_active`, `auth_user`.`is_superuser`, `auth_user`.`last_login`, `auth_user`.`date_joined` FROM `auth_user` INNER JOIN `insight_project_user` ON (`auth_user`.`id` = `insight_project_user`.`user_id`) WHERE `insight_project_user`.`project_id` = 6 
      3449 Query  SELECT `django_content_type`.`app_label`, `auth_permission`.`codename` FROM `auth_permission` INNER JOIN `auth_group_permissions` ON (`auth_permission`.`id` = `auth_group_permissions`.`permission_id`) INNER JOIN `auth_group` ON (`auth_group_permissions`.`group_id` = `auth_group`.`id`) INNER JOIN `auth_user_groups` ON (`auth_group`.`id` = `auth_user_groups`.`group_id`) INNER JOIN `django_content_type` ON (`auth_permission`.`content_type_id` = `django_content_type`.`id`) WHERE `auth_user_groups`.`user_id` = 3 
      3449 Query  rollback 
      3449 Query  SELECT `insight_subject`.`id`, `insight_subject`.`name`, `insight_subject`.`nice_name`, `insight_subject`.`handedness`, `insight_subject`.`birthday`, `insight_subject`.`gender`, `insight_subject`.`education`, `insight_subject`.`eyecorrection`, `insight_subject`.`extra` FROM `insight_subject` WHERE `insight_subject`.`id` = 10000456 
      3449 Query  SELECT `insight_test`.`id`, `insight_test`.`description`, `insight_test`.`level_id`, `insight_test`.`name` FROM `insight_test` WHERE `insight_test`.`id` = 1 
      3449 Query  SELECT `insight_test_level`.`id`, `insight_test_level`.`description`, `insight_test_level`.`official_name` FROM `insight_test_level` WHERE `insight_test_level`.`id` = 1 
      3449 Quit  
ですここ

は、Apacheのログ(/var/log/apache2/error.log)のビットは次のとおりです。

[Thu Feb 02 14:17:00 2012] [error] Exception in thread Thread-2: 
[Thu Feb 02 14:17:00 2012] [error] Traceback (most recent call last): 
[Thu Feb 02 14:17:00 2012] [error] File "/usr/local/lib/python2.7/threading.py", line 530, in __bootstrap_inner 
[Thu Feb 02 14:17:00 2012] [error]  self.run() 
[Thu Feb 02 14:17:00 2012] [error] File "/usr/local/lib/python2.7/threading.py", line 483, in run 
[Thu Feb 02 14:17:00 2012] [error]  self.__target(*self.__args, **self.__kwargs) 
[Thu Feb 02 14:17:00 2012] [error] File "/usr/local/www/wsgi-scripts/portal/ovl_webinterface/insight/logic.py", line 50, in report 
[Thu Feb 02 14:17:00 2012] [error]  reportfile = ovl.report.make_report(django_test_run_id = j, img = trunfo['img'], text_style = trunfo['style'], anonymous = anon) 
[Thu Feb 02 14:17:00 2012] [error] File "/usr/local/lib/python2.7/site-packages/ovl_analystT/reporting.py", line 90, in make_report 
[Thu Feb 02 14:17:00 2012] [error]  info = dbman.gather_all_test_run_info(django_test_run_id = django_test_run_id) 
[Thu Feb 02 14:17:00 2012] [error] File "/usr/local/lib/python2.7/site-packages/ovl_analystT/dbconnector.py", line 802, in gather_all_test_run_info 
[Thu Feb 02 14:17:00 2012] [error]  test_run = self.get_table_rows2(table = 'test_run', convert_to_one = True, django_id = django_test_run_id) 
[Thu Feb 02 14:17:00 2012] [error] File "/usr/local/lib/python2.7/site-packages/warehouseT/manager.py", line 213, in get_table_rows2 
[Thu Feb 02 14:17:00 2012] [error]  cols = kwargs.pop('columns',self.get_table_column_names(table))#if columns are specified (using keyword 'columns') it only loads those. 
[Thu Feb 02 14:17:00 2012] [error] File "/usr/local/lib/python2.7/site-packages/warehouseT/manager.py", line 116, in get_table_column_names 
[Thu Feb 02 14:17:00 2012] [error]  res = self.execute('''DESCRIBE %s'''%(table))#this function is so basic.. it should present no trouble, so no debug stuff. 
[Thu Feb 02 14:17:00 2012] [error] File "/usr/local/lib/python2.7/site-packages/warehouseT/manager.py", line 91, in execute 
[Thu Feb 02 14:17:00 2012] [error]  self.cursor.execute(cmd)#this may raise warnings which we need to catch 
[Thu Feb 02 14:17:00 2012] [error] File "build/bdist.linux-x86_64/egg/MySQLdb/cursors.py", line 174, in execute 
[Thu Feb 02 14:17:00 2012] [error]  self.errorhandler(self, exc, value) 
[Thu Feb 02 14:17:00 2012] [error] File "build/bdist.linux-x86_64/egg/MySQLdb/connections.py", line 36, in defaulterrorhandler 
[Thu Feb 02 14:17:00 2012] [error]  raise errorclass, errorvalue 
[Thu Feb 02 14:17:00 2012] [error] OperationalError: (2006, 'MySQL server has gone away') 

(ログのこの作品のタイムスタンプを見て、私は、Djangoのエラーサイトが指摘推測していますエラーが発生した時点ではなく要求が行われた瞬間まで)

これは基本的にこれは私自身のコードのエラーです(mysqlによって停止される)。

私はmysqlログが正常に見えると思います。私は私が投稿しているものの前に行を見ていましたが、私は奇妙なものを認識しませんでしたが、私は毎日それらを読んでいません。 rootユーザと異なるユーザを使用してmysqlサーバにローカルにログインすると、何の問題もありませんでした。私ができると思ったことはすべて私がすることができました。率直に私がログインする方法を知らないので、私はユーザのwwwデータとして何も試していませんでした。また、djangoは別のユーザ名を使ってmysqlサーバにログインします。

mysql-serverを再起動すると、結果は表示されません。 apache2とdjango開発サーバーとmysql-serverを再起動すると、結果は表示されません。 30分後、すべてが良かった。

私はあなたにほとんど何も与えていないことを実感している。もう少し投稿したいと思いますが、私が言及したように、Djangoのエラーページは閉じました。そして、私はこのエラーを再現することができません。これはちょっと恐ろしいことです。このエラーは、少なくとも1時間に一貫して発生しましたが、1時間に3分の3になる可能性があります。それから、すべてのものが再び働きました。私は理由を知らないのです。私の訓練されていない目には、apache2とデータベースの両方で、その時に何が変わったのかという手がかりはありません。

私はこれをgoogledしてwait_timeoutについて何かを見つけました。 mysqlがあまりにも怠惰になってしまって、ページをリフレッシュした後にうまくいってしまうようなことがなくなってしまったのです。

なぜこのようなことが起こったのか、この2006年のエラーから守るために何をすべきなのか、誰でも助けてくれますか?

答えて

2

だから、このエラーは、接続が長時間開いているときに発生することがわかりました。これは私の状況には当てはまらないと思ったので、私はこれを無視しました。多くの審議の末、このエラーが発生したときに自動的に再接続して再試行するコードを書き直しましたが、の右にと感じました。それから、私のコードは、それ自体は必要ありませんが、は長い間開いた接続を維持していました。私がデータベースアクセスに使用したオブジェクトは、さまざまなモジュールレベルでインスタンス化されていたので、私はそれらがApacheを再起動したときに作成されたと思います。

これで、データベースオブジェクトは、必要な機能の中にのみ作成され、エラー2006年以降の問題は発生していません。D。問題は、椅子とキーボードの間にあった。

関連する問題