2016-11-03 105 views
2

遠程數據庫服務器(IP:192.168.1.19)如何將MySQL遠程數據庫表插入本地數據庫表中?

數據庫名稱: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命令?

+1

使用'mysqldump'轉儲模式(創建新模式,你的表複製到該架構,如果你不想拋售一切)。然後你可以在同一個數據庫上工作。 – SOFe

+2

你爲什麼要這樣做?只需創建一個轉儲,然後將其插入本地系統 –

+0

因爲每隔30分鐘我需要'RemoteDB.RemoteTable'數據到'LocalDB.LocalTable' @LuciaAngermüller –

回答

2
mysqldump -uRemoteusername -pRemotepassword -h192.168.1.19 RemoteDB RemoteTable --set-gtid-purged=OFF | mysql -h192.168.1.35 -uLocalname -pLocalpassword LocalDB 
+0

它不能從shell命令中運行。 :( –

+0

@Sumon Sarker什麼是錯誤信息? – chenyb999

+0

這裏是錯誤http://pastebin.com/raw/21nHGjMZ –

1

你的問題是從不同的數據庫插入數據使用PHP,是嗎?

,如果你想synconize他們,你可以閱讀本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); 
} 
+0

我不想要2個不同的連接實例。因爲遠程表有大量的數據。最小'6,000,000行X 120列':( –

+0

要轉儲或插入?dump(目標表必須被刪除firstif存在)。insert(目標表必須存在) – plonknimbuzz

+1

如果你的數據和你說的一樣大,你必須使用桌面應用程序,不使用php,但我們仍然可以用限制選擇黑客,而不是使用javascript刷新它,或者使用cronjob(我只是頭腦風暴,因爲這樣做使用web應用程序) – plonknimbuzz

2

我轉換的批准答案的cronjobPHP腳本如下 -

配置:

$remoteDbUser = '***'; 
$remoteDbPass = '***'; 
$remoteDbHost = '192.168.1.19'; 
$remoteDb  = 'RemoteDB'; 
#$remoteDbTable = ''; 
$localDbHost = '192.168.1.35'; 
$localDbUser = '***'; 
$localDbPass = '***'; 
$localDb  = 'LocalDB'; 

同步功能:從cron腳本

/*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); 
} 

調用函數:

RemoteDbSynchronze('RemoteTable'); 
RemoteDbSynchronze('AnotherRemoteTable1'); 
RemoteDbSynchronze('AnotherRemoteTable2'); 
.......................................... 
RemoteDbSynchronze('AnotherRemoteTableN'); 

更多細節,shell_execCron

+0

感謝兄弟分享。它可能對我或其他人來說有時候是後遺症 – plonknimbuzz

+0

不客氣! @plonknimbuzz –

相關問題