innodb表在row模式下,没有主键的话,会导致每次做dml时都要全表扫描,这种情况在大表下更为突出,会导致从库大量延迟或从库被挂起。
Mysql 从5.6开始支持多线程复制,通过slave parallel worker 配置多线程并发复制。他只能支持一个实例下多个数据库间的并发复制,并不能做到多表并发复制。
传统的mysql复制是异步的,在主库提交完后,才在从库上应用一遍,会有一定时差。半同步复制(semi sync replication)只保证事务日志传到从库,不需要等到事务在从库应用提交成功,也不能做到真正意义上的绝对同步。
因此,建议mysql主从数据库做到以下几点,可以减少主备间的延迟:
1、遵循开发规范,所有的表都需要有主键,当然可以的话也加上索引;
2、对于一些大表,提前规划好分区、分表、分库等策略,减小单表的复制压力,避免单表的压力导致整个实例的复制延迟;
3、提高存储IOPS性能,比如从sas升级到ssd,对io并发会有所提高;