创建主从关系时避免服务器停机的方法?

Pro*_*ken 6 mysql innodb replication xtradb percona

我正在准备建立MySQL主从或主主关系。现在我有一个 MySQL 生产服务器,当然我不希望在连接从属服务器时出现大量停机时间。

有没有办法让我连接一个空的从站,让它“慢慢地”从主站同步数据,直到它们完全相同?

我注意到我可以在主服务器上使用 mysqldump 进行事务转储,然后将其导入从服务器,但是当从服务器导入转储时,将写入很多新行以及从服务器将如何获得这些?

我希望我在这里遗漏了一些明显的东西,但是广泛的谷歌搜索给出了这样的建议,例如“因为这将导致未来的停机时间减少,现在停机可能不是一件坏事”。但我真的很想避免这种情况。

MyISAM 的相关问题,但我使用 InnoDB。

Lad*_*ada 8

如果您使用 100% InnoDB,那么您很幸运。您可以使用XtraBackup对您的主数据库进行完整备份,而无需任何停机时间或任何表锁定。这将是一致的快照式备份,与您在执行FLUSH TABLES WITH READ LOCK--master-data选项时获得的排序相同。

XtraBackup 工具还会在备份目录中放置一个额外的文件,其中包含在从站上启动复制所需的 MASTER_LOG_POS 和 MASTER_LOG_FILE 信息。

完成备份后,您需要--prepare在备份上运行 XtraBackup 的选项,将其加载到从属服务器,启动从属 MySQL 进程备份并告诉它它需要的新 MASTER_LOG_POS 和 MASTER_LOG_FILE 值。

skip-slave-start在启动从站之前,您将需要在 my.cnf 中。

还要记住,mysql默认情况下架构是 MyISAM(如果内存正确,它只能是 MyISAM),因此您仍然必须小心不要在运行备份时对任何这些表进行任何更改。只要你坚持这个规则,主信息仍然是正确的。

忽略mysql从属服务器上my.cnf 中模式通常是个好主意,只创建具有 SELECT 权限的用户。即使使用 Percona(和之前的 Maatkit)为此提供的工具,不一致和不同步的 slave 也很难检测并且处理起来很痛苦。

编辑:

尽管您说您使用的是 InnoDB,但为了完整起见,如果您使用的是 MyISAM 表,还有另一种方法。如果您有一个带快照功能的卷管理器(例如ZFSLVM),您可以运行 aFLUSH TABLES WITH READ LOCK后跟 a SHOW MASTER STATUS,创建一个快照并运行UNLOCK TABLES. 停机时间应该相当短。相比之下,昨晚执行此操作以备份我们的一个数据库的 cron 作业需要 6 秒来创建快照,这是数据库“关闭”的位,将文件从快照复制到备份服务器需要 27 分钟。