在mysite1.com上运行的脚本中使用PHP和MySQL我试图将mysite2.com上的表中的所有行和列复制到mysite1.com上的相同表(已经创建)中。首先,我连接到两个数据库(我已经在mysite2.com上设置了远程MySQL连接)。
$con1 = mysql_connect("mysite1.com", "username1", "password1");
if (!$con1) {die('Could not connect: ' . mysql_error());}
mysql_select_db("database1", $con1);
$con2 = mysql_connect("mysite2.com", "username2", "password2");
if (!$con2) {die('Could not connect: ' . mysql_error());}
mysql_select_db("database2", $con2);
我无法弄清楚如何格式化“INSERT INTO”sql字符串,以便从mysite2.com获取数据并将其放入mysite1.com。有谁知道怎么做?
INSERT INTO my_table1 SELECT * FROM my_table2
答案 0 :(得分:4)
无法以你的思维方式完成。您可以设置federated table并从中进行复制。可能更简单,只需使用mysqldump,然后加载它创建的文件。
第三个选项是通过php读取数据并生成INSERT语句,但这是三个选项中最慢的。
答案 1 :(得分:2)
$con1 = mysql_connect("mysite1.com", "username1", "password1");
if (!$con1) {die('Could not connect: ' . mysql_error());}
mysql_select_db("database1", $con1);
$result = mysql_query('SELECT * FROM `some_table`', $con1);
$query = array();
while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
$query[] = '('.implode(',', $row).')';
}
$con2 = mysql_connect("mysite2.com", "username2", "password2");
if (!$con2) {die('Could not connect: ' . mysql_error());}
mysql_select_db("database2", $con2);
mysql_query('INSERT INTO `some_table` VALUES '.implode(',', $query).';', $con2);
答案 2 :(得分:2)
MySQL提供了一个迁移辅助工具来完成此任务。此功能现在可以折叠到Workbench中。
您可能还会考虑执行以下操作:
从mysql1连接到mysql1:
SELECT * FROM table INTO OUTFILE filename
从mysql1连接到mysql2:
LOAD DATA LOCAL INFILE filename INTO TABLE table
这将非常快,但如果您正在进行插入mysql1,它将不是一个完美的副本。
如果您需要这些以保持同步,复制绝对是答案。
答案 3 :(得分:1)
不能在不同服务器之间共享mysql连接句柄。它特别与您打开它的服务器绑定,而这就是它将保留的位置。
有几种选择。 bemace提到了联合表。还有replication。 在这两者中,复制可能是最容易维护的,尽管启动和运行有点痛苦。一旦启动,它将透明地处理复制表/数据库的所有更新,您不必担心它。
使用联合表时,您必须至少运行两次查询。一个用于“本地”表,一个用于每个“远程”表。而且你会遇到交易问题:它们在联合表上根本不受支持。
答案 4 :(得分:0)
您可以使用第三方数据库同步器,例如http://www.quest.com/toad-for-mysql/(免费)
答案 5 :(得分:0)
试试这个:
// origin
$dblink1=mysql_connect('mysite1.com', 'user1', 'password1');
mysql_select_db('db1', $dblink1);
// destination
$dblink2=mysql_connect('mysite2.com', 'user2', 'password2');
mysql_select_db('db2',$dblink2);
$res_from = mysql_query("show tables", $dblink1);
if($res_from === FALSE) {
die(mysql_error()); // for error handling
}
while($table = mysql_fetch_array($res_from)) {
echo($table[0] . "<br />"); // optional, only for show the name tables
$table=$table[0];
$tableinfo = mysql_fetch_array(mysql_query("SHOW CREATE TABLE $table ",$dblink1)); // retrieve table structure from mysite1.com
mysql_query(" $tableinfo[1] ",$dblink2); // use found structure to make table on mysite2.com
$res_to = mysql_query("SELECT * FROM $table ",$dblink1); // select all content from table mysite1.com
while ($row = mysql_fetch_array($res_to, MYSQL_ASSOC) ) {
$sql_error = "";
mysql_query("INSERT INTO $table (".implode(", ",array_keys($row)).") VALUES ('".implode("', '",array_values($row))."')",$dblink2); // insert one row into new table on mysite2.com`enter code here`
$sql_error = mysql_error($dblink2);
}
if ($sql_error) {
echo $sql_error;
}else {
echo "copy table ".$table." done.<br />";
}
flush();
}
mysql_close($dblink1);
mysql_close($dblink2);
重要!确保你有一个拥有mysite1.com mysql所有权限的用户 无论如何,你可以这样做: 创建用户'myuser'@'%'通过'mypassword'识别;全部授予 * 。*至myuser;