Как скопировать все таблицы из одной базы данных в другую базу данных с помощью php? - PullRequest
0 голосов
/ 01 июня 2018

Мне нужно программно скопировать все значения таблицы из одной базы данных в другую. Я очень предпочитаю использовать php.Как мне добиться этого?

Я нашел определенный код:

$sql1 = "DELETE FROM Kunthanahali.justshawarma_aauth_groups;";
$result1 = $conn->query($sql1);

$sql2 = "INSERT INTO Kunthanahali.justshawarma_aauth_groups SELECT * FROM justshawarmapos.justshawarma_aauth_groups;";
$result2 = $conn->query($sql2);

Этот код работает нормально. Но проблема в том, что в моей базе данных около 50 таблиц. Есть ли способусекать вторую базу данных, создавать таблицы и копировать значения из первой базы данных?

Я знаю, что в phpmyadmin есть опция.Но я хочу сделать это программно. Я хочу достичь этого, потому что я создаю систему точек продаж, где система точек продаж присутствует на локальном хосте, а аналитика просматривается онлайн на веб-сайте. Мне нужно скопироватьтаблицы и их данные периодически в онлайн-базу данных.

Ответы [ 2 ]

0 голосов
/ 01 июня 2018

На мой взгляд, это не способ сделать это.Чтобы выполнить всю базу данных, нужно написать ее с помощью команды mysqldump.Чтобы создать резервную копию всей базы данных, вы должны сделать что-то вроде:

mysqldump --databases yourdb --password=pw | mysql -u user --password=pw otherdb

Существуют различные параметры и настройки, которые вам могут понадобиться или которые вам понадобятся, подробно описанные в этом сообщении в блоге .Например, это работает так же хорошо, как копирование баз данных между серверами mysql, если вы добавите параметр -h и сведения о хосте для удаленного хоста в часть команды mysql командной строки.

После сценария это достаточно просточтобы запустить этот тип скрипта из PHP с помощью системы или exec .

0 голосов
/ 01 июня 2018

Вы можете достичь этого, используя следующий код -

 <?php
$dblink1=mysql_connect('$ip1', '$user1', '$pass1'); // connect server 1

mysql_select_db('$database1',$dblink1);  // select database 1

$dblink2=mysql_connect('$ip2', '$user2', '$pass2'); // connect server 2 

mysql_select_db('$database2',$dblink2); // select database 2

$tables = mysql_fetch_array(mysql_query("SHOW TABLES  ",$dblink1));

//$table='tabletest';

foreach($tables as $table){

    $tableinfo = mysql_fetch_array(mysql_query("SHOW CREATE TABLE $table  ",$dblink1)); // get structure from table on server 1

    mysql_query(" $tableinfo[1] ",$dblink2); // use found structure to make table on server 2

    $result = mysql_query("SELECT * FROM $table  ",$dblink1); // select all content     

    while ($row = mysql_fetch_array($result, MYSQL_ASSOC) ) {       
       mysql_query("INSERT INTO $table (".implode(", ",array_keys($row)).") VALUES ('".implode("', '",array_values($row))."')",$dblink2); // insert one row into new table
    }

}

 mysql_close($dblink1); 
 mysql_close($dblink2);

НИЖЕ - версия mysqli -

<?php
$dblink1=mysqli_connect('127.0.0.1', 'root', ''); // connect server 1

mysqli_select_db($dblink1,'pdb1');  // select database 1

$dblink2=mysqli_connect('127.0.0.1', 'root', ''); // connect server 2   

mysqli_select_db($dblink2,'pdb4'); // select database 2

$tables = mysqli_fetch_array(mysqli_query($dblink1,"SHOW TABLES  "));

//$table='tabletest';

foreach($tables as $table){

    $tableinfo = mysqli_fetch_array(mysqli_query($dblink1,"SHOW CREATE TABLE $table  ")); // get structure from table on server 1

    mysqli_query($dblink2," $tableinfo[1] "); // use found structure to make table on server 2

    $result = mysqli_query($dblink1,"SELECT * FROM $table  "); // select all content        

    while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC) ) {     
       mysqli_query($dblink2,"INSERT INTO $table (".implode(", ",array_keys($row)).") VALUES ('".implode("', '",array_values($row))."')"); // insert one row into new table
    }

}

 mysqli_close($dblink1); 
 mysqli_close($dblink2);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...