2010-09-07 74 views
1

我有两个名为clients的表,它们完全相同,但在两个不同的db中。现在主人总是需要用第二个更新。所有数据应该始终保持一致,脚本每天运行一次。什么是最好的做到这一点。如何在mysql中同步两个数据库表PHP

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

$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 
    } 
} 

,然后我需要一个解决方案,以删除不掌握在第二台多数民众赞成旧数据。

任何建议帮助将appreaciated

回答

1

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

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

它会更快比用PHP做。

和你的通知:

只要mysql用户已经给出了正确的权限到数据从拉或推至所有数据库和表,这将工作。尽管mysql_select_db功能选择一个数据库,MySQL的声明可能引用另一个,如果你使用像databasename.tablename

2

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

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

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

希望这可以让你洞悉“另一种”做这个任务的方式。在触发器为MySQL

更多的参考资料:

0

不完全回答你的问题完整的参考,但如何只用1台,而不是2?你可以使用一个fedarated表来访问其它(如果这是在不同的MySQL实例),或者直接引用表(如shamittomar的建议)

0

如果两者在同一个MySQL实例,你可以很容易地使用view

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

就是这样!没有同步,没有cron作业,没有巫术:)

+0

并没有备份和没有分布式读取。我不认为这对大多数尝试这样做的人来说是一个实际的解决方案。但从技术上讲,它会起作用。 – 2010-09-07 14:45:58

相关问题