2

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

MySQL/root 有没有办法轻松传输在某个时间范围内更新/插入的所有数据?

4

5 回答 5

1

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

于 2010-09-30T10:09:33.087 回答
1

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

于 2010-06-07T10:57:45.917 回答
1

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

为了避免它:

  1. 在新服务器上设置应用程序以访问旧服务器上的数据库,或者仅使用 nginx 将 http 请求代理到旧服务器,具体取决于更可接受的方式。
  2. 然后进行 DNS 切换,一些客户端转到 ld 服务器,一些转到新服务器,在这里您可以等待 24 小时以上,以确保所有请求都转到新服务器
  3. 而 DNS 切换 - 排练 mysql 过渡。
    • 制作一个“抱歉/维护页面”,有很多指南如何进行 usung 重写。无论如何你都需要它
    • 如果时间可以接受,请测量转储-传输-恢复数据库的速度 - 这是最简单的,但请记住留出一些余量
    • 如果以前的速度太慢 - 您可以尝试 previos 答案中建议的 binlog 方法
    • 通过使新服务器成为旧服务器的 mysql 可以实现最小的停机时间slave,在引擎盖下它只是从主服务器上下载 binlog 并且您将节省传输整个日志的时间,很可能在最小负载期间从服务器将是仅落后master几秒钟,一旦app被关闭,很快就会赶上,看看如何强制slave赶上
  4. 编写一个脚本,为您完成所有转换 - 启用维护模式,锁定主数据库,等到从站赶上,使从站成为新主站,用新数据库替换应用程序配置,禁用维护,切换应用程序等。这样可以节省时间在自己输入命令时,在暂存环境中进行测试以避免可能的错误(还要记住设置更大的 mysql 超时,以防从属落后很多)
  5. 通过运行上一步中的脚本,转换本身就在这里

此外,如果您使用文件上传到本地文件系统 - 这些也需要同步,并且在大量文件上这比使用 db 更痛苦,因为即使 rsync 扫描更改也可能需要很多时间。

于 2015-12-28T17:48:24.847 回答
0

查看MySQL 二进制日志

于 2010-06-07T10:55:06.780 回答
0

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

于 2010-06-07T11:04:48.803 回答