如何在mysql PHP中同步两个数据库表

时间:2010-09-07 14:11:42

标签: php mysql

我有两个称为客户端的表,它们完全相同但在两个不同的数据库中。现在,主服务器总是需要使用辅助服务器进行更新。并且所有数据应始终相同,脚本每天运行一次。什么是最好的成就。

我有以下解决方案,但我想也许有更好的方法来做到这一点

$sql = "SELECT * FROM client";
$res = mysql_query($conn,$sql); 
while($row = mysql_fetch_object($res)){
    $sql = "SELECT count(*) FROM clients WHERE id={$row->id}";
    $res1 = mysql_query($connSecond,$sql);
    if(mysql_num_rows($res1) > 0){
       //Update second table
    }else{
       //Insert into second table
    }
}

然后我需要一个解决方案来删除第二个表中不在master中的所有旧数据。

任何建议帮助都会被证实

4 个答案:

答案 0 :(得分:2)

这绝不是你的PHP代码的答案,但你应该看看@ Mysql Triggers,你应该能够创建触发器(在更新/插入/删除)并有一个触发器(如存储过程)更新你的表。

关闭你给出的描述,我会创建一个触发器来检查第二个表的更改,然后将该更改写入主表,并从第二个表中删除该初始条目(如果需要)。 / p>

根据您定义的条件运行触发器。

希望这能让您深入了解执行此任务的“另一种”方式。

有关mysql触发器的更多参考:

答案 1 :(得分:1)

您可以像这样使用mysql INSERT ... SELECT(但首先是truncate目标表):

TRUNCATE TABLE database2.client;
INSERT INTO database2.client SELECT * FROM database1.client;

它比PHP更快。

并注意到:

  

只要mysql用户被赋予了从中拉出或推送数据的所有数据库和表的权限,这将是有效的。虽然mysql_select_db函数选择了一个数据库,但如果使用完整引用,如databasename.tablename

,则mysql语句可能引用另一个数据库

答案 2 :(得分:0)

不完全回答你的问题,但是如何使用1个表而不是2个?您可以使用fedarated表来访问另一个(如果它位于不同的mysql实例上)或直接引用该表(如shamittomar的建议)

答案 3 :(得分:0)

如果两者都在同一个MySQL实例上,您可以轻松使用view

CREATE VIEW database2.client SELECT * FROM database1.client;

就是这样!没有同步,没有cron工作,没有伏都教:)