我想尽量减less停机时间(在“转换”期间)。
我们使用EBS卷上的数据在EC2上运行。 在数据库卷的运行过程中拍摄数据库卷的快照是否安全?使用数据库卷恢复新数据库还是需要先closures旧的数据库?
我会build议:
FLUSH TABLES WITH READ LOCK; 。 然后在你的转折点:
FLUSH LOGS; 在旧机器上。 STOP SLAVE; RESET MASTER; STOP SLAVE; RESET MASTER; 在新机器上。 有几个更好的细节,比如你是一个沉重的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;"
我依靠以下几点:
我看到这个描述含混不清,或者在互联网上公然错误 ! 文档中明确指出:“ 如果客户端连接断开,服务器将释放客户端持有的表锁。 ” 所以,你不能打开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的查询,您可能会有几秒钟的停机时间。 然而,这取决于您的写入查询是确定性的,以便新老服务器将具有完全相同的数据。