大数据量时如何部署MySQL Replication从库
最后更新于:2022-04-01 21:03:03
我们在部署MySQL Replication从库时,通常是一开始就做好一个从库,然后随着业务的变化,数据也逐渐复制到从服务器。
但是,如果我们想对一个已经上线较久,有这大数据量的数据库部署复制从库时,应该怎么处理比较合适呢?
本文以我近期所做Zabbix数据库部署MySQL Replication从库为例,向大家呈现一种新的复制部署方式。由于Zabbix历史数据非常多,[在转TokuDB之前的InnoDB引擎时](http://imysql.com/2014/06/24/migrate-zabbix-db-to-tokudb.shtml "迁移Zabbix数据库到TokuDB"),已经接近700G,转成TokuDB后,还有300多G,而且主要集中在trends_uint、history_uint等几个大表上。做一次全量备份后再恢复耗时太久,怕对主库写入影响太大,因此才有了本文的分享。
我大概分为几个步骤来做Zabbix数据迁移的:
~~~
1、初始化一个空的Zabbix库
2、启动复制,但设置忽略几个常见错误(这几个错误代码对应具体含义请自行查询手册)
#忽略不重要的错误,极端情况下,甚至可以直接忽略全部错误,例如
#slave-skip-errors=all
slave-skip-errors=1032,1053,1062
3、将大多数小表正常备份导出,在SLAVE服务器上导入恢复。在这里,正常导出即可,无需特别指定 --master-data 选项
4、逐一导出备份剩下的几个大表。在备份大表时,还可以分批次并发导出,方便并发导入,使用mysqldump的"-w"参数,然后在SLAVE上导入恢复(可以打开后面的参考文章链接)
5、全部导入完成后,等待复制没有延迟了,关闭忽略错误选项,重启,正式对外提供服务
~~~
上述几个步骤完成后,可能还有个别不一致的数据,不过会在后期逐渐被覆盖掉,或者被当做过期历史数据删除掉。
本案例的步骤并不适用于全部场景,主要适用于:
不要求数据高一致性,且数据量相对较大,尤其是单表较大的情况,就像本次的Zabbix数据一样。
参考文章:
[迁移Zabbix数据库到TokuDB](http://imysql.com/2014/06/24/migrate-zabbix-db-to-tokudb.shtml "迁移Zabbix数据库到TokuDB")
[[MySQL FAQ]系列— mysqldump加-w参数备份](http://imysql.com/2014/06/22/mysql-faq-mysqldump-where-option.shtml "[MySQL FAQ]系列— mysqldump加-w参数备份")
';