我对 MySQL 复制的功能有相当好的感觉。我想知道还有哪些其他数据库支持复制,以及它们与 MySQL 和其他数据库相比如何?

我的一些问题是:

  1. 复制是内置的还是附加组件/插件?
  2. 复制是如何工作的(高级)?MySQL 提供基于语句的复制(5.1 中提供基于行的复制)。我对其他数据库的比较感兴趣。什么通过电汇运输?如何将更改应用到副本?
  3. 检查主从之间的一致性是否容易?
  4. 让发生故障的副本恢复与主服务器同步有多容易?
  5. 表现?我讨厌 MySQL 复制的一件事是它是单线程的,并且副本通常难以跟上,因为主服务器可以并行运行许多更新,但副本必须串行运行它们。其他数据库中是否有类似的问题?
  6. 还有其他有趣的功能吗...
有帮助吗?

解决方案

MySQL 的复制很弱,因为需要牺牲其他功能才能获得完整的主/主支持(由于受支持的后端的限制)。

PostgreSQL 的复制能力较弱,因为仅内置支持主备(使用日志传送);更强大的解决方案(例如 Slony 或 Londiste)需要附加功能。归档日志段通过网络传输,这些记录与用于确保独立数据库在不干净启动时处于工作、一致状态的记录相同。这就是我目前正在使用的,我们已经完全自动化了重新同步(以及设置和其他功能)。这些方法都不是完全同步的。从 PostgreSQL 8.5 开始将内置更完整的支持。日志传送不允许数据库不同步,因此不需要进程来测试同步状态;使两个数据库恢复同步涉及在主数据库上设置备份标志,然后同步到从数据库(数据库仍在运行;这是安全的),并使用备份过程中生成的可用归档日志取消备份标志(并重新启动从属进程);我的商店已经自动化了这个过程(就像所有其他管理任务一样)。性能不是问题,因为主服务器除了执行其他工作外,还必须在内部重播日志段;因此,从属设备的负载始终低于主控设备。

Oracle 的 RAC(这不是正确的复制,因为只有一个存储后端,但有多个前端共享负载,并且可以在共享存储后端本身中构建冗余,因此这里值得一提)是多主机方法比其他解决方案更全面,但 极其 昂贵的。数据库内容不是“通过网络传输”;而是“通过网络传输”。相反,它们被存储到共享后端,所有涉及的系统都可以访问该后端。由于只有一个后端,系统不会不同步。

Continuoust 提供了第三方解决方案,该解决方案可进行完全同步的语句级复制,并支持上述所有三个数据库;然而,其产品的商业支持版本并不是特别便宜(尽管便宜得多。上次我管理它时,Continentt 的解决方案需要手动干预才能使集群恢复同步。

其他提示

我对 MS-SQL 2005(发布者)和 SQLEXPRESS(订阅者)以及海外合并复制有一些经验。以下是我的评论:

1 - 复制是内置的还是附加组件/插件?

内置

2-复制如何工作(高级)?

不同的复制方式,从快照(在订阅者级别提供静态数据)到事务复制(每个 INSERT/DELETE/UPDATE 指令在所有服务器上执行)。合并复制仅复制最终更改(在复制期间将立即对同一记录进行连续更新)。

3 - 检查主从之间的一致性是否容易?

我从来没有做过的事...

4 - 让发生故障的副本恢复与主服务器同步有多容易?

基本的重新同步过程只需双击......但是,如果您有 4Go 的数据需要通过 64 Kb 连接重新初始化,那么除非您对其进行自定义,否则这将是一个漫长的过程。

5 - 性能?

出色地 ...当然,你会在某个地方遇到瓶颈,比如你的连接性能、数据量,或者最终是你的服务器性能。在我的配置中,用户仅写入订阅者,所有订阅者都使用主数据库 = 发布者进行复制。该服务器永远不会被最终用户请求,并且其 CPU 严格专用于数据复制(到多个服务器)和备份。订阅者专用于客户端和一个复制(发布者),这在最终用户的数据可用性方面给出了非常有趣的结果。发布者和订阅者之间的复制可以一起启动。

6 - 任何其他有趣的功能...

带着某种预期,甚至可以在不停止复制过程的情况下继续开发数据库......表(以间接方式)、字段和规则可以添加并复制给您的订阅者。

具有主发布者和​​多个订阅者的配置可能非常便宜(与其他一些相比......),因为即使在运行合并或事务复制时,您也可以在订阅者端使用免费的 SQLEXPRESS

只需添加 SQL Server 的选项(尤其是 SQL 2008,它现在具有更改跟踪功能)。需要考虑的是 同步框架 来自微软。这里有一些选项,从基本的中心辐射型架构(如果您有一个中央服务器和有时连接的客户端就非常有用),一直到点对点同步(这使您能够执行更高级的操作)与多个“主”数据库同步。

您可能想要考虑这种方式而不是传统复制的原因是您可以通过代码进行更多控制,例如,您可以在同步进度期间获取更新/更新、更新/删除、删除/更新、插入/插入冲突的事件并根据业务逻辑决定如何解决它们,并在需要时将冲突失败者的数据存储在某处以供手动或自动处理。看一下 本指南 帮助您决定不同的复制和/或同步方法的可能性。

对于敏锐的程序员来说,同步框架足够开放,您可以让客户端通过 WCF 连接到 WCF 服务,该服务可以抽象任何后端数据存储(我听说有些人正在尝试使用 Oracle 作为后端)。

我的团队刚刚发布了一个大型项目,该项目涉及多个 SQL Express 数据库,通过 WAN 和 Internet(某些情况下拨号连接速度较慢)同步中央 SQL Server 数据库的数据子集,并取得了巨大成功。

MS SQL 2005标准版及以上版本具有出色的复制功能和工具。看一眼:

http://msdn.microsoft.com/en-us/library/ms151198(SQL.90).aspx

可以说是相当有能力了。您甚至可以使用 SQL Server Express 作为只读订阅者。

数据库调用复制有很多不同的事情。并非所有这些实际上都涉及复制,而且那些确实以截然不同的方式工作的。一些数据库支持多种不同的类型。

MySQL 支持异步复制,这对于某些事情来说非常好。然而,也有弱点。基于语句的复制与大多数(任何?)其他数据库所做的不同,并且并不总是产生预期的行为。基于行的复制仅受非生产就绪版本支持(但与其他数据库的做法更一致)。

每个数据库都有自己的复制方式,有些数据库涉及插入其他工具。

有点偏离主题,但您可能想检查 Maatkit 是否有工具来帮助进行 MySQL 复制。

所有主要的商业数据库都有不错的复制——但有些比其他的更不错。IBM Informix Dynamic Server(版本 11 及更高版本)特别好。它实际上有两个系统 - 一个用于高可用性(HDR - 高可用性数据复制),另一个用于分发数据(ER - 企业复制)。Mach 11 功能(RSS - 远程独立辅助功能和 SDS - 共享磁盘辅助功能)也非常出色,在 11.50 中更是如此,您可以写入 HDR 对的主要功能或辅助功能。

(全面披露:我从事 Informix 软件工作。)

我自己还没有尝试过,但您可能还想研究一下 OpenBaseSQL,它似乎内置了一些简单易用的复制功能。

另一种方法是在虚拟化环境中运行。我认为这篇博客文章中的数据很有趣

http://chucksblog.typepad.com/chucks_blog/2008/09/enterprise-apps.html

它来自 EMC 高管,所以显然它不是独立的,但实验应该是可重复的

这是 Oracle 特定的数据

http://oraclestorageguy.typepad.com/oraclestorageguy/2008/09/to-rac-or-not-to-rac-reprise.html

编辑:如果你运行虚拟化,那么就有办法复制任何东西

http://chucksblog.typepad.com/chucks_blog/2008/05/vmwares-srm-cha.html

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top