从已经运行了一段时间的主库,然后用一台新安装的备库与之同步,此时这台备库还没有数据。
有几种办法来初始化备库或者从其他服务器克隆数据到备库。包括从主库复制数据、从另外一台备库克隆数据,以及使用最近的一次备份来启动备库,需要有三个条件来让主库和备库保持同步:
- 在某个时间点的主库的数据快照
- 主库当前的二进制日志文件,和获取数据快照时在该二进制日志文件中的偏移量,我们把这两个值称为日志文件坐标(log file coordinates)。通过这两个值可以确定二进制日志的位置。可以通过show master status命令来获取这些值。
- 从快照时间到现在二进制日志
下面是一些从别的数据库克隆备库的方法:
- 使用冷备份
最基本的方式是关闭主库,把数据复制到备库。重启主库后,会使用一个新的二进制日志文件,我们在备库通过修改执行change master to指向这个文件的起始处。这个方法的缺点很明显:在复制数据时需要关闭主库。 - 使用热备份
如果仅使用了MyISAM表,可以在主库运行时使用mysqlhotcopy或rsync来复制数据 - 使用mysqldump
如果只包含InnoDB表,那么可以使用以下命令来转储主库数据并将其加载到备库,然后设置相应的二进制日志坐标:
mysqldump --sigle-transaction --all-databases --master-data=1 --host=server1 | mysql --host=server2
--single-transaction: 使得转储的数据为事务开始前的数据。如果使用的是非事务型表,可以使用--lock-all-tables选项来获得所有表的一致性转储 - 使用快照或备份
只要知道对应的二进制日志坐标,就可以使用主库的快照或备份来初始化备库(如果使用备份,需要确保从备份的时间点开始的主库二进制日志都要存在)。只需要把备份或快照恢复到备库,然后使用change master to指定二进制日志的坐标。 - 使用Percona Xtrabackup
Percona Xtrabackupshiite一款开源的热备份工具。它能够在备份时不阻塞服务器的操作,因此可以在不影响备库的情况下设置备库。可以克隆主库或另一个已存在的备份的方式来建立备库。 - 使用另外的备库
注意:不要使用load data from master或者load table from master!这些命令过时、缓慢、非常危险,并且只适用于MyISAM存储引擎。