MySQL大数据下Limit使用
- - CSDN博客推荐文章对于一直用Oracle的我,今天可是非常诧异,MySQL中同一个函数在不同数量级上的性能居然差距如此之大. 先看表ibmng(id,title,info) 唯一 id key 索引title. 很多人都会认为不会有多大差别,但是他们都错了,差别太大了,(可能机器不同有点差距,但绝对10倍以上)具体执行时间留给好奇的同学.
我们在部署MySQL Replication从库时,通常是一开始就做好一个从库,然后随着业务的变化,数据也逐渐复制到从服务器。
但是,如果我们想对一个已经上线较久,有这大数据量的数据库部署复制从库时,应该怎么处理比较合适呢?
本文以我近期所做Zabbix数据库部署MySQL Replication从库为例,向大家呈现一种新的复制部署方式。由于Zabbix历史数据非常多, 在转TokuDB之前的InnoDB引擎时,已经接近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数据一样。
参考文章:
[MySQL FAQ]系列— mysqldump加-w参数备份