резервное копирование таблиц mysql с php

Я хотел бы делать резервные копии таблиц (with PHP) из db, если префикс таблицы соответствует подстроке. То, что я пытался и не работает

 error_reporting(1); $dbname = 'wp_dev'; if (!mysql_connect('127.0.0.1', 'root', '')) { echo 'Connection Error'; exit; } $sql = "SHOW TABLES FROM $dbname LIKE 'wp_%'"; $result = mysql_query($sql); if (!$result) { echo "DB tables could not be listed\n"; echo 'MySQL Fehler: ' . mysql_error(); exit; } while ($row = mysql_fetch_row($result)) { echo "<pre>Table: {$row[0]}\n</pre>"; system( 'mysqldump $dbname $row[0] > verlag_$row[0].sql'); } mysql_free_result($result); 

Вот функция для создания bakups из db или только для некоторых таблиц

 function &backup_tables($host, $user, $pass, $name, $tables = '*'){ $data = "\n/*---------------------------------------------------------------". "\n SQL DB BACKUP ".date("dmY H:i")." ". "\n HOST: {$host}". "\n DATABASE: {$name}". "\n TABLES: {$tables}". "\n ---------------------------------------------------------------*/\n"; $link = mysql_connect($host,$user,$pass); mysql_select_db($name,$link); mysql_query( "SET NAMES `utf8` COLLATE `utf8_general_ci`" , $link ); // Unicode if($tables == '*'){ //get all of the tables $tables = array(); $result = mysql_query("SHOW TABLES"); while($row = mysql_fetch_row($result)){ $tables[] = $row[0]; } }else{ $tables = is_array($tables) ? $tables : explode(',',$tables); } foreach($tables as $table){ $data.= "\n/*---------------------------------------------------------------". "\n TABLE: `{$table}`". "\n ---------------------------------------------------------------*/\n"; $data.= "DROP TABLE IF EXISTS `{$table}`;\n"; $res = mysql_query("SHOW CREATE TABLE `{$table}`", $link); $row = mysql_fetch_row($res); $data.= $row[1].";\n"; $result = mysql_query("SELECT * FROM `{$table}`", $link); $num_rows = mysql_num_rows($result); if($num_rows>0){ $vals = Array(); $z=0; for($i=0; $i<$num_rows; $i++){ $items = mysql_fetch_row($result); $vals[$z]="("; for($j=0; $j<count($items); $j++){ if (isset($items[$j])) { $vals[$z].= "'".mysql_real_escape_string( $items[$j], $link )."'"; } else { $vals[$z].= "NULL"; } if ($j<(count($items)-1)){ $vals[$z].= ","; } } $vals[$z].= ")"; $z++; } $data.= "INSERT INTO `{$table}` VALUES "; $data .= " ".implode(";\nINSERT INTO `{$table}` VALUES ", $vals).";\n"; } } mysql_close( $link ); return $data; } 

Как использовать:

 // create backup ////////////////////////////////////// $backup_file = 'db-backup-'.time().'.sql'; // get backup $mybackup = backup_tables("myhost","mydbuser","mydbpasswd","mydatabase","*"); // save to file $handle = fopen($backup_file,'w+'); fwrite($handle,$mybackup); fclose($handle); 

Вы можете изменить строку:

$ result = mysql_query ("SHOW TABLES");

для таблицы präfix

Отлично. Благодарю. Сделал несколько незначительных изменений, поэтому я могу сделать один стол, две или более таблиц. Использовать как для ВСЕХ таблиц.

Для ОДНОЙ таблицы $ mybackup = backup_tables («имя_хоста», «имя_пользователя», «пароль», «имя_базы», ​​«имя_таблицы»);

более двух или более таблиц $ mybackup = backup_tables («имя_хоста», «имя_пользователя», «пароль», «имя_базы», ​​«table_name1, table_name2 и т. д.»);

Затем используйте эту функцию & backup_tables ($ host, $ user, $ pass, $ name, $ tables)

Я создал простые функции openDb () и получил ($ SQL) для открытия баз данных и выполнения запросов PHP mysql. Могут быть случаи, когда копия по строкам является более полезной, но вы также можете использовать ее, если она работает (используя мои простые функции выше):

  openDb($db,$user,$pw); get("CREATE TABLE `TABLE1_backup` LIKE `TABLE1`"); get("INSERT INTO `TABLE1_backup` (SELECT * FROM `TABLE1`)"); 

(NB) Это описание скелета. При необходимости добавьте DROP и т. Д. «Get» возвращает T / F в зависимости от успеха, поэтому для его отладки может потребоваться проверка на false и предоставление MySQLi_ERROR)

и с poo

 <?php //backup //function &backup_tables($host, $user, $pass, $name, $tables = '*'){ function &backup_tables($host, $user, $pass, $name, $tables){ $data = "\n/*---------------------------------------------------------------". "\n SQL DB BACKUP ".date("dmY H:i")." ". "\n HOST: {$host}". "\n DATABASE: {$name}". "\n TABLES: {$tables}". "\n ---------------------------------------------------------------*/\n"; include "connexion.php"; $myquery="SET NAMES `utf8` COLLATE `utf8_general_ci`"; $result = $mylink->query($myquery); if($tables == '*'){ //get all of the tables $tables = array(); $myquery="SHOW TABLES"; $result = $mylink->query($myquery); while($row = mysqli_fetch_row($result)){ $tables[] = $row[0]; } }else{ $tables = is_array($tables) ? $tables : explode(',',$tables); } foreach($tables as $table){ $data.= "\n/*---------------------------------------------------------------". "\n TABLE: `{$table}`". "\n ---------------------------------------------------------------*/\n"; $data.= "DROP TABLE IF EXISTS `{$table}`;\n"; $myquery="SHOW CREATE TABLE `{$table}`"; $result = $mylink->query($myquery); $row = $result->fetch_row(); $data.= $row[1].";\n"; $myquery="SELECT * FROM `{$table}`"; $result = $mylink->query($myquery); $num_rows = $result->num_rows; if($num_rows>0){ $vals = Array(); $z=0; for($i=0; $i<$num_rows; $i++){ $items = mysqli_fetch_row($result); $vals[$z]="("; for($j=0; $j<count($items); $j++){ if (isset($items[$j])) { $vals[$z].= "'".$mylink->real_escape_string($items[$j]) ."'"; } else { $vals[$z].= "NULL"; } if ($j<(count($items)-1)){ $vals[$z].= ","; } } $vals[$z].= ")"; $z++; } $data.= "INSERT INTO `{$table}` VALUES "; $data .= " ".implode(";\nINSERT INTO `{$table}` VALUES ", $vals).";\n"; } } $mylink->close(); return $data; } //*********** // called by : $backup_file = 'db-backup-'.time().'.sql'; // get backup $host = "yourhost"; $user = "youruser"; $pass = "your_pw"; $name = "your base"; $tables= 'your_table'; $mybackup = backup_tables($host,$user,$pass,$name,$tables); // save to file $handle = fopen($backup_file,'w+'); fwrite($handle,$mybackup); fclose($handle); //affichage des résultats, pour savoir si la modification a marchée: echo("La sauvegarde à été correctement effectuée") ; ?> where connection.php is : <?php $mylink = new mysqli("host", "user", "pw", "base"); if ($mylink->connect_errno) { echo "Echec lors de la connexion à MySQL : " . $mylink->connect_error; exit(); } 
 //change to the function provided by markus to support new php versions: function &backup_tables($host, $user, $pass, $name, $tables = '*'){ $data = "\n/*---------------------------------------------------------------". "\n SQL DB BACKUP ".date("dmY H:i")." ". "\n HOST: {$host}". "\n DATABASE: {$name}". "\n TABLES: {$tables}". "\n ---------------------------------------------------------------*/\n"; $link = mysqli_connect($host,$user,$pass); mysqli_select_db($link,$name); mysqli_query( $link,"SET NAMES `utf8` COLLATE `utf8_general_ci`" ); // Unicode if($tables == '*'){ //get all of the tables $tables = array(); $result = mysqli_query($link, "SHOW TABLES"); while($row = mysqli_fetch_row($result)){ $tables[] = $row[0]; } }else{ $tables = is_array($tables) ? $tables : explode(',',$tables); } foreach($tables as $table){ $data.= "\n/*---------------------------------------------------------------". "\n TABLE: `{$table}`". "\n ---------------------------------------------------------------*/\n"; $data.= "DROP TABLE IF EXISTS `{$table}`;\n"; $res = mysqli_query($link, "SHOW CREATE TABLE `{$table}`"); $row = mysqli_fetch_row($res); $data.= $row[1].";\n"; $result = mysqli_query($link, "SELECT * FROM `{$table}`"); $num_rows = mysqli_num_rows($result); if($num_rows>0){ $vals = Array(); $z=0; for($i=0; $i<$num_rows; $i++){ $items = mysqli_fetch_row($result); $vals[$z]="("; for($j=0; $j<count($items); $j++){ if (isset($items[$j])) { $vals[$z].= "'".mysqli_real_escape_string($link, $items[$j])."'"; } else { $vals[$z].= "NULL"; } if ($j<(count($items)-1)){ $vals[$z].= ","; } } $vals[$z].= ")"; $z++; } $data.= "INSERT INTO `{$table}` VALUES "; $data .= " ".implode(";\nINSERT INTO `{$table}` VALUES ", $vals).";\n"; } } mysqli_close( $link ); return $data; }