我正在考虑切换到一个新的托pipe服务提供商,我想知道是否有可能实现数据库(MySQL 5.6)迁移没有一个巨大的停机时间(=时间将数十GB的数据库文件从一个托pipe到其他托pipe)。
那么,是否有可能将当前的MySQL数据库configuration为主服务器,将新服务器configuration为从服务器,在某些模式下主服务器不会等待新的数据插入或更新,以便从服务器进行确认,从服务器将缓慢 (即不会消耗主数据库机器的资源太多)尝试同步自己,即它将需要一整天,或者可能几天(全速文件复制需要约4小时cca)才能完全同步。
同时我会在新机器上设置networking服务器和其他服务,然后切换DNS并将从机切换到单主机模式并断开旧机器。 我希望(也可以这样做)在实际的DNS交换期间丢失一些数据(一些具有旧的DNSlogging的客户端将访问旧的服务器,这些更改不会复制到新的计算机上),但是对于大多数访问者来说,这个窗口会是15分钟左右。
所以,这是可能的,不知何故容易做到这一点? 替代方法是cca 4小时的停机时间,将所有文件复制到新的服务器上,然后启动它,但是我对这么长的停机时间并不满意。
我不介意在这个过程中重新启动数据库服务/守护进程,以便将其切换到新的configuration。
当我不得不手动重新同步表时,我不想使用转储进行此迁移。
您可以使用快照转储方法:
启用log-bin并在主服务器上创build一个mysqldump --master-data=1 --all-databases – 这将把bin-log位置保存到转储中。 取决于您的数据库types(只有innodb可以使用--single-transaction ),这将在转储期间以最大值读取locking数据库。 没有进一步的行动需要真正的主人。
用转储填满奴隶,并在CHANGE MASTER TO ...; SLAVE START; CHANGE MASTER TO ...; SLAVE START; 它应该开始赶上运行的主人。 一旦同步,你可以做出开关。
你也可以使一个iptables DNAT端口redirect到从机,以避免基于DNS的延迟。
你当然可以! 你唯一需要明白的是你的mysql服务器必须“看到”彼此,你的networking带宽应该足够复制所有的变化。 你应该安装percona-xtrabackup,从当前正在运行的mysql实例中备份,将所有文件复制到其他主机的mysql服务器的datadir,调出实例,设置复制(将master更改为…)并启动slave。 奴隶将复制所有缺less的数据。 在这一点上,你应该知道一个短暂的停机时间,使主人只读(设置全局read_only = 1),并没有写入后,将您的应用程序指向从属。 当新写入出现在从服务器上时,停止复制(STOP SLAVE,RESET SLAVE),您可以closures旧的mysql实例。
为了迁移的目的,我不会使用复制。
我之前通过这样做过:
rsync将/var/lib/mysql/从当前系统复制到新的; 目前的系统可以像往常一样继续运行。 在计划的迁移之前一天左右这样做。 rsync rsync 。 由于要进行更新的次数相对较less,所以不需要太多的时间 当然,您必须考虑到客户端应用程序必须使用新的服务器,所以如果您使用DNS名称,请考虑DNS TTL(caching),否则请确保使用正确的IP地址; 但这超出了这个问题的范围。