Как скопировать таблицы базы данных и каждую запись с одного сервера базы данных на другой сервер базы данных в PHP MYSQL?> - PullRequest
2 голосов
/ 24 ноября 2010

Привет, я написал код, который может копировать таблицу базы данных с одного сервера на другой, но запись каждой таблицы не копирует, как написать функцию, которая может копировать таблицы и каждую запись с одного сервера БД на другой?

вот мой пример кода:

<?php
$dbNewDB = 'newdb';
$dbNewUser = 'newroot';
$dbNewUserPswd = 'newpass';

$dbConnect = mysql_connect('localhost', 'root', 'mypassword') or die('Couldn\'t connect to MySql:'.mysql_error());
$dbNewConnect = mysql_connect('localhost', $dbNewUser, $dbNewUserPswd) or die('Couldn\'t connect to MySql:'.mysql_error());

$sqlStatement = "SHOW TABLES FROM olddb";
$result = mysql_query($sqlStatement,$dbConnect) or die('Unable to get tables: '.mysql_error());
while($row = mysql_fetch_row($result)) 
    {
        //Drop table if exist
        $sqlStatement = "DROP TABLE IF EXISTS " . $dbNewDB . "." . $row[0];
        mysql_query($sqlStatement,$dbNewConnect) or die("Failed to delete: " . mysql_error());
        //Create new table
        $sqlStatement = "CREATE TABLE " . $dbNewDB . "." . $row[0] . " LIKE olddb." . $row[0];
        echo "$sqlStatement [" . __METHOD__ . "]"; 
        mysql_query($sqlStatement,$dbNewConnect)or die("Failed to create: ". mysql_error());
        //Insert data
        $sqlStatement = "INSERT INTO " . $dbNewDB . "." . $row[0] . " SELECT * FROM " . $dbNewDB . "." . $row[0];
        echo "$sqlStatement [" . __METHOD__ . "]"; 
        mysql_query($sqlStatement,$dbNewConnect)or die("Table copy failed: ".mysql_error());
        echo "$row[0] copy done. [" . __METHOD__ . "]"; 
    }

mysql_free_result($result);
mysql_close($dbConnect);
mysql_close($dbNewConnect);

?> 

мой код уже работает Все, что я хочу исправить, чтобы скопировать записи каждой таблицы. Есть идеи или помощь?

Спасибо!

Ответы [ 5 ]

5 голосов
/ 24 ноября 2010

Вы можете вывести всю базу данных в формате SQL следующим образом:

mysqldump --user=root --password=whatever --databases dbtest --opt --quote-names --complete-insert > testbkup.sql

Затем вы можете импортировать ее обратно так:

mysql -u root -p whatever dbtest < testbkup.sql

(Примечание: пользователь = root, пароль = что угодно, dbtest - ваша база данных.)

Просто говорю.

4 голосов
/ 27 ноября 2012

Я обнаружил, что эти скрипты работают, вы можете попробовать это:

<?php
$connect2 = mysql_connect("localhost", "root", "");
$database1 = "test1"; // destination database
mysql_select_db($database1, $connect2);
set_time_limit(0);

$database = 'dev_loribonn'; //original database
$connect = mysql_connect("localhost", "root", "");

mysql_select_db($database, $connect);

$tables = mysql_query("SHOW TABLES FROM $database");

while ($line = mysql_fetch_row($tables)) {
    $tab = $line[0];
    mysql_query("DROP TABLE IF EXISTS $database1.$tab");
    mysql_query("CREATE TABLE $database1.$tab LIKE $database.$tab") or die(mysql_error());
    mysql_query("INSERT INTO $database1.$tab SELECT * FROM $database.$tab");
    echo "Table: <b>" . $line[0] . " </b>Done<br>";
}
?>
2 голосов
/ 24 ноября 2010

Примечание: если вы просто копируете всю таблицу из одной базы данных в другую, вы можете сделать все это одним SQL-запросом.

CREATE TABLE `backup_db.backup_table` SELECT * FROM `live_db.live_table`; 

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

Редактировать: Woops, не видел несколько соединений БД.

0 голосов
/ 24 ноября 2010

Вы можете использовать sql yog для переноса таблиц на другой хост без написания кода в php.

0 голосов
/ 24 ноября 2010

Ваш оператор вставки выглядит не так. Попытка вставить в $ dbNewDB ваши значения из dbNewDB. Вы должны обратиться к старой базе данных. Ниже я строю два жала для вставки. $ string1 = '(col1name, col2name ...,)' $ string2 = '(val1-1, val1-2, ...), (val2-1, val2-2, ...), ...' для "INSERT INTO table $ string1 VALUES $ string2"

    //Insert data 

    $sql2 = "SELECT * FROM " . $row[0];
    $r = mysql_query($sql, $bConnect);
    $string1 = '('; $arr = array();
    while ($irow = mysql_fetch_assoc($r)) {$arr[] = $irow;}
    foreach($irow as $k=>$v)
    {
         $string1 .= "$k,";
    }
    $string1 = substr($string1, 0, -1) //lose last comma
    $string1 .= ')';
    $string2 = array_reduce($f, $arr); 
    $string2 = substr($string2, 0, -1) //lose last comma


    $sqlStatement = "INSERT INTO " . $dbNewDB . "." . $row[0] . " $string1 VALUES $string2";
    echo "$sqlStatement [" . __METHOD__ . "]";  
    mysql_query($sqlStatement,$dbNewConnect)or die("Table copy failed: ".mysql_error()); 
    echo "$row[0] copy done. [" . __METHOD__ . "]";  

объявить $ f в другом месте

$f = function($b, $x) {$a = ' ('; foreach($x as $v) {$a .= "'$v',";} $a = substr($a, 0, -1); $a .= ')'; return "$b $a,";}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...