2013-04-11 103 views
0

我有2個不同的數據庫,比方說db_one和db_two。每個人都有一張桌子。分別爲db1_emp_companydb2_emp_info如何在同一臺機器上同步不同MySQL數據庫的兩個表?

結構如下:

db_one   | db_two 
__________________________________ 
db1_emp_company | db2_emp_info 
__________________________________ 
phone_no   | contact_no 
emp_email  | email_add 
home_address  | address 

這兩個數據庫是由兩個不同的PHP的網站在同一臺服務器上託管。

我想同步這兩個不同數據庫的表。例如,如果用戶更新db1_emp_companyphone_no(在db_one中),它應更新db2_emp_info(在db_two中)的contact_no。如果用戶更新db1_emp_companyemp_email(在db_one中),它應該更新email_adddb2_emp_info(在db_two中)。等等。

可能嗎?

+1

在你更新'database1.table'的代碼中,你也可以添加另一個查詢來每次更新'databas2.table' – 2013-04-11 05:16:50

+0

我通過表單更新我的'database1.table'。 – 2013-04-11 05:19:02

+1

是的,這樣就可以在某處形成'action',一些PHP代碼通過任何查詢更新你的database1.table,所以在該行的下面你可以更新你的'database2.table'以及 – 2013-04-11 05:19:52

回答

0

爲此目的,您可以使用交易。

$mysql_host     = DB_HOST; 
$mysql_username    = DB_USER; 
$mysql_password    = DB_PASSWORD; 
$mysql_database1   = DATABASE1; 
$mysql_database2   = DATABASE2; 

$mysqli = new mysqli($mysql_host, $mysql_username, $mysql_password) or die(mysql_error()); 

/* Begin Transaction */ 
$mysqli->autocommit(FALSE); 


/* Insert data from db1 to db2 */ 
$query = " INSERT INTO $mysql_database1.table1"; 

$a = $mysqli->query($query); 

$query = " INSERT INTO $mysql_database1.table2 
      SELECT 
       * 
      FROM $mysql_database2.table2 
      WHERE NOT EXISTS(SELECT * from $mysql_database1.table2)  
"; 
$d = $mysqli->query($query); 


if ($a and $b) 
{ 
    $mysqli->commit();  
    echo "Data synched successfully."; 
} else {   

    $mysqli->rollback();   
    echo "Data failed to synch."; 
} 

如果一個查詢失敗,它將不允許另一個查詢運行並回滾。這只是示例代碼。您可以使用更新而不是插入。

+0

如何使用這兩個不同的主機名。請幫忙 – Jyoti 2017-11-18 15:23:30

0

你可以這樣做:

論site1的更新db_one表:

update `db_one`.`db1_emp_company` set phone_no = '1234567890' where conditions_here; 
update `db_two`.`db2_emp_info` set contact_no = '1234567890' where conditions_here; 

同樣的事情在db_two

update `db_two`.`db2_emp_info` set contact_no = '1234567890' where conditions_here; #Its a same thing as above 
update `db_one`.`db1_emp_company` set phone_no = '1234567890' where conditions_here; 

如果您發佈的代碼,用於更新的東西。給出確切的答案將會有所幫助。

相關問題