【问题标题】:Using MYSQL replication to speed up Schema changes and table optermise使用 MYSQL 复制加速 Schema 更改和表优化
【发布时间】:2011-05-18 10:02:22
【问题描述】:

我听说很多人使用主从安排有助于缩短更改架构时所花费的时间,方法是使用复制设置一个新的临时主节点,然后停止重定位,然后在重新开始之前交换角色。我在堆栈溢出中找到了一个示例(如下)。

  1. 设置从站
  2. 停止复制。
  3. 在从属设备上进行 ALTER
  4. 让slave追上master
  5. 交换master和slave,所以slave变成了生产服务器 结构和最短的停机时间

这一切都很好,但是,我不明白第 4 步,我不清楚。

不知道有没有人能把过程解释清楚一点。

【问题讨论】:

    标签: mysql schema replication alter-table master-slave


    【解决方案1】:

    seconds_behind_master 应该是 0。

    【讨论】:

    • 是的,但旧数据不能直接复制到新架构中
    【解决方案2】:

    让奴隶赶上主人

    让slave追上master意味着slave落后master 0秒。

    这意味着如果复制在某个时候停止(以便您更改表),
    它将注册最后一个复制时间。

    当复制恢复时,
    它将比较master上的当前写入时间和slave上的上次复制时间。

    但是,程序似乎有一个缺陷
    你不能改变奴隶和
    更新的从属中的预期架构与ma​​ster相同。

    在事件列类型改变,列被删除,
    可能导致复制失败。

    【讨论】:

    • 这就是我在想如何将旧模式中的数据复制到新模式中它不起作用!知道如何想出一个程序吗?
    • 我想只有脚本才能完成这项工作,除非我遗漏了什么?
    • @andicrook - 如果停机时间允许,直接在主服务器上执行更改(更改将阻止表读/写),mysql 会将更改复制到您的每个从服务器。你的数据库有多大?目前,您是否正在运行任何复制?
    • @ajreal 目前我只是在学习 mysql 的可扩展性,我想要实现的是如何以最少的停机时间对大型数据库进行架构更改。我已经阅读了很多人的文档,他们大致解释了他们是如何通过使用主/从复制和交换主/从滚动技巧(如上面的问题)或使用主/主复制来实现这一点的,但是,他们缺乏细节或遗漏细节出来所以我看不到整个画面。
    • @andicrook - 您可以定义截止时间。一旦从服务器升级为主服务器,您可以在从旧主服务器到新主服务器的截止时间后添加插入/更新/删除的记录(棘手,不易检测,可能从二进制日志中挖掘)。但是,如果您允许使用 flush tables with read lock - dev.mysql.com/doc/refman/5.0/en/flush.html ,这会使整个转换更容易(但是这个块写入并放入队列)
    猜你喜欢
    • 2019-04-22
    • 2018-11-30
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 2014-03-29
    • 1970-01-01
    • 1970-01-01
    • 2016-06-02
    相关资源
    最近更新 更多