在大多数业务场景下,DBA做主备复制的搭建的时候,主库都已经有数据。那么,在主库有数据的情况下,如何进行主备复制?
mysql提供了如下几种方案:
- 冷备份
- 热备份
- 使用mysqldump
- 使用快照或备份
- 使用percona Xtrabackup开源热备份工具
这里详细讲解下mysqldump
方式,其他备份方式,简单讲解下。
一、冷备份
冷备份基本操作很是粗暴,先关闭数据库,然后将数据复制到备库,再重启主库,这时主库会重新生成binlog日志文件,然后再备库执行 change master to...
指向新生成的binlog文件的起始处,再接着执行start slave;
进行主备复制。
这种方式缺点很明显,需要停数据库。
二、热备份
针对于使用MyISAM的存储引擎的表。这里不做描述
三、使用mysqldump
只包含InnoDB的表,那么可以使用mysqldump
的方式。
一般使用命令:
mysqldump --single-transation --all-databases --master-data=1 > dump.sql
这里对上面的mysqldump命令做一下解释:
-
--single-transation
代表是开始一个事务 -
--all-databases
代表dump所有数据库 -
--master-data
有两种值,为1时,将会把当前执行事务时的binlog文件和偏移量以change master..
命令输出到dump的数据文件中;设置为2时,会将此命令注释掉。
所以,当主库有数据时,执行上面的mysqldump --single-transation --all-databases --master-data=1 > dump.sql
指令将数据导入至dump.sql,再将dump.sql文件导出至备库的服务器。在备库执行dump.sql导入数据,导入完成后,再执行start slave;
进行主备复制。就可以从导出数据dump.sql数据的那一刻开始继续复制主库的数据了。
五、使用快照或备份
只要知道备份的时间点,和快照时刻对应的二进制文件和偏移量就可以,在出现问题时,根据快照进行回滚。并根据二进制文件和偏移量进行主备复制。
六、使用percona Ctrabackup开源热备份工具
这里不做描述
本文是作者根据日常业务场景,写出的一些解决问题或学习实验的历程。如有错误的地方,还请指出,相互学习,共同进步。谢谢!
网友评论