MySql - 以最短的停机时间创建复制

时间:2011-12-13 15:43:38

标签: mysql replication database-replication

我有一个~80GB的MySql DB。

我希望在将当前数据库作为主数据库并为其设置从属数据库的同时在该数据库上创建复制。

我的主要问题是如何将主机上的数据(全部80GB)移动到新的从机,并尽可能减少停机时间,最好不要。

我最初的想法是停止数据库(在获取日志位置之后),然后从mysqldata lib复制文件,然后重新启动服务器,但只需复制文件大约需要2个小时。

有什么想法吗?

3 个答案:

答案 0 :(得分:6)

On July 8, 2011 I addressed a similar question. I wrote scripts that would zap binary logs and starting performing an rsync.

On June 16, 2011, I wrote a post contrasting doing an rsync versus using XtraBackup.

On May 23, 2011, I discussed what considerations to make when doing this kind of backup.

我没有重新发明轮子并重写我在这些帖子中写过的信息,而是简单地提供了链接到我自己的帖子来解决这个问题。

请仔细阅读。

试一试!!!

CAVEAT

我的rsync算法中唯一的停机时间是在您按指定执行多个rsyncs后,关闭mysql,再执行一次rsync,然后启动mysql

我想澄清关闭的原因:

当你关闭mysql时:

  • 所有打开的MyISAM表都已关闭,有一个标题可以标记MyISAM表打开了多少个文件句柄。必须为零(0)才能使表格正常。否则,此标头字段中具有非零值的已关闭MyISAM表会将表标记为崩溃并需要进行表修复。关闭mysql会清除所有这些。

  • 所有在缓冲池中具有标记为脏的数据页或索引页的InnoDB表都需要刷新到磁盘。执行关闭会触发缓冲池的完全刷新。当然,池越大,脏页数越多,缓冲池刷新时间就越长。要缩短mysqld关闭的这个阶段,请在执行任何rsyncs之前运行SET GLOBAL innodb_max_dirty_pages_pct = 0;。所有交易均已完成(已提交或已回滚)。

答案 1 :(得分:0)

我认为你有一些误解。

  1. 在启动之前,必须在主服务器上启用二进制日志
  2. 在master上重启mysql
  3. 登录主人
  4. 从写入
  5. 锁定所有表格
  6. 记录主二进制位置
  7. 从master复制二进制数据(DIRECTLY copy * .MYI,* .MYD ...等,您可以复制到master数据库中的另一个位置)
  8. 复制完成后
  9. 删除写锁定
  10. scp数据到slave(取决于网络距离)
  11. 将相关主信息设置为slave(二进制日志位置,并记住禁用二进制日志)
  12. 启动奴隶
  13. 在那之后,奴隶应该有很大的延迟,
    和奴隶会试图自动赶上主人,
    一旦赶上来,你的奴隶就准备好了!

    因此,停机时间仅在您锁定表并将二进制数据复制到主数据库中的另一个位置时。

    docs: - http://dev.mysql.com/doc/refman/5.1/en/replication-howto.html

答案 2 :(得分:0)

我发现以下工具具有很大的帮助和效率。作者目前在facebook工作,曾经在日本为dema工作。 它很容易设置,你将达到4 9的HA。 ; - )

MHA tool for MySQL replication high availability

我不得不说MySQL群集更好,哈哈; - )