如何将 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 表

mysq将表数据导入文件并将文件从远程服务下载到本地

PHP将语句插入XAMPP MySQL数据库不会导致表更新[重复]

如何更快地将单个行插入 MySQL 表?