为了确保从站和主站的数据在同一个地方进行复制,在重新启动主站之前,应将新的主站停止并将数据传输到新的从站,至less这是一个选项。
如何在不停止主服务器的情况下启动MySQL服务器的复制?
简单的select – 如果你有less量的数据使用
mysqldump --master-data -uyouruser -p.... -a > dump.sql
这将locking所有的表格,并生成有关当前主控位置信息的转储。 转储将locking所有的表 – 可能不是你想要做的事情,当你忙于网站和20GB数据转储。
更高级的选项。 把你的数据放在lvm分区上,并使用lvm快照。 即在一个进程中locking所有表FLUSH TABLES WITH READ LOCK; SHOW MASTER STATUS; 在另一个进程中运行同步几次以获得一个好的度量,并创build你的数据/ innodb日志的lvm快照。 刚刚创build快照[这需要2-3秒]解锁所有表格。
现在你有一致的快照和你的SQL服务器仍在运行。 挂载快照并将其“运送”到另一台服务器。 在这个数据上运行mysql,让innodb将所有数据从它的日志中删除,然后运行mysqldump,将其输出到slave。
使用SHOW MASTER STATUS中的信息启动从属服务器,该服务器在执行LVM快照之前已经运行。
mylvmbackup就是这样做的。 在这里阅读。
在主服务器上FLUSH TABLES WITH READ LOCK ,将数据复制到从服务器上(可能在与主服务器通话的客户端上定期进行SELECT NULL操作,以防止连接超时丢失锁),然后在从服务器上开始复制, UNLOCK TABLES上的主人。
所有指定的主操作都需要在一个客户端会话中。 正在进行复制时不要试图退出它。
由于上面提到的pQd:
mysqldump --master-data -uyouruser -p.... -a > dump.sql
但为什么不ssh进入删除机器,并通过SSHpipe道的数据直接?
我还不能评论,但是MyISAM和INNODB的区别呢? 我不确定你可以简单地用INNODB做一个锁表,并期望一个好的快照。