从零开始的Linux运维屌丝之路,资源免费分享平台   运维人员首选:简单、易用、高效、安全、稳定、社区活跃的开源软件
  • 首页
  • MYSQL
  • MYSQL主库master宕机解决方案原理

MYSQL主库master宕机解决方案原理

发布:蔺要红09-03分类: MYSQL


Mysql高可用方案:
    drdb+heardbeat+mysql
    MHA+Keepalived(VIP)
    mysql rep+keepalived
    MMM+mmm
    MyCat

 
一主多从,主库挂了以后,仍然可以提供读服务,做好监控,最快速度提升主库为从库,影响范围是有限的,也可以不做高可用​​​​
# 主库master宕机解决办法

M 使用VIP
	切从库的时候,就不需要换VIP,直接把VIP绑定要新的M上即可,如果不使用VIP,S提升为M的时候,需要多一步change,而且还要授权同步用户
	如果不使用VIP需要修改网站连接数据库的配置文件
	如果网站访问数据库使用的是域名,则直接修改hosts文件即可
	
M S1 S2 S3 S4 S5(不同主从的选择)
	# 1.半同步从库(S1)(5.5自带插件)
		1.当主库插入数据后,同时写入到S1,成功返回
		优点:两台库同时写入数据
		缺点:写入会慢,网络不稳定,主库持续等待
		解决方法:
                  1.当连不上S1的时候自动转为异步
                  2.设置超时时间,默认10秒,查过10秒转为异步
                  3.S1网络和硬件要好,不提供服务,只等待接管作为M
	# 2.S1什么都不干只做同步的从库
	# 3.M挂掉以后,从S中选一个(耽误事,容易造成数据不一致)

确定主之后,角色切换S1提升为M1:
第一种情况:主机宕机SSH正常连接binlog数据没丢,
  提升S1为M1的操作
    1.如果做了双主同步,直接切主库即可,啥都不用做
    2.如果没有做双主
      1.要把主库的binlog补全到所有的从库
      2.调整配置文件,去掉read-only,授权用户权限检查,确认是否开启binlog,
      3.删除master.info relay-log*
      4.登陆数据库 stop slave; reset master;
      5.所有从库stop slave io_therad; change master to master_host='10.10.10.190',master_user='repl',master_password='111111',master_log_file='mysql-bin.000005', master_log_pos=681;
      	如果
      6.重启数据库,提升S1为M1完毕M1 S2 S3 S4 S5
    	
第二种情况:主机宕机SSH连接不上,
  1.半同步从库S1提升为M
    1.把半同步数据补全所有从库 S2 S3 S4 S5
    2.登陆数据库 stop slave; reset master;
    3.删除master.info relay-log*
    4.检查mysql授权表:web用户权限以及从库同步的权限
    5.调整配置文件,去掉read-only,授权用户权限检查,确认是否开启binlog,
    6.所有从库stop slave io_therad; change master to master_host='10.10.10.190',master_user='repl',master_password='111111',master_log_file='mysql-bin.000005', master_log_pos=681;
    7.重启数据库,提升S1为M1完毕M1 S2 S3 S4 S5
  
  2.S1什么都不干只做同步的从库
    1.把S1数据补全所有从库 S2 S3 S4 S5
    2.调整配置文件,去掉read-only,授权用户权限检查,确认是否开启binlog,
    3.删除master.info relay-log*
    4.登陆数据库 stop slave; reset master;
    5.所有从库stop slave io_therad; change master to master_host='10.10.10.190',master_user='repl',master_password='111111',master_log_file='mysql-bin.000005', master_log_pos=681;
    6.重启数据库,提升S1为M1完毕M1 S2 S3 S4 S5
    
  3.M挂掉以后,从S中人工选一个(耽误事,容易造成数据不一致)
    1.所有从库执行 show processlit;
      确定IO线程 Slave has read all relay log
      Reconnecting after a failed master event read # 主库挂掉的状态
      Waiting for master to send event  # 代表主库所有binlog都发送完毕
      Slave has read all relay log; waiting for the slave I/O thread to update it | NULL
      查看所有从库的master.info
      [root@test01 /data/3307/data]# cat master.info 
      18
      mysql-bin.000007
      5843  # 从这里可以看到已经同步到的位置点,以及哪个是数据最全的从库
      从而来确认,选择哪一个从库来作为新的M
    2.把选中的S数据补全所有从库 
    3.调整配置文件,去掉read-only,授权用户权限检查,确认是否开启binlog,
    4.删除master.info relay-log*
    4.登陆数据库 stop slave; reset master;
    6.所有从库stop slave io_therad; change master to master_host='10.10.10.190',master_user='repl',master_password='111111',master_log_file='mysql-bin.000005', master_log_pos=681;
    7.重启数据库,提升S为M1完毕M1 
    8.通过replay日志补全所有其他从库和当前为主的数据库一直
 
温馨提示如有转载或引用以上内容之必要,敬请将本文链接作为出处标注,如有侵权我会在24小时之内删除!

欢迎使用手机扫描访问本站