2011-03-02 2 views
1

MySQL 데이터베이스 테이블과 innoDB 테이블이 있습니다. 내가 연결하는 PHP 페이지가, 테이블을 잠급니다, 몇 가지 업데이 트를 누른 다음 테이블의 잠금을 해제. PHP 페이지가 wamp를 통해 Apache와 함께 제공됩니다.PHP 충돌 후 mysql 테이블 잠김

PHP 페이지가 파일을 데이터베이스에 업로드합니다. 필자는 PHP에 할당 된 메모리보다 큰 크기의 파일을 업로드하여 시스템 충돌을 시뮬레이션하기로 결정했습니다. 이로 인해 확실히 18874368 바이트의 메모리 크기가 소모되었습니다 (6176754 바이트 할당 시도). 그 후, 갱신 중에 잠긴 테이블은 여전히 ​​잠겨 있습니다.

이 오류가 발생한 후 테이블에 액세스하려고하면 오류가 발생합니다. 'a'테이블이 LOCK 테이블로 잠겨 있지 않습니다. SQL 문을 띄우고 잠긴 테이블에서 선택하려고 시도하기 때문에 잠금 문제라는 것을 알고 테이블이 잠길 때와 똑같이 기다립니다. 그런 다음 Apache 프로세스를 종료하면 SQL 프롬프트에서 실행하려고 시도한 문이 마침내 실행됩니다. 내 생각 엔 아파치 프로세스를 죽일 때 MySQL은 연결이 끊어지기 때문에 테이블 잠금을 해제해야한다는 것을 깨닫는다.

어떤 아이디어 ??

답변

5

있는 qoute에서을 실행을 완료하고 연결을 완료/처분 함.

연결을 계속해서는 안됩니다. IMO

3

내 게시물을 읽은 후, 나는 내 자신의 질문에 친절하게 답변했다. 데이터베이스에 연결하기 위해 mysql_pconnect()를 사용했기 때문에 충돌을 통해서조차 연결이 지속되고있었습니다. 나는 그것을 mysql_connect()로 바꿨고, 잘 동작했다. 미안 누군가의 시간을 낭비한다면, 나는 이것이 누군가를 도와주기를 바란다 !!

--Joshua

0

당신은 테이블 잠금을 해제하기 위해 셧다운 기능을 사용할 수 연결이 페이지 이후 지속적으로 http://dev.mysql.com/doc/refman/5.0/en/lock-tables.html

If the connection for a client session terminates, whether normally or abnormally, the server implicitly releases all table locks held by the session (transactional and nontransactional). If the client reconnects, the locks will no longer be in effect. In addition, if the client had an active transaction, the server rolls back the transaction upon disconnect, and if reconnect occurs, the new session begins with autocommit enabled.

:

http://php.net/manual/en/function.register-shutdown-function.php

+1

오류 처리와 함께 치명적인 오류는 관리 할 수 ​​없습니다! – RobertPitt

+0

나의 실수 - 나는 셧다운 기능을 생각하고 있었다. 답변 됨. – qbert220

관련 문제