我正在运行一个连接到SQL主机的服务器。我有另一台服务器,我决定将其作为SQL备份运行。所以,我有三个。Srv A是SQL主机,srv B是备份。
我知道有mysql复制,但这不是我喜欢的(如果我错了就纠正我)。我想要分发的东西,所以如果srv A返回,它不会覆盖在srv B上停机期间构建的数据库。我只有3台服务器,所以不能选择设置集群。
如果有人能帮我的话,我会很高兴的。
发布于 2012-05-27 16:29:24
使用主从配置和从从中删除备份是MySQL数据库的一种相当标准的策略。在故障转移和故障回退的恢复阶段,将讨论保护数据不被改写的过程。
通常,您将使用从服务器B以一致的方式执行数据库(mysqldump -h serverB --all-databases --lock-tables --other-options)的完整或增量备份,而不会在转储期间使用锁影响主数据库。这很有用,因为从服务器是主服务器的一个相同的副本。
首先,主A被配置为mysql bin-log指令,以使从服务器B可以使用复制。以及潜在的C,D等。
同时,从B被配置为保存事务的bin日志。(这通常是空的,因为它不应该记录复制更新,除非您是链接奴隶)
一旦serverA失败,主角色将被移动到serverB,B现在开始记录到它自己的bin-log文件。在故障转移操作的这一点上,您将手动禁用从A到B的复制,(**mysql -h serverB -e 'stop slave'** ),因为正如您提到的,您希望保护B不受失败服务器A的影响。
我所说的“主角色从服务器A移动到服务器B”的意思是,您将将应用程序更改为将CRUD操作(创建、替换、更新、删除)写入服务器B地址。例如mysql -h serverB -e 'INSERT INTO table X'。在2节点设置中,您还将迁移SELECT查询,因为您没有与主角色不同的集群只读角色。
现在是sys-admin任务,将A作为B的奴隶重新联机。
如果它是一个干净的失败,A现在是B后面的一些事件,但是B上的二进制日志包含这些事件的记录。因此,您可以将masterB绑定日志重放到slaveA (它包含基本的SQL语句)。
如果服务器A被完全销毁,您可以选择使用从B获取的完全备份(使用最近的转储)或使用来自xtrabackup包的percona脚本等工具将mysql恢复到A。
现在,您应该将复制配置为相反的方向,以允许slaveA从masterB复制。
现在A和B应该是相同的。如果您有一个很好的理由,比如slaveA是一台高得多的规范机器,那么现在您可以切换复制方向来恢复主程序as配置。
处理此场景(故障转移和故障回退)的其他策略包括MMM、多主复制或percona复制管理器工具(我还没有在生产中尝试过)。
发布于 2012-05-27 22:45:49
我只有3台服务器,所以设置集群不是一种选择。
如果要在它们之间传递数据,那么它们就定义为集群。而集群正是你所描述的目标。在MyQL语言中,有一种非常特殊的配置类型,称为NDB集群--这可能不是适合您的解决方案。
因此,如果srv A返回,它不会覆盖在srv B上停机期间构建的数据库。
只有当您使用自动增量列或从序列生成的其他值时,它才会这样做,而mysql有特定的功能来避免这种情况。
我正在运行一个连接到SQL主机的服务器。我有另一台服务器,我决定将其作为SQL备份运行。所以,我有三个。Srv A是SQL主机,srv B是备份。
我不明白-你有三个数据库服务器吗?或者是2?
无论如何,您需要将这些设置为具有异步复制(而不是主从)的主-主对。如果要添加第三个节点,则只将其添加为从节点。这就避免了在发生故障时提升从节点的问题--您只需将流量路由到另一个节点(备份和模式更新也很方便)。实现这一目标的方法有很多种--但最明智的方法是在客户端设置围栏或使用虚拟地址。
我不打算在这里描述这个过程,因为空间是有限的,你需要准确地理解你在做什么。互联网上也有很多指南--但你可能想去买一本好书 (只是注意到O‘’Reilly有更贴切的把这个拿出来 )。坚持上面描述的方法。
https://serverfault.com/questions/393126
复制相似问题