将MySQL数据库迁移到新系统,同时最大限度地减less停机时间的最快方法?

我想尽量减less停机时间(在“转换”期间)。

我们使用EBS卷上的数据在EC2上运行。 在数据库卷的运行过程中拍摄数据库卷的快照是否安全?使用数据库卷恢复新数据库还是需要先closures旧的数据库?

我会build议:

  1. 快速读取快照,同时读取lockingFLUSH TABLES WITH READ LOCK;
  2. 把这个数据集放在你的第二台机器上,并检查一致性。
  3. 从旧机器设置复制到新的。

然后在你的转折点:

  1. 在老机器上面对面对IP的客户端(你有一个单独的,对吧?)。
  2. 问题FLUSH LOGS; 在旧机器上。
  3. 确保新机器同步。 落后0秒。
  4. 停止旧机器,并根据新机器的位置仔细检查最后的binlog大小。
  5. 发出STOP SLAVE; RESET MASTER; STOP SLAVE; RESET MASTER; 在新机器上。
  6. 在新机器上调用面向IP的客户端,并确保客户端能够看到它。

有几个更好的细节,比如你是一个沉重的InnoDB用户。 但这是一般的杰斯特。

为什么不设置第二个MYSQL服务器作为奴隶,复制,然后重新configuration奴隶是一个主人?

丹C是正确的钱,但我想更具体的前3个步骤

为了提高速度并避免灾难 ,请在CLI的mysql客户端中这样做:

 sudo mysql -e "FLUSH TABLES; FLUSH TABLES WITH READ LOCK; SYSTEM ec2-create-snapshot vol-4d826724; UNLOCK TABLES;" 

我依靠以下几点:

  1. 如果长时间运行UPDATE,DELETE或INSERT命令,则获取读locking可能需要一些时间。 我发布一个预备FLUSH TABLES来减less任何表被locking的时间。
  2. mysql客户端可以使用SYSTEM命令将命令传递给主机操作系统,而运行mysql客户端的用户也可以这样做。 (这就是为什么我使用sudo)
  3. 当你说你在EC2上使用ESB时,我从来没有用过,我查阅了这个文档给你 。 你必须查找要为“vol-XXXXXXXX”
  4. 让你的生活更轻松一点,并在〜root / .my.cnf中input密码

我看到这个描述含混不清,或者在互联网上公然错误 ! 文档中明确指出:“ 如果客户端连接断开,服务器将释放客户端持有的表锁。 ” 所以,你不能打开mysql客户端,刷新+locking,退出客户端,创build快照,打开mysql客户端,解锁表。 你将会得到一个不一致的快照。

一些特别尖锐的读者将正确地识别出“UNLOCK TABLES”是不必要的,因为无论如何,客户端连接将会closures。 我把它放在那里,因为它让人更舒服。

我已经列举了6个来源。 我希望你现在有信心做这个。 让我们知道你是否有更多的不确定性。

首先确保binlogs被启用。 在全局读锁( FLUSH TABLES WITH READ LOCK )下取一个mysql目录的文件系统级快照(例如LVM或类似的)。 使用此快照设置新服务器,并configuration到旧系统的复制(您可以通过查看快照中最新的二进制日志的大小来计算binlog名称和位置( master_log_file / master_log_pos ))。

当您准备好移动时,停止旧服务器上的所有写入( read_only=true ,终止所有连接),并等待新服务器赶上复制。 然后使新服务器可写,并取下旧服务器。

根据对您的数据库运行什么types的查询,您可能会有几秒钟的停机时间。 然而,这取决于您的写入查询是确定性的,以便新老服务器将具有完全相同的数据。