AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 393126
Accepted
Marsel Baker
Marsel Baker
Asked: 2012-05-28 07:12:42 +0800 CST2012-05-28 07:12:42 +0800 CST 2012-05-28 07:12:42 +0800 CST

分布式mysql同步

  • 772

我正在运行一个连接到 SQL 主机的服务器。我有另一台服务器,我决定将其作为 SQL 备份运行。所以,我有 3 个。srv A 是 SQL 主机,srv B 是备份。

我知道有 mysql 复制,但它根本不是我喜欢的(如果我错了请纠正我)。我想要分布式的东西,所以如果 srv A 回来,它不会覆盖在 srv B 停机期间建立的数据库。我只有 3 个服务器,所以设置集群不是一个选项。

如果有人可以帮助我,我会很高兴。

mysql cluster distribution
  • 2 2 个回答
  • 105 Views

2 个回答

  • Voted
  1. Best Answer
    Tom
    2012-05-28T08:29:24+08:002012-05-28T08:29:24+08:00

    使用主从配置,并从从属服务器上取下备份是 MySQL 数据库的一个相当标准的策略。在故障转移和故障回复的恢复阶段解决了防止数据被覆盖的过程。

    通常,您会使用从属服务器 B 以mysqldump -h serverB --all-databases --lock-tables --other-options一致的方式对数据库 ( ) 进行完整或增量备份,而不会在转储期间使用锁影响主数据库。这很有用,因为从服务器是主服务器的相同副本。

    首先,master A 配置了 mysql bin-log 指令,使复制对 slaves B .. 和潜在的 C、D 等可用。

    但从属 B 也配置为保留事务的二进制日志。(这通常是空的,因为它不应该记录复制更新,除非你链接奴隶)

    一旦 serverA 出现故障,master 角色将转移到 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 查询,因为您没有与主角色不同的集群只读角色。

    现在系统管理员的任务是让 A 作为 B 的奴隶重新上线。

    如果这是一个干净的失败,A 现在比 B 晚了一些事件,但是 B 上的二进制日志包含这些事件的记录。因此,您可以将 masterB binlog 重播到 slaveA(它包含基本的 SQL 语句)

    如果服务器 A 被完全破坏,您可以选择使用从 B 获取的完整备份,使用最近的转储,或使用xtrabackup 包中的 percona innobackex 脚本之类的工具,将 mysql 恢复到A。

    您现在应该在相反的方向配置复制,以允许 slaveA 从 masterB 复制。

    现在 A 和 B 应该是相同的。如果你有充分的理由,比如 slaveA 是一个更高规格的机器,那么你现在可以切换复制方向以恢复 masterA-slaveB 配置。

    处理这种情况(故障转移和故障回复)的其他策略包括MMM、多主复制或percona 复制管理器工具(我没有在生产中尝试过)

    • 5
  2. symcbean
    2012-05-28T14:45:49+08:002012-05-28T14:45:49+08:00

    我只有 3 台服务器,因此无法设置集群。

    如果您在它们之间传递数据,那么根据定义,它们就是一个集群。集群正是您所描述的目标。在 MyQL 中,有一种非常特殊的配置类型,称为 NDB 集群——这可能不是适合您的解决方案。

    所以如果 srv A 恢复,它不会覆盖在 srv B 停机期间建立的数据库

    它只会在您使用自动递增列或从序列生成的其他值时执行此操作——而 mysql 具有避免这种情况的特定功能。

    我正在运行一个连接到 SQL 主机的服务器。我有另一台服务器,我决定将其作为 SQL 备份运行。所以,我有 3 个。srv A 是 SQL 主机,srv B 是备份。

    我不明白 - 你有三个数据库服务器吗?还是2?

    无论您需要将它们设置为具有异步复制的主-主对(不是主从)。如果要添加第三个节点,则仅将其添加为从节点。这避免了在发生故障时升级从节点的担忧——您只需要将流量路由到另一个节点(它对于备份和模式更新也很方便)。有很多方法可以实现这一点——但最明智的方法是在客户端进行隔离或使用虚拟地址。

    我不打算在这里描述这个过程,因为空间有限,你需要准确地理解你在做什么。互联网上也有很多指南——但您可能想去买一本好书(只是注意到 O'Reilly推出了这本更合适的书)。并坚持那里描述的方法。

    • 1

相关问题

  • 开源与专有关系 db mgt 系统的优缺点是什么?

  • 在 solaris 10 上为 mysql 设置 max_allowed_pa​​cket

  • 如何移动 MySQL 的数据目录?

  • 通过 VPN 连接什么是远程服务器 IP?

  • mysql崩溃

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve