IE에서 2006 : MySQL Sever has gone away 에러 해결책이 있는지요?

IE에서 2006 : MySQL Sever has gone away 에러 해결책이 있는지요?

QA

IE에서 2006 : MySQL Sever has gone away 에러 해결책이 있는지요?

본문


select b.it_sell_email, a.it_id, a.it_name from g5_shop_cart a left join g5_shop_item b on ( a.it_id = b.it_id ) where a.od_id = '2014122321513033' and a.ct_select = '1' and b.it_sell_email <> '' group by a.it_id
 
2006 : MySQL server has gone away
 
error file : /yc/shop/orderformupdate.php
 

 

IE 에서 주문 신청을 하면 위와 같은 에러가 발생합니다.

그런데 해당 주문은 관리자 화면에 정상 등록이 됩니다.

 

IE 사용자는 에러가 났으니 당연히 새로고침 등의 조작을 합니다.

그러면 동일한 주문이 중복하여 등록이 됩니다.

 

그래서 게시판에서 검색한 방법에 따라 웹호스팅 업체에 요청하여 

wait_timeout , max_allow_packet 충분히 늘려주었습니다.

 

그런데 동일한 에러가 또 발생합니다.

 

특히, 크롬에서는 주문시 느려지지만, 주문상세내역 페이지로 잘 넘어갑니다.

그런데 IE 는 에러를 출력해 버립니다.

 

왜 이런 문제가 일어나는지요?

이 문제를 어떻게 해결해야할까요?

문제 해결 경험이 있으신 분들께 문의드립니다.

 

이 질문에 댓글 쓰기 :

답변 3

http://blog.naver.com/didim365_/220213486050

 

이 문서 보시고 조치를 취하세요.

 

 

우선 해당 화일 메일 발송 부분을 모두 주석처리하고 테스트 해보세요

메일 발송에 문제가 있어서 시간이 너무 많이 지체되여 gone away 상태가 되어버린 것으로 보입니다

 

감사합니다.
메일 발송에 문제가 있었던 것이었네요.
관리자모드에서 모든 메일발송 중단 시키는 ...
주문시 gone away 문제는 발생하지 않습니다.

이제 메일 발송 문제를 해결해야 겠네요^^
정말 감사합니다.

꽤 오랫동안 지속되었던 문제인데 모르고 있었고...
최근에야 문제 해결 시도하면서 헤매던 문제인데
균이님 덕분에 쉽게 원인을 알게 되었습니다.

알려주신 정보에 따라 제 상황은 아래 두 가지 경우일 것으로 가정하고 해결책을 그대로 적용해 보았습니다.

 


전송 패킷에 문제가 있는 경우


a. 전송 패킷의 크기가 큰 경우

INSERT 문이나 UPDATE 문을 사용하여 수 많은 행을 한 번에 삽입하는 경우 패킷 전송에는 문제가 없지만 데이터를 입력할 때

오류가 발생할 수 있습니다.

이는 전송 가능한 패킷의 크기가 기본으로 16M로 설정이 되어 있으나, MySQL에서 처리할 수 있는 데이터의 크기가

기본 1M로 설정되어 있어 발생하는 문제입니다.

이런 경우에는 MySQL 설정 변수 값 수정을 통해 해당 오류를 해결할 수 있으며, 설정 값은 두 가지 방법으로 변경할 수 있습니다.


- MySQL 시작 시 --max_allowed_packet=# 옵션을 사용
- my.cnf 파일에서 [mysqld] 항목의 max_allowed_packet 값을 변경

※ 패킷의 최대 전송 가능 크기는 1GB 입니다.

설정 파일에서 max_allowed_packet 변수 값 설정 방법은 다음과 같습니다.


# vi /etc/my.cnf
max_allowed_packet = 16M > 32M으로 변경

위 두 가지 설정 방법의 차이점은 메모리 할당 방식의 차이로 설정한 메모리를 고정하여 할당이 되는 방법인 MySQL 시작 시 옵션 값을 사용하는 방법보다는 필요한 경우에만 추가 메모리에 할당이 되는 방식인 my.cnf 파일의 변수 값을 변경하는 방법이 메모리 관리에 효율성을 높일 수 있습니다.

또한 한번에 다수의 행을 입력하는 작업의 경우에는 소스 코딩 시 한번에 입력하도록 하지않고, 일정 단위로 끊어서 처리가 될 수 있게

코딩 하여 설정 값의 변경 없이 처리를 하는 방법이 효율적으로 데이터를 처리하는 방법입니다.

[해결 방법] -> 웹호스팅 업체에 요청 패킷 크기 늘려달라고 요청.

 

이전 연결 세션에 영향을 받은 경우


php에서 동일한 인수로 mysql_connect() 을 다시 호출하면, 새로운 link가 생성되는 것이 아니라 이미 생성된 link 식별자 값을

돌려받게 됩니다.


그렇기 때문에 정상적으로 mysql_colse() 후 새로운 mysql_connect() 을 호출할 경우에도
이전 세션에 의해 MySQL 연결이 제대로 진행되지 않을 수 있습니다.

일반적으로 Warning: mysql_close() : # is not a valid MySQL-Link resource in 경고와 함께
해당 오류가 발생하게 됩니다.

이러한 경우에는 MySQL 연결 시 New_Link Flag 를 사용하여 기존의 리소스를 재활용하지
않고, 강제로 새로운 연결을 시도하도록 설정하여 해결할 수 있습니다.

소스 상에서 New_Link Flag를 사용하여 연결을 시도하는 방법은 다음과 같습니다.


     기존 : mysql_connect($SERVER, $USR, $PWD);
     수정 : mysql_connect($SERVER, $USR, $PWD, true);

[해결 방법]  http://www.miwit.com/b/mw_tip-3040

배추빌더 사이트에서 알려주시는 방법 그대로 적용.


만약 서버 관리자(root) 가 아니라 변경 권한이 없으시다면 (대부분의 웹호스팅 사용자분들) 

그누보드의 sql_connect() 함수 수정으로 해결을 할 수 있습니다. 

lib/common.lib.php 파일 1092 라인 쯤에 , true 를 추가하면 됩니다. 

수정전 
3067167260_bNrScXYg_new_link1.png 

수정후 

3067167260_7PCneZM0_new_link2.png

답변을 작성하시기 전에 로그인 해주세요.
전체 124,008 | RSS
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT