为了确保从属服务器和主服务器上的数据位于同一位置以进行复制,应在重新启动主服务器之前停止新的主服务器并将数据传输到新的从属服务器,至少这是一个选项。
如何在不停止主服务器的情况下启动 MySQL 服务器的复制?
答案1
简单的选项 - 如果你的数据使用量很少
mysqldump --master-data -uyouruser -p.... -a > dump.sql
这将锁定所有表并生成包含有关当前主位置的信息的转储。转储将锁定所有表 - 当您的网站很繁忙并且有 20gb 的数据需要转储时,这可能不是您想要做的事情。
更高级的选项。将您的数据放在 lvm 分区上并使用 lvm 快照。即在一个过程中锁定所有表 FLUSH TABLES WITH READ LOCK; SHOW MASTER STATUS;在另一个过程中运行同步几次以获得良好的测量效果并创建数据/ innodb 日志的 lvm 快照。在创建快照之后[对我来说需要 2-3 秒]解锁所有表。
现在您有了一致的快照,并且您的 SQL 服务器仍然在运行。挂载快照并尽快将其“发送”到另一台服务器。在该数据上运行 mysql,让 innodb 从它的日志中恢复所有数据,并运行 mysqldump,将输出发送到从属服务器。
使用在拍摄 LVM 快照之前运行的 SHOW MASTER STATUS 中的信息启动从属服务器。
答案2
FLUSH TABLES WITH READ LOCK
在主服务器上,将数据复制到从服务器(可能对SELECT NULL
与主服务器通信的客户端进行定期操作,以防止由于连接超时而丢失锁),然后在从服务器和UNLOCK TABLES
主服务器上启动复制。
指定的所有主操作都需要在单个客户端会话内进行。复制过程中,请勿尝试退出。
答案3
正如 pQd 上面提到的:
mysqldump --master-data -uyouruser -p.... -a > dump.sql
但是为什么不通过 ssh 进入远程机器并直接通过 ssh 传输数据呢?
答案4
我还不能发表评论,但是 MyISAM 和 INNODB 之间有什么区别?我不确定您是否可以简单地使用 INNODB 锁定表并期望获得良好的快照。