登录
  • 欢迎访问悠扬的技术博客,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站😉

记一次Mysql集群MHA恢复时遇到的坑点

Mysql 悠扬 569次浏览 已收录 1个评论

1.当从库切换为主库时,由于同步错误引起的数据为同步完成

记一次Mysql集群MHA恢复时遇到的坑点

这时新的master节点MHA做配置检查时一直输出同步错误,当前MHA无法启动,解决方案如下:

查看新的master节点上面slave节点信息,先把所有的slave节点查看同步情况,同步完成后停止服务。

show slave status\G;
记一次Mysql集群MHA恢复时遇到的坑点
记一次Mysql集群MHA恢复时遇到的坑点
//看到slave节点当前已经把同步任务执行完成,那么先停止服务
stop slave;
flush privileges;

去master节点看看slave是否已经下线,没有的话在slave重复执行上面的代码,然后再查看服务下线情况,注意一定要slave下线。这时才可以操作master.

记一次Mysql集群MHA恢复时遇到的坑点

如下为服务正式下线情况

记一次Mysql集群MHA恢复时遇到的坑点

现在把当前新master节点,之前配置的slave信息删除,不明白什么意思,仔细看看下面的示例图,当前master节点,有一个slave信息,是之前master的slave节点,而且有失败的任务,此时mha无法启动,我们要做的是删除新master节点的slave配置信息

记一次Mysql集群MHA恢复时遇到的坑点
change master to master_host=' ';
记一次Mysql集群MHA恢复时遇到的坑点

然后从新启动MHA恢复正常

记一次Mysql集群MHA恢复时遇到的坑点

启动MHA

1.验证ssh 有效性
masterha_check_ssh --global_conf=/etc/masterha/masterha_default.cnf --conf=/etc/masterha/app1.cnf

2.验证集群复制的有效性
masterha_check_repl --global_conf=/etc/masterha/masterha_default.cnf --conf=/etc/masterha/app1.cnf

nohup masterha_manager --global_conf=/etc/masterha/masterha_default.cnf --conf=/etc/masterha/app1.cnf  &> /var/log/mha_manager.log &

2.处理时使用的一些代码

show master status ;  
SHOW VARIABLES LIKE 'wsrep_%';
SHOW STATUS LIKE 'wsrep_%';
SHOW STATUS LIKE 'wsrep_cluster_size';
mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.000204 > mysql-bin.000204.sql

3、SET global sql_slave_skip_counter=n;

如果从库的slave_sql_running为NO。
Err文件中记录:
Slave:Error “Duplicate entry ‘1’ for key 1” on query…..
可能是master未向slave同步成功,但slave中已经有了记录。造成的冲突可以在从库上执行
set global sql_slave_skip_counter=n;
跳过几步。再restart slave就可以了。

 4、同步错误处理

发现mysql slave服务器经常因为一些特殊字符或者符号产生的更新语句报错,整个同步也会因此而卡在那,最初的办法只是手动去出错的机器执行下面三条SQL语句,跳过错误即可。

 mysql>stop slave;
 mysql>set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
 mysql>start slave;

PS:遇到从数据库的同步进程自动停掉的问题,有时简单通过slave stop,slave start即可解决。有时slave start启动后又会自动停掉,这时使用 change master重设主数据库信息的方式解决了问题。

说明:


注意具体问题,具体分析

Slave_IO_Running:连接到主库,并读取主库的日志到本地,生成本地日志文件。

Slave_SQL_Running:读取本地日志文件,并执行日志里的SQL命令。

5.数据主从同步插件

pt-table-sync 使用介绍

6.mysql.sock不存在

重启服务,tmp中自动生成

另外需要注意的是,mysql.sock文件默认是在/tmp下,数据库启动的时候,系统也默认去这个文件下找mysql.sock文件,但是/tmp目录有时会被某个定时任务给清除,那么我们可以给/tmp目录加一个sticky权限,保护其不被删除,chmod +t /tmp即可,使得/tmp下的文件只能由文件所有者和root用户才能删除

 


版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明记一次Mysql集群MHA恢复时遇到的坑点
喜欢 (1)
支付宝[]
分享 (0)
悠扬
关于作者:
10年以上工作经验,从事2年微服务架构搭建工作,有大数据处理相关工作经验,使用spring全家桶包括:Spring,SpringBoot,SpringCloud 数据层组件服务使用SpringDataJpa,Mybatis以及其他第三方组件Sharding-JDBC,Sharding-Proxy分库分表。熟悉微服务,服务降级,限流,分流,做过项目源码修改,有cat,apollo,nacos使用经验,有Lostash,Elasticsearch,kibana,mysqlMHA生产实践经验,使用开源代码Apache Sarding项目,修改源码支持mysql分库分表使用年月日小时分库分表,docker做集群服务,Jekins做项目发布,GitLab做项目管理,使用docker容器部署,熟悉消息队列RabbitMQ,Kafka,ActiveMQ。RuoYi-Vue-Atomikos项目开源加入生态圈组件,项目支持分布式事务,界面添加多数据源,数据源动态配置,切面切换,多数据源事务支持,支持区域数据源配置,用于区域数据切分,数据层次分库。项目地址:https://gitee.com/zsiyang/ruoyi-vue-atomikos
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(1)个小伙伴在吐槽