暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MGR数据不一致了该如何恢复?

玩转MySQL 2021-03-18
635


在使用MGR 早期版本时 https://bugs.mysql.com/bug.php?id=92690 在8.0.16 和 5.7.26之前的版本会受影响。由于组复制消息同步的投票编号实现有缺陷,在不稳定的网络环境下,可能会导致主备节点数据不一致,节点被踢出集群无法正常加入



面对这种情况你该如何恢复?


方法



我们用重做实例的方法来恢复,而早期版本还没有MySQL Clone功能,所以步骤上要稍微繁琐些。如果有clone功能那恢复起来就简单了。


 1. 在当前主节点创建全量备份

    mysqlbackup --backup-dir=/path/backup_`date +%d%m_%H%M` --backup-image=/path/backup_image_`date +%d%m_%H%M` --user=root -p --host=127.0.0.1 --no-history-logging --compress --skip-binlog backup-to-image

       

    2. 停止故障实例的MySQL服务,并清空或备份当前数据目录文件

    3. 恢复备份全量备份到故障实例

      mysqlbackup --defaults-file=/etc/my.cnf --backup-dir=/path/backup_`date +%d%m_%H%M` --backup-image=/path/backup_image_`date +%d%m_%H%M` --uncompress copy-back-and-apply-log


      4. 启动MySQL服务,但不要默认启动组复制

        group_replication_start_on_boot=OFF


        5. MySQL服务启动后,更新GTID_PURGE,启动组复制

          mysql> RESET MASTER;
          mysql> RESET SLAVE ALL;
          mysql> SET SQL_LOG_BIN=OFF;
          mysql> SOURCE datadir/backup_gtid_executed.sql
          mysql> SET SQL_LOG_BIN=ON;
          mysql> CHANGE MASTER TO MASTER_USER='repl', MASTER_PASSWORD='repl' FOR CHANNEL 'group_replication_recovery'; 填写实际复制用户名与密码
          mysql> START GROUP_REPLICATION;


          6. 检查节点状态

            mysql> SELECT * member_host, member_port, member_state FROM performance_schema.replication_group_members;


            7. 如果你用的mysql shell 搭建MGR架构,还要更新mysql_innodb_cluster_metadata。

            查看被恢复的节点server_uuid

              mysql> show variables like 'server_uuid'


              节点恢复后会生成新的server-uuid,需要将mysql_innodb_cluster_metadata的instances表中原实例的旧uuid更新为新uuid。


              在集群主节点上执行更新操作

                update mysql_innodb_cluster_metadata.instances set mysql_server_uuid=<new_uuid> where instance_name='对应实例名'


                检查下你是否在使用8.0.16 和 5.7.26之前版本MGR架构?如果你要使用MGR 请注意避坑。

                文章转载自玩转MySQL,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                评论