【问题标题】:How to synchronize two tables of different MySQL databases on the same machine?如何在同一台机器上同步不同MySQL数据库的两张表?
【发布时间】:2013-04-11 05:15:21
【问题描述】:

我有 2 个不同的数据库,比如说 db_one 和 db_two。每个人都有一张桌子。 db1_emp_companydb2_emp_info 分别。

结构如下:

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_infocontact_no(在db_two 中)。如果用户更新db1_emp_companyemp_email(在db_one 中),它应该更新db2_emp_infoemail_add(在db_two 中)。等等。

有可能吗?

【问题讨论】:

  • 在您更新database1.table的代码中,您还可以添加另一个查询以每次更新databas2.table
  • 我正在通过表单更新我的“database1.table”。
  • 是的,所以在某处形成actions 和一些PHP 代码通过任何查询更新您的database1.table,所以就在该行下方,您也可以更新您的database2.table
  • 感谢您的回复。请给我一个示例代码。
  • 嗯,是的,前提是您可以提供更新您的第一个数据库的代码

标签: php mysql codeigniter


【解决方案1】:

为此,您可以使用事务。

$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.";
}

如果一个查询失败,它将不允许另一个查询运行并回滚。这只是示例代码。您可以使用更新而不是插入。

【讨论】:

  • 如何在两个不同的主机名中使用它。请帮忙
  • @Jyoti 只定义两个独立的主机$mysql_host1 = DB_HOST1;$mysql_username1 = DB_USER;$mysql_password1 = DB_PASSWORD1;$mysql_database1 = DATABASE1;$mysql_host2 = DB_HOST1;$mysql_username2 = DB_USER;$mysql_password2 = DB_PASSWORD2;$mysql_database2 = DATABASE2;然后在需要插入的时候打开一个新的db连接数据到mysql_host2
【解决方案2】:

你可以这样做:

关于更新站点 1 中的 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;

如果您发布用于更新内容的代码。给出准确的答案会很有帮助。

【讨论】:

    【解决方案3】:

    你可以使用 mysqldiff 来解决这个问题。查看此页面:http://www.mysqldiff.org/index.php

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      相关资源
      最近更新 更多