mysql - 如何在不停机的情况下将 MySQL 数据库移动到另一台服务器

标签 mysql linux mysqldump database-migration

我们有相当大的 (1-4GB) MySQL 数据库,经常用于关键应用程序。我们想将其中一些从物理服务器 1 (S1) 移动到物理服务器 2 (S2)。

传统的方法是在 S1 中停止 MySQL,制作 SQL Dump,将其导入 S2,然后开始使用 S2 作为生产服务器。这可行,但它会给我们的客户带来严重的停机时间,尤其是因为我们需要通过 Internet 传输数 GB 的转储数据。

是否有可能在很少或没有停机时间的情况下完成此移动?

我一直在想的一个策略是这样的:

  1. 在 S1 中为特定的 DB 启动 binlog
  2. 在 S1 仍在生产中时进行 SQL 转储。转储将具有与二进制日志相对应的某种时间戳
  3. 将SQL转储传输到S2并将其导入到新的MySQL服务器
  4. 让 S2 上的 MySQL 服务器复制转储开始时间和现在之间的差异(从二进制日志)。
  5. 将 S2 上的 MySQL 服务器设置为 S1 的从服务器,并不断复制 S1 上的任何更改
  6. 更改 DNS,以便将对 S1 的任何新请求定向到 S2。

这行得通吗?如果可以,我该怎么做?应该注意什么?

最佳答案

我没有做你刚才问的事情的经验,但我现在正在学习这个主题,因为我试图找出,我将来如何能够做到这一点,当时机成熟时,以及是否有我现在可以做的事情,以便以后可以实现。

在寻找解决方案时,我找到了 following post ,或多或少描述了你刚才问的内容。除了更改 DNS 的最后一部分并开始在从数据库上工作。我自己还没有尝试过,但在帖子中他也描述了如何准确地做到这一点的过程。

在我看来,这是可以做到的,我希望你能成功。您也可以问问在最后一步写帖子的人。

This也值得检查,我认为它关闭了整个循环

祝你好运

关于mysql - 如何在不停机的情况下将 MySQL 数据库移动到另一台服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20330001/

相关文章:

mysql - 获得第n高的薪水

MySQL 8 递归 CTE 错误代码 : 1054. 未知列

php - MySQL 左连接,SQL 语法错误

Linux Sed 和换行符在 php 文件中添加许可证

linux - nasm 程序集 sys_execve/bin/sh

c - setitimer 的 ITIMER_PROF(SIGPROF) 是否发送到多线程和 NPTL 以及 Linux(2.6.21.7) 中的每个线程?

mysql - 转储具有限制和所有关联的一个数据库表的最佳方法

mysql - 使用 ibatis/spring/mysql 时如何提高查询的响应时间?

mysql - 迁移服务器,不想丢失 MySQL 数据。 Master-Master 设置是否可行?

mysql - 如何从包含多个数据库的 mysqldump 中恢复一个数据库?