2014-09-08 4 views
0

Я пытаюсь создать резервный скрипт с PHP и MySQL, но у меня есть некоторые проблемы. Это то, что я сделал до сих пор:Как создать резервную копию для базы данных

$sql="SHOW DATABASES"; 
$query=mysql_query($sql,$connect); 
$num_rows=mysql_num_rows($query); 
echo "Baze de date:".$num_rows;  

while ($row = mysql_fetch_assoc($query)) { 
    $sql2="SHOW TABLES FROM ".$row['Database']; 
    $query2=mysql_query($sql2, $connect); 
    echo "<h3>".mysql_num_rows($query2)." Tabele in: ".$row['Database']."</h3>"; 

    while($row2 = mysql_fetch_assoc($query2)) { 
     foreach($row as $rand) { 
      $sql3="CREATE DATABASE `'$rand'_backup"; 
      $query3=mysql_query($sql3,$connect); 
      foreach($row2 as $rand2) { 
       $sql4="CREATE TABLE `'$sql3'_backup`.`'$rand2'` SELECT * FROM `'$rand'`.`'$rand2'`";   
       $query4=mysql_query($sql4,$connect); 
      } 
     } 
    }   
} 

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

Любая идея о том, что, по-видимому, является проблемой?

EDIT: Я знаю, что mysql устарел, но я должен его использовать.

+0

используя mysql_ * функции. Они устарели. Вы должны прочитать руководство php о mysqli или pdo. –

+0

Я знаю это, но мне нужно использовать mysql – Memphistoles

+0

Знаете ли вы о mysqldump? Поскольку вы все-таки сбрасываете каждую базу данных и каждую таблицу, я не вижу смысла, почему бы не использовать ее. – fancyPants

ответ

1

Все, что вы хотите взять резервную копию базы данных. Ниже команды должны сделать для вас работу.

В Linux

/usr/bin/mysqldump -u{USERNAME} -p -h{HOST_NAME} {DATABSE_NAME} > {FILE_NAME}.sql 

На окнах

C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqldump -u{USERNAME} -p -h{HOST_NAME} {DATABSE_NAME} > {FILE_NAME}.sql 

Попробуйте ниже фрагмент кода, чтобы исправить сценарий:

$sql = "SHOW DATABASES"; 
$query = mysql_query($sql, $connect); 
$num_rows = mysql_num_rows($query); 
echo "Baze de date:" . $num_rows; 
while ($row = mysql_fetch_assoc($query)) { 
    $sql2 = "SHOW TABLES FROM " . $row['Database']; 
    $query2 = mysql_query($sql2, $connect); 
    echo "<h3>" . mysql_num_rows($query2) . " Tabele in: " . $row['Database'] . "</h3>"; 

    $sql3 = "CREATE DATABASE `".$row['Database']."_backup`"; 
    echo '<br> $sql3 = > ' . $sql3 . "<br><hr />"; 
    $query3=mysql_query($sql3,$connect); 

    while ($row2 = mysql_fetch_assoc($query2)) { 
     foreach ($row2 as $rand2) { 
      $sql4 = "CREATE TABLE `".$row['Database']."_backup`.`".$rand2."` SELECT * FROM `".$row['Database']."`.`$rand2`"; 
      echo '<br> $sql4 = > ' . $sql4 . "<br><hr />"; 
      $query4=mysql_query($sql4,$connect); 
     } 
    } 
} 
+0

Вы читали мое сообщение по крайней мере? это далеко от того, что я просил – Memphistoles

+1

Я обновил ответ, любезно взгляните на него. –

+0

благодарит много, что это сработало. Еще один вопрос, который у меня есть для вас, если я могу спросить. Давайте возьмем в качестве примера, если я создам резервные копии баз данных 3 раза, и я хочу отказаться от старейших 2 после времени, как мне это сделать Это? – Memphistoles

0

Не используйте $row['Database'], а скорее mysql_fetch_row() с числовым индексом 0.

+0

Я использовал строку [database] только для того, чтобы отобразить db в браузере, чтобы увидеть, работает ли она. Если вы внимательно посмотрите, я использовал $ row и $ row2 var, содержащий mysql_fetch_assoc. – Memphistoles

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