2011-08-05 2 views
1

PHP를 통해 SQL 덤프를 가져 오려고합니다. 다음 코드가 있습니다."MySQL 서버가 사라졌습니다."라는 오류가 발생했습니다. 시간 초과라고 생각하지 않습니다.

@mysql_connect("localhost", "root", "root") or die("Cannot connect to DB!"); 
    @mysql_select_db("great_database") or die("Cannot select DB!"); 
    $query = file_get_contents('defaultDatabasePartOne.sql', FILE_USE_INCLUDE_PATH); 
    debug($query); 
    $result = mysql_query($query);  
    debug($result); 

    $error = mysql_error(); 
    debug($error); 

파일 인 $ query를 디버깅하기 때문에 내 파일을 올바르게로드하고 있다는 것을 알고 있습니다. 파일에서 주석을 제거했지만 여전히 줄 바꿈이 있지만 문제가되지 않습니까?

나는이 오류가 시간 초과와 관련이 있다는 것을 알고 있지만 SET GLOBAL wait_timeout =99999999999을 실행 했으므로 그 내용이 변경되지 않았다고 생각할 수 있습니다. 나는이 문제를 어떻게 해결할 수 있습니까?

CREATE TABLE `access_tokens` (
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
    `token` varchar(32) COLLATE utf8_unicode_ci NOT NULL, 
    `user_id` int(11) NOT NULL, 
    `created` datetime NOT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `token` (`token`), 
    KEY `user_id` (`user_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=3 ; 

답변

2

this 발견 :

을 Heres 기능 내가이 작업을 수행하는 데 사용 : 여기

는 @ 크리스의 예입니다 생각이 난 그냥 필요로하는 사람들을 위해 그것을 게시 할 것 미래에.

  • $ URL은 SQL 파일의 경로입니다
  • $ nowhost입니다
  • $ nowdatabase는 dB에게 있습니다 dbhost
  • $의 nowpass는 DB
을 통과한다 $의 nowuser는 DB 사용자입니다

코드 :

function parse_mysql_dump($url,$nowhost,$nowdatabase,$nowuser,$nowpass){ 
    $link = mysql_connect($nowhost, $nowuser, $nowpass); 
     if (!$link) { 
      die('Not connected : ' . mysql_error()); 
     } 

     // make foo the current db 
     $db_selected = mysql_select_db($nowdatabase, $link); 
     if (!$db_selected) { 
      die ('Can\'t use foo : ' . mysql_error()); 
     } 
    $file_content = file($url); 
    foreach($file_content as $sql_line){ 
    if(trim($sql_line) != "" && strpos($sql_line, "--") === false){ 
    //echo $sql_line . '<br>'; 
     mysql_query($sql_line); 
    } 
    } 
    } 
+0

또한 PHP 5.3의 mysql_ 기능은 더 이상 사용되지 않으며 가능한 경우 다른 방법을 찾아야합니다. 더 많은 정보는 여기 : http://www.dreamincode.net/forums/topic/241077-whats-wrong-with-mysql-functions/. – user1934587390

+0

때로는 덤프를 제외하고 한 줄 이상의 내용을 처리합니다. 내 질문에 줄 바꿈을 유지하기 위해 예제를 추가했습니다. 그리고 나서 제대로 실행될 것인가 아니면 그냥'CREATE TABLE 'access_tokens'('와 MySQL이 혼란 스러울 것인가?) 라인을 실행할 것인가? –

+0

어쨌든 –

2

덤프가 얼마나 큽니까? max_allowed_packet 한계를 초과 할 수 있습니다 (쿼리가 클라이언트 -> 서버로 갈 수있는 최대 크기).

또한 mysqldump에서 생성 된 .sql 파일에는 여러 개의 쿼리가 들어 있음을 기억하십시오. PHP mysql 드라이버는 단일 query() 호출을 통해 하나 이상의 질의 문을 실행하는 것을 허용하지 않습니다. 덤프 파일을 개별 쿼리로 구문 분석하지 않으면 이런 방식으로 덤프를로드 할 수 없습니다.

관련 문제