2011-12-13 20 views
5

我有一个〜80GB的MySql数据库。MySql - 以最小的停机时间创建复制

我想在该DB上创建一个复制,同时将当前数据库作为主设备并为其设置一个从设备。

我的主要问题是如何将数据(全部80GB)从主控制器移动到新的从属控制器,尽可能缩短停机时间,最好不要。

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

有什么想法?

+0

这里有一个指导我如何与锁表的只有几秒钟执行一个完美的奴隶写道:宕机......特别是如果你有很多MyISAM数据...... http://www.marcpope.com/article.php?story=2013060316014742 –

回答

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 GLOBALinnodb_max_dirty_pages_pct= 0;。所有交易都已完成(提交或回滚)。

0

我认为你有一些误解。

  1. 它开始之前,你必须在主启用二进制日志上主
  2. 重启MySQL
  3. 登录掌握
  4. 锁从写入所有表
  5. 记录的主服务器二进制位
  6. 从主服务器复制二进制数据(直接复制* .MYI,* .MYD ...等,您可以复制到主数据库中的另一个位置)
  7. 复制完成后,移除wri TE锁定
  8. SCP数据到从设备(取决于网络距离)
  9. 设置相关主信息到从站(二进制日志的位置,并记住禁用二进制日志)
  10. 开始从属

之后,它应该有很大的延迟在奴隶,
和奴隶会试图赶上主自动,
一旦赶上,你的奴隶准备好了!

所以,停机时间只有当您锁定表并将二进制数据复制到主数据库中的另一个位置时。

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

0

我发现以下工具具有很好的帮助和效率。作者目前为Facebook工作,并曾在日本为dema工作。 这是很容易设置,你会达到4 9的房委会。 ;-)

MHA tool for MySQL replication high availability

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