如何将 MySQL 远程数据库表插入本地数据库表?
Posted
技术标签:
【中文标题】如何将 MySQL 远程数据库表插入本地数据库表?【英文标题】:How can I insert MySQL remote database table into local database table? 【发布时间】:2017-03-16 19:29:10 【问题描述】:远程服务器数据库(IP:192.168.1.19)
数据库名称:
RemoteDB
表名 :
RemoteTable
本地服务器数据库(IP:192.168.1.35)
数据库名称:
LocalDB
表名 :
LocalTable
MySQL 查询
INSERT INTO LocalDB.LocalTable SELECT * FROM RemoteDB.RemoteTable
但是,这个查询没有执行,因为不同的数据库连接。
如何从本地服务器(IP:192.168.1.35)执行此查询?或者任何 linux shell 命令?
【问题讨论】:
使用mysqldump
转储架构(如果您不想转储所有内容,请创建新架构并将表复制到该架构)。然后你就可以在同一个数据库上工作了。
你为什么要这样做?只需创建一个转储,然后将其插入本地系统
因为,每 30 分钟后我需要将 RemoteDB.RemoteTable
数据输入到 LocalDB.LocalTable
@LuciaAngermüller
我不想在同一个数据库上工作。 :(@PEMapModder
@SumonSarker 我仍然不知道你为什么需要这样做?应该没有理由这样做
【参考方案1】:
我将 CronJob 的批准答案转换为我的 PHP 脚本,如下所示 -
配置:
$remoteDbUser = '***';
$remoteDbPass = '***';
$remoteDbHost = '192.168.1.19';
$remoteDb = 'RemoteDB';
#$remoteDbTable = '';
$localDbHost = '192.168.1.35';
$localDbUser = '***';
$localDbPass = '***';
$localDb = 'LocalDB';
同步功能:
/*Passing `$remoteDbTable` name as function argument, Because I have many Remote DB table to synchronize with my Local DB table*/
function RemoteDbSynchronze($remoteDbTable='RemoteTable')
global $remoteDbUser,
$remoteDbPass,
$remoteDbHost,
$remoteDb,
$localDbHost,
$localDbUser,
$localDbPass,
$localDb;
$sql = sprintf(
"mysqldump -u%s -p%s -h%s %s %s --set-gtid-purged=OFF | mysql -h%s -u%s -p%s %s",
$remoteDbUser,
$remoteDbPass,
$remoteDbHost,
$remoteDb,
$remoteDbTable,
$localDbHost,
$localDbUser,
$localDbPass,
$localDb
);
shell_exec($sql);
从 Cron 脚本调用函数:
RemoteDbSynchronze('RemoteTable');
RemoteDbSynchronze('AnotherRemoteTable1');
RemoteDbSynchronze('AnotherRemoteTable2');
..........................................
RemoteDbSynchronze('AnotherRemoteTableN');
更多关于sprintf、shell_exec和Cron的细节
【讨论】:
感谢兄弟的分享。以后有时可能对我或其他人有帮助【参考方案2】:您的问题是使用 php 从不同的数据库中插入数据,不是吗?
如果你想同步它们,你可以阅读How to keep two MySQL databases in sync?
使用多个数据库中的php插入数据库很简单
$conn1= mysqli_connect($host1,$user1,$pass1);
mysqli_select_db($db1,$conn1);
$conn2= mysqli_connect($host2,$user2,$pass2);
mysqli_select_db($db2,$conn2);
$query=mysql_query("SELECT id,name from tbl_user", $conn1)
while ($row = mysqli_fetch_row($query))
mysqli_query("insert into tbl_user (id,name) values ('".$row[0]."', '".$row[1]."',$conn2);
【讨论】:
我不想要 2 个不同的连接实例。因为远程表有大量的数据。最低6,000,000 rows X 120 columns
:(
您要转储或插入?转储(如果存在,则必须先删除目标表)。插入(目标表必须存在)
如果你的数据和你说的一样大。您必须使用桌面应用程序。不要使用php。但我们仍然可以通过限制选择来破解它,而不是用 javascript 刷新它。或者也许使用 cronjob。 (我只是集思广益,因为从未使用网络应用程序这样做)
我刚刚发现了这个。也许可以帮助你wesbos.com/import-large-mysql-database-bigdump-php
谢谢!但我不想这样。我的问题现在解决了!【参考方案3】:
mysqldump -uRemoteusername -pRemotepassword -h192.168.1.19 RemoteDB RemoteTable --set-gtid-purged=OFF | mysql -h192.168.1.35 -uLocalname -pLocalpassword LocalDB
【讨论】:
我修复了远程服务器配置。现在你的答案对我有用。 :) 谢谢!以上是关于如何将 MySQL 远程数据库表插入本地数据库表?的主要内容,如果未能解决你的问题,请参考以下文章
postgresql - 计划将数据从 dblink 插入到本地表中
将Access数据库表中的记录一一插入/复制到MySQL远程数据库
在 localhost 上使用不同的端口号连接 mysql 表