mysql主从不同步原理

Wesley13
• 阅读 480
  1. mysql replication 中slave机器上有两个关键的进程,死一个都不行,一个是slave_sql_running,一个是Slave_IO_Running,一个负责与主机的io通信,一个负责自己的slave mysql进程。

  2. 如果是slave_io_running no了,那么就我个人看有三种情况,一个是网络有问题,连接不上,像有一次我用虚拟机搭建replication,使用了nat的网络结构,就是死都连不上,第二个是有可能my.cnf有问题,配置文件怎么写就不说了,网上太多了,最后一个是授权的问题,replication slave和file权限是必须的。

  3. 一旦io为no了先看err日志,看看爆什么错,很可能是网络,也有可能是包太大收不了,这个时候主备上改max_allowed_packet这个参数。

  4. 如果是slave_sql_running no了,那么也有两种可能,一种是slave机器上这个表中出现了其他的写操作,就是程序写了,这个是会有问题的,今天我想重现,但是有时候会有问题,有时候就没有问题,现在还不是太明了,后面再更新,还有一种占绝大多数可能的是slave进程重启,事务回滚造成的,这也是mysql的一种自我保护的措施,像关键时候只读一样。

  5. 这个时候想恢复的话,只要停掉slave, set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;再开一下slave就可以了,这个全局变量赋值为N的意思是:

  6. This statement skips the next N events from the master. This is useful for recovering from replication stops caused by a statement.

  7. This statement is valid only when the slave thread is not running. Otherwise, it produces an error.

  8. 错误实例:

  9. show slave status\G

  10. Slave_IO_Running: Yes

  11. Slave_SQL_Running: No

  12. 有问题了,Slave_SQL_Running应该是Yes才对。

  13. 再往下看,有错误的提示:

  14. Last_Errno: 1062

  15. Last_Error: Error 'Duplicate entry 'b847a74ad1e35badd71d0171bd703360' for key 'PRIMARY'' on query. Default database: 'fangh6fu'. Query: 'INSERT INTO `fangh6fu`.`ecs_sessions` (sesskey, expiry, ip, data) VALUES ('b847a74ad1e35badd71d0171bd703360', '1447919111', '192.168.1.214', 'a:0:{}')'

  16. 先 stop slave,然后执行了一下提示的语句,就是把重复的主键记录删除,

  17. 再 SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; START SLAVE;

  18. show slave status\G

  19. Slave_IO_Running: Yes

  20. Slave_SQL_Running: Yes

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
MYSQL基础知识小盲区
MYSQL必会的知识新学的MySQL小技能:show PROCESSLIST; 查看当前数据库的进程(也就是正在进行的sql操作)!(https://oscimg.oschina.net/oscnet/c7908995a15dcf322850eb4ba0416cc34b1.png)kil
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
mysql ,show slave status详解
\想确认sql\_thread线程是否应用完了io\_thread接收到的了relaylog,看Master\_Log\_FileRelay\_Master\_Log\_File,Read\_Master\_Log\_PosExec\_Master\_Log\_PosMaster_Log_File:mysqlbin.0000
Stella981 Stella981
3年前
Android蓝牙连接汽车OBD设备
//设备连接public class BluetoothConnect implements Runnable {    private static final UUID CONNECT_UUID  UUID.fromString("0000110100001000800000805F9B34FB");
Wesley13 Wesley13
3年前
thinkphp 基本配置
12returnarray(34//定义数据库连接信息5'DB\_TYPE''mysql',//指定数据库是mysql67'DB\_HOST''localhost',89'DB\_NAME''uchome',//数据库名1011'DB\_USER''root
Stella981 Stella981
3年前
Redis学习
主从复制官方文档:https://redis.io/topics/replicationRedis中的主从复制,也就是MasterSlave模型,有以下特点  Master可以拥有多个slave  多个slave不仅可以连接同一个master,还可以连接到其他的slave  主从复制不会阻塞master,在同步数据时,maste
Stella981 Stella981
3年前
GTID做mysql主从时报错
今天在做主从同步时,显示slave\_IO线程为NO,并且报如下错误Slave_IO_Running:No...Last_IO_Error:Fatalerror:TheslaveI/OthreadstopsbecausemasterandslavehaveequalMySQLserverUU
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究