2012-02-02 5 views
2

아파치 2.2.9/Debian에서 wsgi를 실행하고 mysql 5.0.51a를 사용하여 배포 된 django 설치와 두 개발 서버에서 다음과 같은 문제가 발생했습니다. 2 데이터베이스를 사용하여 실행.mysql 서버가 사라졌습니다 (오류 # 2006)

모든 사용자에 대해 특정 기능은 2006 : 서버가 오류가 발생했습니다. GUI를 (장고 웹 사이트) 계속 사용할 수있는 동안 백그라운드에서 일어나고

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

그것은 뭔가 : 일 전에 마지막으로 호출 함수 다음은 잘못 시작 는 같은 스레드에 있습니다. 이것은 수십 수십 번 잘 진행되어 왔지만 오늘 오후에 실패했습니다.

장고 (브라우저를 통해 I 추가 정보를 개방 해당 탭을 유지하는 것을 잊었다 물론), 그래서 여기에 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  
에게 있습니다

[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') 

는 (로그의이 조각의 타임 스탬프를 보면, 내가 장고 오류 사이트가 지적 같은데요 : 여기

아파치 로그 (/var/log/apache2/error.log)의 비트가 오류가 제기 된 시점이 아니라 요청이 완료된 순간까지)

기본적으로이 코드는 내 자신의 코드에서 오류가 발생합니다 (mysql에 의해 중지되는 코드는 실수없이 반복됩니다).

mysql 로그가 정상적으로 보입니다. 내가 올리려고하는 것보다 먼저 줄을 들여다 보았지만, 나는 이상한 것을 알아보지 못했지만 매일 읽지는 않는다. 다른 사용자와 마찬가지로 루트 사용자를 사용하여 mysql 서버에 로컬로 로그인하면 어떠한 문제도 발생하지 않습니다. 내가 할 수있을 것으로 예상되는 모든 것들을 할 수 있습니다. 솔직히 로그인하는 법을 모르기 때문에 나는 사용자 www- 데이터로 아무 것도 시도하지 않았습니다. 또한 django는 다른 사용자 이름을 사용하여 mysql-server에 로그인합니다.

mysql-server를 다시 시작하면 결과가 표시되지 않습니다. 아파치 2 및 django 개발 서버뿐만 아니라 mysql - 서버, 결과가 다시 시작. 30 분 후, 모든 것이 괜찮 았어.

나는 당신에게 거의 아무것도 할 수 없다는 것을 알고있다. 좀 더 게시하고 싶지만, 언급 한대로 장고 오류 페이지를 닫았습니다. 그리고 나는이 오류를 재연 할 수 없다. 그것은 다소 무서운 것이다. 이 오류는 적어도 한 시간 반 동안 일관되게 발생했지만 어쩌면 한 시간에 4 분의 3이 걸렸습니다. 그런 다음 모든 것이 다시 작동하고 이유를 알지 못합니다. 익숙하지 않은 눈에는 아파치 2와 데이터베이스에서 그 시간에 어떤 변화가 있었는지에 대한 단서가 없다.

오, 그래 나는 이것을 봤고, wait_timeout에 대해 뭔가 발견했다. , 그리고 mysql에 관해서는 많은 게으름을 피하고 페이지를 새로 고친 후에도 괜찮습니다.

왜 이런 일이 일어 났으며이 2006 년 오류로부터 보호하기 위해해야 ​​할 일을 도와 줄 수 있습니까?

답변

2

그래서 다양한 사이트에서 오랫동안 연결이 열려있을 때이 오류가 발생하는 것으로 나타났습니다. 나는 이것이 나의 상황에 적용 할 수 없다고 생각했기 때문에 이것을 무시했다. 많은 심의를 거친 후이 오류가 발생했을 때 자동으로 다시 연결하고 다시 시도 할 코드를 다시 작성했지만 이 맞지 않습니다..그런 다음 내 코드 이 그 자체로 필요없이 오랜 시간 동안 열린 연결을 유지한다는 것을 발견했습니다. 데이터베이스 액세스에 사용 된 객체 (들)는 여러 모듈 수준에서 인스턴스화되었으므로 아파치를 다시 시작할 때만 만들어진 것으로 생각됩니다. 연결이 며칠 후 연결되는 것은 당연한 일입니다.

그래서 이제는 데이터베이스 개체를 필요로하는 함수 안에 만 만들었고 이후로 오류 2006에는 문제가 없었습니다. D. 문제는 의자와 키보드 사이에있었습니다.

관련 문제