迁移服务器而不丢失任何数据且没有停机时间的最佳方法(?)

时间:2010-06-07 10:53:58

标签: mysql lamp dedicated-server

这是一个来自自由职业者的方法论问题,有一个关于MySQL的推论。有没有办法从旧的专用服务器迁移到新的专用服务器而不会丢失任何数据 - 并且没有停机时间?在过去,我不得不在新服务器启动的时间(即所有文件已传输,系统启动和准备就绪)之间丢失MySQL数据,并且当我关闭旧服务器时(数据仍然转移到旧服务器直到新服务器)一个接管)。还有一段短时间内,两者都在关闭DNS等等,以刷新。

MySQL / root是否有办法轻松传输在特定时间范围内更新/插入的所有数据?

5 个答案:

答案 0 :(得分:1)

我会做一个抱歉页面,把它放在旧服务器上,将所有数据传输到新服务器然后切换DNS。虽然会有停机时间。

答案 1 :(得分:1)

我喜欢做的是关闭网站并开始使用以下命令将DB移动到其他服务器:2,然后将所有文件(php ..etc)移动到另一台服务器(如果你有一些商店)每小时数据或更改文件,如图像上传)。并且将旧服务器指向新的数据库服务器,同时DNS将全部更改为新服务器。

答案 2 :(得分:1)

最长的停机时间来自DNS切换 - 可能需要几个小时甚至几天才能到达所有客户端缓存。

要避免它:

  1. 在新服务器上设置应用程序以访问旧服务器上的数据库,或者只使用nginx将http请求代理到旧服务器,具体取决于更容易接受的内容。
  2. 然后进入DNS切换,一些客户端转到ld服务器,一些转到新的,在这里你可以等待24小时以确保所有请求转到新服务器
  3. 虽然DNS切换 - 排练mysql过渡。
    • 制作一个'抱歉/维护页面',有很多指南如何进行重写。无论如何你还需要它
    • 衡量转储 - 转移 - 恢复数据库的速度,如果时间可以接受 - 这是最简单的,但请记住给予一些余量
    • 如果以前太慢 - 您可以尝试在previos answer
    • 中建议的binlog方法
    • 最小的停机时间可以通过将新服务器作为旧服务器的slave来实现,它只需从主服务器上即时下载binlog,您将节省传输整个日志的时间,最有可能在最小负载期间奴隶将比主人落后几秒钟,并在应用被取消后迅速赶上,见how to force slave to catch up
  4. 编写一个脚本,为您完成所有转换 - 启用维护模式,锁定主数据库,等待从机赶上,使从机成为新主机,用新数据库替换应用程序配置,禁用维护,切换应用程序等。这种方式你可以节省你自己输入命令的时间,在登台环境上测试以避免可能的错误(还记得设置更大的mysql超时,以防奴隶落后很多)
  5. 这里通过运行上一步中的脚本来实现转换
  6. 此外,如果您使用文件上传到本地文件系统 - 这些也需要同步,并且在许多文件上这比使用db更痛苦,因为即使rsync扫描更改也可能需要花费很多时间。

答案 3 :(得分:0)

查看MySQL binary log

答案 4 :(得分:0)

不确定。在源服务器上启用bin日志记录。启动后,进行数据库转储并将其传输到新服务器并导入。然后,当您准备进行切换时,更改DNS(让更改在您工作时传播),然后在两台服务器上关闭该站点。将binlog复制到新服务器,并从转储的日期/时间开始再次运行它们。