【问题标题】:MySQL/MariaDB replication: Can I interrupt the process?MySQL/MariaDB 复制:我可以中断这个过程吗?
【发布时间】:2015-10-13 12:51:06
【问题描述】:

我在这里有一个复制设置,数据从固定主机复制到笔记本。

复制分两步进行:中继文件的复制速度非常快,以及将中继日志事件应用到数据库,这往往很慢。

现在我的问题是:假设从服务器已经从主服务器获取了所有数据,但“导入过程”仍在运行。我可以安全地关闭从属主机并恢复复制中仍然挂起的部分,而不会以任何方式干扰进程吗?

所以我连接到主机,说“停止从机”,关闭笔记本电脑,回家然后再次“启动从机”,而没有连接到主机。我可以期望从属实例再次恢复导入过程吗?

【问题讨论】:

    标签: mysql mariadb database-replication


    【解决方案1】:

    您的笔记本电脑永远是另一台机器的从属设备,对吗?你只是每天晚上都在断开与 Master 的网络连接?

    从站上有两个线程。 I/O 线程负责从 Master 上的 binlog 中提取数据,并将这些内容放入 Slave 上的“relay-log”中。如果(何时)网络消失,该线程会反复重试。有些设置说明最终放弃的频率和时间。考虑调整它们。

    SQL 线程负责应用中继日志中的任何内容。实际上,SQL 线程可以一直运行。无事可做时,“无所事事”是相当快乐的。

    I/O 线程根据需要创建新的中继日志文件; SQL 线程在完成后删除日志。

    这些年来我和几十个奴隶打过交道;我不记得网络或电源故障有任何问题。您实际上每天晚上至少会导致网络故障。如果您还关闭了笔记本电脑的电源,请优雅地执行此操作。 InnoDB(但不​​是 MyISAM)可以很好地从电源故障中恢复,但不要碰运气。

    STOP/START SLAVE 似乎没有必要,但不会造成伤害。事情应该“恢复”并最终“赶上”。

    您的报价谈到了主清除二进制日志。嗯,这里有个问题。 Master 不会跟踪存在哪些 Slave,因此它无法判断您的 Slave 未连接的时间是否超过 Master 保留 binlogs 的时间。

    expires_logs_days。建议您将其设置为高于您可能休假的天数。

    我对 Slaves 的体验早于 GTID、Galera 等;你会用这种吗?

    【讨论】:

    • 感谢您的回答。笔记本电脑的所有者(不是我,但这无关紧要)每周左右获取一次数据,然后才能真正与主机的网络连接正常工作。 (它是公司的内部服务器。)获取数据非常快,但导入它们会花费大量时间,因此是个问题。
    • (SQL 线程的)慢——如果你有 5.6 和多个数据库,你可以有多个线程。如果你有 MariaDB,你可以拥有更好的多线程。 “很多时间”——分钟?小时? (一周的积压工作)。
    • 小时。此外,99.9% 的数据都在一张表中,因此使用多个线程可能不会很有效。但它可能值得一试......
    【解决方案2】:

    我已部分找到问题的答案:

    MySQL documentation says:

    如果在 SQL 线程执行完所有获取的语句之前从站停止,则 I/O 线程至少已获取所有内容,以便语句的安全副本本地存储在从站的中继日志中,准备执行下一个从站开始的时间。这使得主服务器能够更快地清除其二进制日志,因为它不再需要等待从服务器获取它们的内容。

    这表明完全有可能恢复导入过程(执行语句),但是仍然不清楚

    1. 如果我需要在所描述的事情发生之前start slave 并且
    2. 如果我做start slave,从属找不到它的主人会发生什么。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-07
      • 2013-06-23
      • 1970-01-01
      • 2018-10-04
      • 2020-03-25
      • 2016-05-31
      • 2020-12-25
      相关资源
      最近更新 更多