我想将我的网站转移到新的主机。 我已经把所有的东西都搬了,但是当DNS指向新的名字服务器的时候,要尽量减less数据库的丢失。
我怎样才能做到这一点?
更多细节:
将文件和数据库传输到新主机。
更改DNSlogging到新的名称服务器,女巫将需要一些时间来更新!
我需要的是:将旧服务器上的站点指向新服务器中的新数据库,这样任何新数据都不会丢失!
我经常做这些移民。 没有停机时间是困难的,但低或全部不明显的停机是可能的。 总体思路是:
shell> mount -remount o,ro /path/to/fs + mysql> flush tables with read lock apachectl graceful的简单调用apachectl graceful就足以应用它。 细节比较棘手,但是当它是你的工作,而且你已经习惯了,那实际上很简单。 除了知道如何运行“rsync”,“mysqldump”,并在Apache中设置一个反向代理几行,你就完成了。
通常你必须调整一些与源和目标服务器不同的东西(比如主机名)。 在这种情况下,我写了一个小脚本,用于自动执行备份部分和“修复”(使用sed,perl等)。 使用rsync -a --delete您可以使用相同的脚本进行热备份和冷备份。
关于这一点的好处是, 你不依赖于DNS 。 在我的经验中,DNS托pipe总是很糟糕,或者几乎无法控制网站所有者。 来自许多DNS提供商的DNS更新是不可预测的,不可debugging的。 TTL被大多数高速cachingDNS服务器忽略或毁坏。 你会遇到这个有趣的时间窗口,很多人看不到使用相同名称的同一台服务器,而且会造成非常糟糕的客户关系。 把DNS排除在外对我来说是一个巨大的胜利(除非我可以直接托pipeDNS区域,然后我100%控制,但这是另一回事)。
我之前做过的事情是做master↔掌握两个数据库之间的复制。 这样,无论您的传入stream量正在打到哪个实际的服务器,数据库更新都会同时发生。
复制是一个非常深入的主题,不能在这里完全覆盖,而且在你的DNS更新之前你现在还没有足够的时间,但是每当下一步移动的时候,这是一个好主意。
没有停机时间是很困难的,但最大限度地减less停机时间是相对简单的。
将网站设置为与单独的数据存储同时运行,对旧系统交换机拍摄DNSlogging的快照,然后当您感到高兴的是DNS更改已经传播时,将自旧快照上累积的数据迁移到新的。
允许从旧系统访问新系统的数据存储,后台同步新的站点存储,禁用旧的和新的处理,重新同步数据以使其重新联机,将DNS切换到指向新的站点(同时)更改旧站点以使用新存储
为新网站设置一个备用域名(例如new.example.com以及www.example.com),但不允许在新名称上进行任何事务处理。 后台将存储同步到新框或复制快照。 禁用旧机器上的所有事务处理,并重新同步数据。 启用新计算机上的事务处理(两个名称)configuration旧计算机以发送redirect到新计算机上的所有HTTP请求的新名称,并重写两个系统的HTML /逻辑层中的所有硬编码URL以使用新.example.com代替www.example.com。 一旦旧机器不再使用,请将URL恢复到www.example.com
这不是微不足道的,但使用正确的工具,它应该能够自动化大部分。 如果你使用数据库序列生成器/ MySQL的自动增量列,那么你需要一个防止冲突的计划。
这是我做到的:
在大约2小时内,域名指向新的主机。