2017-11-30 5 views
2

제 상황은 이렇습니다. PHP 스크립트와 AJAX 호출을 사용하여 큰 mysql 덤프를 데이터베이스로 가져와야합니다.나중에 사용할 수 있도록 MySQL 연결을 저장할 수있는 방법이 있습니까?

필자는 재귀 AJAX 함수를 작성했습니다.이 함수는 PHP 스크립트와 통신하고 .sql에서 다음 청크를 자르기 위해 필요한 모든 데이터 (.sql 파일의 포인터 위치와 같은)를 앞뒤로 보냅니다. 파일을 만들고 스크립트가 파일의 끝에 도달 할 때까지 실행하십시오.

내가 만나는 문제는 일부 mysql 덤프가 파일의 시작 부분에 정의 된 변수를 말하고 나중에 파일에서 사용하고 있다는 것입니다. 이 두 코드 세그먼트가 같은 청크에 없으면 사용 된 변수가 정의되지 않았기 때문에 SQL 오류가 발생합니다.

그래서 일반적으로 세션의 연결/상태를 저장하고 나중에 복원하고 세션 변수를 사용할 수있는 방법이 있다면 궁금합니다.

감사합니다.

+1

PHP 설정에 따라 [mysqlnd php 확장명으로 연결 풀링] (http://php.net/manual/en/mysqlnd-ms.pooling.php)을 사용할 수도 있지만 일부 서버에는 이미 확장 프로그램은 기본적으로 사용하도록 설정되어 있습니다. 설명서를 읽으면 PHP 스크립트에서 무언가를 변경하여 사용할 수 있습니다. – xander

+0

나는 또한 당신의 경우에 흥미로운 것으로 나타났습니다 : [The mysqli Extension and Persistent Connections] (http://php.net/manual/en/mysqli.persistconns.php) – xander

+1

@xander 방금 체크했는데 대부분의 것 같습니다 공유 호스팅은 mysqlnd 확장을 지원하지 않습니다. 영구 연결은 경우에 따라 서버와의 연결 속도를 높이기 때문에 필자의 경우 관련 세션 데이터를 저장하지 않습니다. –

답변

1

PHP 스크립트를 지속적으로 사용하는 경우에만. 일반적인 HTTP 설정에서 PHP를 호출 할 때마다 새로운 PHP 인스턴스가 만들어지고 요청이 끝나면 해체됩니다. 그것은 반드시 MySQL 세션과 그 요청 중에 생성 한 임시 데이터를 종료합니다.

PHP로 영구 작업자를 작성하여 무한대로 실행하고 어떤 종류의 메시지 버스 (예 : Gearman, ØMQ 또는 Crossbar)의 요청에 응답 할 수 있습니다. 그래서 요청은 다음과 같이 될 것입니다 :

browser ⇄ web server ⇄ ephemeral PHP instance ⇄ Gearman ⇄ persistent PHP worker 

그 지속적인 작업자에서는 원하는 것을 유지할 수 있습니다. 분명히 약간의 특수한 서버 설정이 필요하며 일반 공유 호스팅 등에서는 불가능합니다.

+0

이 스크립트는 백업 된 웹 사이트를 복원하는 상용 플러그인의 일부입니다. 따라서 제네릭 호스팅에서 작동하려면 꼭 필요하지만 어쨌든 정보를 보내 주셔서 감사합니다! –

관련 문제