Ошибка «Сервер MySQL исчез», я не думаю, что это тайм-аут - PullRequest
1 голос
/ 06 августа 2011

Я пытаюсь импортировать дамп SQL через PHP. У меня есть следующий код.

    @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, и он ничего не изменил, так что я думаю, что это может быть не так? У меня нет опыта работы с SQL, как я могу это исправить?

Вот пример для @chris:

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 ]

2 голосов
/ 06 августа 2011

Насколько велика эта свалка? Возможно, вы превысили предел max_allowed_packet (максимальный размер запроса клиента -> сервер).

Также помните, что файл .sql, созданный mysqldump, содержит несколько запросов. Драйверы PHP mysql не позволяют выполнять более одного запроса с помощью одного запроса (). Вы никогда не сможете загрузить дамп таким способом без разбора файла дампа на отдельные запросы.

2 голосов
/ 06 августа 2011

Найдено это :

Вот функция, которую я использовал для этой операции: Думаю, я выложу это только для тех, кому это нужно в будущем.

  • $ url - это путь к файлу sql
  • $ nowhost - это dbhost
  • $ nowdatabase - это дБ
  • $ nowuser - пользователь БД
  • $ nowpass is db pass

Код:

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);
     }
   }
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...