主从延时临时解决办法:
主从延迟严重的原因很多,其中有以下原因:
一、由于无主键大表的delete 和update导致。
mysql 主从复制时。如果表上没有主键。会导致update和delete操作 在从库全表扫描。或者扫描最大索引。
在对没有主键的表进行批量的delete和update操作时候,此时从库会阻塞在delete、update语句。(对于几十万记录的表,每秒仅能删除10条记录左右。)。
如何临时去解决问题呢?
1、开启从节点复制单线程: set global slave_parallel_workers=1。(可能需要重启从mysql)
2、开启复制幂等模式set global slave_exec_mode = IDEMPOTENT 。
3、在从库set session sql_log_bin=OFF;stop slave; 手动指定当前的delete、update 。如果是delete from 没有where条件,直接truncate。
(注意。在执行阻塞的delete update操作的时候回阻塞住stop slave。这时候可以直接kill sql_thread进程。)
4、跳过所有无主键表的批量delete,update之后。 set global slave_exec_mode = STRICT;stop slave ;start slave; 创建这些表的主键。
二、主库写入压力大,从库跟不上:
1、临时调整从库参数:
set global sync_binlog=0;
set global innodb_flush_log_at_trx_commit=0;
适当调大slave_parallel_workers (对于5.6及5.6以下没啥用处。)
适当调大 sync_relay_log (默认为10000,即每10000次sync_relay_log事件会刷新到磁盘。为0则表示不刷新,交由OS的cache控制)
适当调大 sync_relay_log_info (如果relay_log_info_repository设置为TABLE。则不用管)
(如果是非GTID模式下: set global log_slave_updates=OFF 或者 set global binlog_format=statement)
2、stop slave;start slave