是否可以使用复制将 MySQL 移动到不同的主机?

是否可以使用复制将 MySQL 移动到不同的主机?

我正在考虑切换到新的托管服务提供商,并且我想知道是否有可能实现数据库(MySQL 5.6)迁移而不会产生大量的停机时间(=将数十 GB 的数据库文件从一个托管复制到另一个托管的时间)。

那么,是否可以将当前的 MySQL DB 配置为主服务器,将新机器配置为从服务器,以某种方式让主服务器不会等待新的数据插入或更新以供从属设备确认,并且从属设备将慢慢地(即不会消耗主数据库机器的太多资源)尝试同步自身,即它将需要一整天,或者可能需要几天(全速文件复制将需要大约 4 个小时)才能完全同步。

同时,我会在新机器上设置 Web 服务器和其他服务,然后只需切换 DNS 并将从机切换为单主模式,然后断开旧机器的连接。我预计(并且我同意)在实际 DNS 切换期间会丢失一些数据(一些具有旧 DNS 记录的客户端将访问旧服务器,并且这些更改不会复制到新机器),但对于大多数访问者来说,这个窗口大约需要 15 分钟。

那么,这样的事情可能吗?而且容易做到吗?另一种方法是停机 4 小时,将所有文件复制到新服务器并启动它,但我对这么长的停机时间不太满意。

为了将其切换到新配置,我不介意在此过程中重新启动 DB 服务/守护程序几次。

当我必须手动重新同步表时,我不想使用转储进行此迁移。

答案1

你可以使用快照转储方法:

在主服务器上启用log-bin并创建一个mysqldump --master-data=1 --all-databases- 这会将 bin-log 位置保存到转储中。根据您的数据库类型(只有 innodb 可以使用--single-transaction),这将在转储持续期间最大程度地读取锁定数据库。实际上不需要在主服务器上采取进一步的操作。

用转储填充从属服务器,然后CHANGE MASTER TO ...; SLAVE START;它应该开始追赶正在运行的主服务器。一旦同步,您就可以进行切换。

您还可以将iptablesDNAT 端口重定向到从属服务器,以避免基于 DNS 的延迟。

答案2

当然可以!你唯一要保证的是你的 mysql 服务器必须“看到”彼此,并且你的网络带宽应该足以复制所有更改。你应该安装 percona-xtrabackup,从当前运行的 mysql 实例进行备份,将所有文件复制到其他主机的 mysql 服务器的数据目录,启动实例,设置复制(将主服务器更改为...)并启动从服务器。从服务器将复制所有丢失的数据。此时你应该注意到短暂的停机时间,使主服务器只读(设置全局 read_only=1),并且在没有写入后,将应用程序指向从服务器。当从服务器上出现新的写入时,停止复制(停止从服务器,重置从服务器),然后你可以关闭旧的 mysql 实例。

答案3

出于迁移目的,我不会使用复制。

我以前曾通过以下方式完成此操作:

  • 用于从当前系统rsync复制/var/lib/mysql/到新系统;当前系统可以照常继续运行。在计划迁移前一天左右执行此操作。
  • 在计划迁移之前,rsync再次执行
  • 现在关闭系统(停止数据库服务器),然后rsync再次运行。由于需要进行的更新数量相对较少,因此这不会花费太多时间
  • 启动新的 MySQL 服务器并开始使用它。

当然,您必须考虑到客户端应用程序必须使用新的服务器,因此如果您使用 DNS 名称,请考虑 DNS TTL(缓存),否则请确保使用正确的 IP 地址;但这超出了本问题的范围。

相关内容