2016-07-20 3 views
0

У меня есть резервная копия, но теперь мне нужно восстановить эти данные в localhost j мой резервный диск - это C: \ wamp \ www \ мой проект для пешки \ backup_restore это мой код восстановления.как восстановить резервную копию mysql-файла в php

<?php 
include '../Connection/connect.php'; 
$restore_data = $_GET['restore_data'];//file time 
$base="http://localhost/my%20Pawning%20Project/backup_restore/"; 
$query = "select * from backups where time='$restore_data'"; 
    $result = mysql_query($query); 
    while ($row = mysql_fetch_array($result)) { 
     $file_path =$row['file_name']; 
    } 

$sql=file_get_contents($base.$file_path); 
mysql_query($sql); 

if(mysql_query($sql)) 
    { 
    /*Success*/ 
    echo "Successfully restored"; 
    } 
else 
    { 
    /*Fail*/ 
    echo "Error: Fail to Restore"; 
    } 
?> 
+1

Боковое примечание: вы не должны использовать функции mysql_ *. Подробнее здесь: http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php –

ответ

0

Вы бежите на восстановление запроса дважды

mysql_query($sql); 

if(mysql_query($sql)) 

Удалить 1-й и просто сделать:

if(mysql_query($sql)) 

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

  1. Выполнить mysql непосредственно и кормить его файл резервной копии (см ответ Пьера)
  2. Переход от mysql_ к MySQLi функций и использовать mysqli::multi_query (docs)
  3. Trnsform содержимое файла в массив запросов с explode(';',$sql) затем выполнять запросы на в то время с помощью цикла через Арай (будет медленным)
1

Вы можете использовать exec (или shell_exec) функции в PHP:

exec("mysql -hHost -uUsername -pPassword database < ~/backupdir/backupFile.sql") 
0

Вы не можете выполнить несколько операторов с PHP mysql_* запросов. Таким образом, вы должны сначала получить полный путь к файлу, который требуется использовать и выполнить SQL заявление:

$path = $base . $file_path; 
$query = "SOURCE $path" 

mysql_query($query); 
+0

Вы пробовали это? 'SOURCE' является встроенным клиентом MySQL. Вы не можете запускать его как запрос. –

+0

Это так? Если это, я удалю ответ. –

0

Если вы должны были использовать Mysqli (рекомендуемое над mysql_ *) можно использовать следующую

$sql = file_get_contents($file_location); 
if($conn->multi_query($sql)){ 
    while($conn->more_results() and $conn->next_result()){ 
     ; 
    } 
}; 
+0

Вы пробовали это? Как он обрабатывает встроенные команды клиента MySQL, такие как 'DELIMITER'? –

+0

Я использую это для установочного сценария, который я настроил для клиента, поэтому он работает для восстановления резервной копии mysqldump для проектов, которые мне нужны, но я не мог подтвердить ни один из способов команды DELIMITER. что нужно искать –

+0

Если у вас есть триггеры или хранимые процедуры в вашем mysqldump, разделитель должен измениться, так как точки с запятой встречаются внутри тела этих подпрограмм. Но 'multi_query()' не поддерживает встроенные команды клиента MySQL, такие как 'DELIMITER', поэтому этот метод не удастся. –

Смежные вопросы