php - Codeigniter - 将 mysql 表同步到不同服务器上的不同数据库

标签 php mysql database codeigniter

我在不同的服务器上有两个数据库,我需要保持同步。这两个数据库在我的数据库配置中定义,我正在设置连接,如下所示:

$DB1 = $this->load->database('master', TRUE);
$DB2 = $this->load->database('live', TRUE);

如何获取 $DB1 上“产品”表的全部内容并在 $DB2 上同步它 - 我可以截断 $DB2 上的表并写入完整数据(不优雅,可能会导致实时站点出现问题)或者我可以使用 codeigniter 正确同步第二个表吗?逐条记录地添加、更新和删除记录?

我尝试过:

$products = $DB1->from('products')->get()->result_array();

$count = count($products);

for($i = 0 ; $i < $count; $i++)
{
     $q = $DB2->from('products')->where('id', $products[$i]['id'])->get();

     if($q->num_rows() > 0)
     {
           [Update the data]
     } 
     else
     {
           [Insert the data]
     }
}

但是这个方法没有考虑$DB2上存在的、已经从$DB1中删除的记录?我更喜欢这种更新产品的方法,但实时网站上不能有寡居的产品。

最佳答案

MySQL 的复制功能可以解决您的所有问题。

由于您的两个数据库都应该是可写的,并且所有更改都应该复制到相应的其他服务器,因此您可能需要设置主主复制。您可以在互联网上找到有关此主题的教程,例如 this one .

请记住,这不是一个简单的解决方案。能够写入需要同步的两个数据库可能会导致冲突(在基于脚本的解决方案中也会出现冲突)。您可能需要采取措施来确保两个数据库在它们之间的连接断开时不会彼此相差太大。您可能还需要设置 auto_increment_incrementauto_increment_offset ( see the manual on this topic ) 以避免自动增量列中可能出现的重复项。

如果您使用上面的自动增量设置,请注意,这也会“更改”自动增量列的语义。到目前为止,您有一列,您可以对结果集进行ORDER BY,以使结果集按插入时间顺序排序。如果您指定不同的偏移量,这将不起作用。一台服务器插入 id=1 的行可能晚于另一台服务器插入 id=6 的行。所有 ORDER BY id 形式的查询都需要更改为例如ORDER BY insert_date(insertion_date 是包含该行插入时间时间戳的列)。

关于php - Codeigniter - 将 mysql 表同步到不同服务器上的不同数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22092695/

相关文章:

mongodb - 与关系数据库相比,使用像 MongoDB 这样的无模式数据库有什么优势?

php - sql 只在 mysql 中有效,在 php 中无效

php - 如何从 mySQL 和 PHP 中的两个表添加数据?

mysql - 如何存储我的网络应用程序的指标?

php - 文件上传不工作

mysql - 如何折叠这个嵌套的 MySQL 查询?

database - 数据库分析架构

php - 如何正确设计这些类?

php - 根据 PHP 的受欢迎程度显示帖子的最佳方法是什么?

php - PHP 中 "not equal"运算符 <> 和 != 之间的区别