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

【DB宝35】使用MySQL 8.0 克隆(clone)插件快速添加MGR节点

DB宝 2021-03-23
1031

目录

    一、MySQL 8.0.17的克隆clone简介
    二、MGR现有环境
    三、使用clone技术添加MGR节点
    3.1 初始化新节点
    3.2 新节点安装clone插件和组复制插件
    3.3 新节点执行克隆任务
    3.4 在原3节点执行修改参数
    3.5 新节点启动MGR
    四、总结

    一、MySQL 8.0.17的克隆clone简介

    MySQL 8.0.17的克隆插件允许在本地或从远程 MySQL 实例在线克隆数据,从此搭建从库可以不再需要备份工具(PXB或mysqldump)来实现了。克隆数据是存储在 InnoDB 其中的数据的物理快照,其中包括库、表、表空间和数据字典元数据。克隆的数据包含一个功能齐全的数据目录,允许使用克隆插件进行 MySQL 服务器配置。

    克隆插件支持两种克隆方式:

    • 本地克隆:本地克隆操作将启动克隆操作的 MySQL 服务器实例中的数据克隆到同服务器或同节点上的一个目录里。

    • 远程克隆:默认情况下,远程克隆操作会删除接受者(recipient)数据目录中的数据,并将其替换为捐赠者(donor)的克隆数据。(可选)您也可以将数据克隆到接受者的其他目录,以避免删除现有数据。

      远程克隆操作和本地克隆操作克隆的数据没有区别,数据是相同的。克隆插件支持复制。除克隆数据外,克隆操作还从捐赠者中提取并传输复制位置信息,并将其应用于接受者,从而可以使用克隆插件来配置组复制或主从复制。使用克隆插件进行配置比复制大量事务要快得多,效率更高。

      MySQL 8.0 clone插件提供从一个实例克隆数据的功能,克隆功能提供了更有效的方式来快速创建MySQL实例,搭建主从复制和组复制。本文介绍使用 MySQL 8.0 clone 插件快速添加组复制(MGR)节点的方法。

      官网地址:https://dev.mysql.com/doc/refman/8.0/en/clone-plugin.html

    二、MGR现有环境

    搭建MGR环境请参考:【DB宝18】在Docker中安装使用MySQL高可用之MGR

    现已有MGR集群,多主模式:

    1MySQL [(none)]> SELECT * FROM performance_schema.replication_group_members;
    2+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
    3| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION |
    4+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
    5| group_replication_applier | 611717fe-d785-11ea-9342-0242ac48000f | 172.72.0.15 |        3306 | ONLINE       | PRIMARY     | 8.0.20         |
    6| group_replication_applier | 67090f47-d785-11ea-b76c-0242ac480010 | 172.72.0.16 |        3306 | ONLINE       | PRIMARY     | 8.0.20         |
    7| group_replication_applier | 678cf064-d785-11ea-b8ce-0242ac480011 | 172.72.0.17 |        3306 | ONLINE       | PRIMARY     | 8.0.20         |
    8+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
    93 rows in set (0.00 sec)

    docker环境:

    1[root@docker35 ~]# docker ps
    2CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                NAMES
    39dd3d6b221b0        mysql:8.0.20        "docker-entrypoint.s…"   3 months ago        Up 10 minutes       33060/tcp, 0.0.0.0:33067->3306/tcp   mysql8020mgr33067
    4189b5a889665        mysql:8.0.20        "docker-entrypoint.s…"   3 months ago        Up 10 minutes       33060/tcp, 0.0.0.0:33066->3306/tcp   mysql8020mgr33066
    56ce08dd5dc84        mysql:8.0.20        "docker-entrypoint.s…"   3 months ago        Up 10 minutes       33060/tcp, 0.0.0.0:33065->3306/tcp   mysql8020mgr33065

    通过clone插件新加节点:172.72.0.18。

    三、使用clone技术添加MGR节点

    3.1 初始化新节点

     1mkdir -p /usr/local/mysql/lhrmgr18/conf.d
    2mkdir -p /usr/local/mysql/lhrmgr18/data
    3
    4docker run -d --name mysql8020mgr33068 \
    5  -h lhrmgr18 -p 33068:3306 --net=mysql-network --ip 172.72.0.18 \
    6  -v /usr/local/mysql/lhrmgr18/conf.d:/etc/mysql/conf.d -v /usr/local/mysql/lhrmgr18/data:/var/lib/mysql/ \
    7  -e MYSQL_ROOT_PASSWORD=lhr \
    8  -e TZ=Asia/Shanghai \
    9  mysql:8.0.20
    10
    11
    12
    13cat > /usr/local/mysql/lhrmgr18/conf.d/my.cnf <<"EOF"
    14[mysqld]
    15user=mysql
    16port=3306
    17character_set_server=utf8mb4
    18secure_file_priv=''
    19server-id = 802033068
    20log-bin = 
    21binlog_format=row
    22binlog_checksum=NONE
    23log-slave-updates=1
    24skip-name-resolve
    25auto-increment-increment=2
    26auto-increment-offset=1
    27gtid-mode=ON
    28enforce-gtid-consistency=on
    29default_authentication_plugin=mysql_native_password
    30max_allowed_packet = 500M
    31log_slave_updates=on
    32
    33master_info_repository=TABLE
    34relay_log_info_repository=TABLE
    35relay_log=lhrmgr18-relay-bin-ip18
    36
    37transaction_write_set_extraction=XXHASH64
    38loose-group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
    39loose-group_replication_start_on_boot=OFF
    40loose-group_replication_local_address= "172.72.0.18:33064"
    41loose-group_replication_group_seeds= "172.72.0.15:33061,172.72.0.16:33062,172.72.0.17:33063,172.72.0.18:33064"
    42loose-group_replication_bootstrap_group=OFF
    43loose-group_replication_ip_whitelist="172.72.0.15,172.72.0.16,172.72.0.17,172.72.0.18"
    44report_host=172.72.0.18
    45report_port=3306
    46
    47EOF
    48
    49
    50
    51docker restart mysql8020mgr33068
    52
    53
    54docker ps
    55mysql -uroot -plhr -h192.168.1.35 -P33065 -e "select @@hostname,@@server_id,@@server_uuid"
    56mysql -uroot -plhr -h192.168.1.35 -P33066 -e "
    select @@hostname,@@server_id,@@server_uuid"
    57mysql -uroot -plhr -h192.168.1.35 -P33067 -e "
    select @@hostname,@@server_id,@@server_uuid"
    58mysql -uroot -plhr -h192.168.1.35 -P33068 -e "
    select @@hostname,@@server_id,@@server_uuid"
    59mysql -uroot -plhr -h192.168.1.35 -P33065 
    60mysql -uroot -plhr -h192.168.1.35 -P33066 
    61mysql -uroot -plhr -h192.168.1.35 -P33067 
    62mysql -uroot -plhr -h192.168.1.35 -P33068 
    63docker logs -f --tail 10 mysql8020mgr33065
    64docker logs -f --tail 10 mysql8020mgr33066
    65docker logs -f --tail 10 mysql8020mgr33067
    66docker logs -f --tail 10 mysql8020mgr33068
    67


    3.2 新节点安装clone插件和组复制插件

    1mysql -uroot -plhr -h192.168.1.35 -P33068
    2
    3-- 安装MGR插件
    4INSTALL PLUGIN group_replication SONAME 'group_replication.so';
    5
    6-- 安装clone插件(注意,需要在源MGR3个节点都安装)
    7INSTALL PLUGIN clone SONAME 'mysql_clone.so';

    3.3 新节点执行克隆任务

     1-- 设置克隆源,将clone_valid_donor_list设置为MGR节点
    2SET GLOBAL clone_valid_donor_list = '172.72.0.15:3306';
    3
    4-- 新节点开始克隆
    5CLONE INSTANCE FROM 'root'@'172.72.0.15':3306 IDENTIFIED BY 'lhr';
    6
    7-- 由于是docker环境,所以需要重启容器
    8-- ERROR 3707 (HY000): Restart server failed (mysqld is not managed by supervisor process).
    9docker restart mysql8020mgr33068
    10
    11-- 查看克隆进度和状态
    12MySQL [(none)]> SELECT * FROM performance_schema.clone_status \G
    13*************************** 1. row ***************************
    14             ID1
    15            PID: 0
    16          STATE: Completed
    17     BEGIN_TIME: 2020-11-13 15:03:07.076
    18       END_TIME: 2020-11-13 15:04:31.224
    19         SOURCE172.72.0.15:3306
    20    DESTINATION: LOCAL INSTANCE
    21       ERROR_NO: 0
    22  ERROR_MESSAGE:
    23    BINLOG_FILE: lhrmgr15-bin.000005
    24BINLOG_POSITION: 1235
    25  GTID_EXECUTED: aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:1-25
    261 row in set (0.01 sec)
    27
    28MySQL [(none)]> select
    29    ->   stage,
    30    ->   state,
    31    ->   cast(begin_time as DATETIME) as "START TIME",
    32    ->   cast(end_time as DATETIME) as "FINISH TIME",
    33    ->   lpad(sys.format_time(power(10,12) * (unix_timestamp(end_time) - unix_timestamp(begin_time))), 10' 'as DURATION,
    34    ->   lpad(concat(format(round(estimate/1024/1024,0), 0), "MB"), 16' 'as "Estimate",
    35    ->   case when begin_time is NULL then LPAD('%0'7' ')
    36    ->   when estimate > 0 then
    37    ->   lpad(concat(round(data*100/estimate, 0), "%"), 7' ')
    38    ->   when end_time is NULL then lpad('0%'7' ')
    39    ->   else lpad('100%'7' ')
    40    ->   end as "Done(%)"
    41    ->   from performance_schema.clone_progress;
    42+-----------+-----------+---------------------+---------------------+------------+------------------+---------+
    43| stage     | state     | START TIME          | FINISH TIME         | DURATION   | Estimate         | Done(%) |
    44+-----------+-----------+---------------------+---------------------+------------+------------------+---------+
    45DROP DATA | Completed | 2020-11-13 15:03:07 | 2020-11-13 15:03:08 |  320.98 ms |              0MB |    100% |
    46FILE COPY | Completed | 2020-11-13 15:03:08 | 2020-11-13 15:03:10 |     2.12 s |             64MB |    100% |
    47| PAGE COPY | Completed | 2020-11-13 15:03:10 | 2020-11-13 15:03:10 |  160.27 ms |              0MB |    100% |
    48REDO COPY | Completed | 2020-11-13 15:03:10 | 2020-11-13 15:03:10 |  100.76 ms |              0MB |    100% |
    49FILE SYNC | Completed | 2020-11-13 15:03:10 | 2020-11-13 15:03:13 |     2.83 s |              0MB |    100% |
    50| RESTART   | Completed | 2020-11-13 15:03:13 | 2020-11-13 15:04:30 |     1.29 m |              0MB |    100% |
    51RECOVERY  | Completed | 2020-11-13 15:04:30 | 2020-11-13 15:04:31 |     1.19 s |              0MB |    100% |
    52+-----------+-----------+---------------------+---------------------+------------+------------------+---------+
    537 rows in set (0.01 sec)

    3.4 在原3节点执行修改参数

    1set global group_replication_group_seeds='172.72.0.15:33061,172.72.0.16:33062,172.72.0.17:33063,172.72.0.18:33064';
    2stop group_replication;
    3set global group_replication_ip_whitelist="172.72.0.15,172.72.0.16,172.72.0.17,172.72.0.18";
    4start group_replication;

    3.5 新节点启动MGR

     1-- 由于已有MGR集群是多主模式,需要先设置成多主模式
    2set global group_replication_single_primary_mode=OFF;
    3set global group_replication_enforce_update_everywhere_checks=ON;
    4
    5-- 加入组复制
    6START GROUP_REPLICATION;
    7
    8-- 查看组复制成员及状态
    9SELECT * FROM performance_schema.replication_group_members;
    10 +---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
    11| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION |
    12+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
    13| group_replication_applier | 276804ba-257c-11eb-b8ea-0242ac480012 | 172.72.0.18 |        3306 | ONLINE       | PRIMARY     | 8.0.20         |
    14| group_replication_applier | 611717fe-d785-11ea-9342-0242ac48000f | 172.72.0.15 |        3306 | ONLINE       | PRIMARY     | 8.0.20         |
    15| group_replication_applier | 67090f47-d785-11ea-b76c-0242ac480010 | 172.72.0.16 |        3306 | ONLINE       | PRIMARY     | 8.0.20         |
    16| group_replication_applier | 678cf064-d785-11ea-b8ce-0242ac480011 | 172.72.0.17 |        3306 | ONLINE       | PRIMARY     | 8.0.20         |
    17+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
    184 rows in set (0.00 sec)
    19
    20-- 新节点查询数据库
    21MySQL [(none)]> show databases;
    22+--------------------+
    23| Database           |
    24+--------------------+
    25| information_schema |
    26| lhrdb              |
    27| mysql              |
    28| performance_schema |
    29| sys                |
    30+--------------------+
    315 rows in set (0.01 sec

    至此,通过clone插件的方式添加MGR节点已成功,非常简单也非常快速。

    四、总结

    克隆技术的一些限制条件:

    • 版本大于等于8.0.17且不支持跨版本。要求相同版本号,您无法MySQL 5.7和MySQL 8.0之间进行克隆,在8.0.19和8.0.20之间也不可以,而且要求版本>=8.0.17。

    • 克隆操作期间不允许使用 DDL,允许并发DML。

    • 两台机器具有相同的操作系统OS。同一平台同一架构,例如linux to windows、x64 to x32 是不支持。

    • 两台MySQL实例具体相同的 innodb_page_size 和 innodb_data_file_path(ibdata文件名)

    • 同一时刻仅仅允许有一个克隆任务存在

    • recipient 需要设置变量clone_valid_donor_list

    • max_allowed_packet 大于2M

    • doner的undo表空间文件名称不能重复

    • 不会克隆my.cnf文件

    • 不会克隆binlog二进制日志。

    • 仅仅支持innodb引擎。不克隆其他存储引擎数据。MyISAM并且 CSV存储在包括sys模式的任何模式中的表都被克隆为空表。

    • 捐赠者和接受者都需要安装克隆插件

    • 捐赠者和接受者分别需要有至少BACKUP_ADMIN/CLONE_ADMIN权限的账号

    • 不支持通过MySQL router连接到捐赠者实例。

    • 默认情况下,克隆数据后会自动重新启动接受者 MySQL 实例。要自动重新启动,必须在接收方上提供监视进程以检测服务器是否已关闭。否则,在克隆数据后,克隆操作将停止并出现以下错误,并且关闭接受者 MySQL 服务器实例。此错误不表示克隆失败。这意味着必须在克隆数据后手动重新启动接受者的 MySQL 实例。

      1ERROR 3707 (HY000): Restart server failed (mysqld is not managed by supervisor process).

      

    本文结束。


    • 微信公众号:DB宝,作者:小麦苗
    • 作者博客地址:http://blog.itpub.net/26736162/
    • 作者微信:db_bao

    • 作者QQ:646634621,QQ群:230161599、618766405
    • 提供Oracle OCP、OCM、高可用(rac+dg+ogg)和MySQL DBA培训
    • 版权所有,欢迎分享本文,转载请保留出处

    • 若有侵权请联系小麦苗删除

      ★DB宝分享的IT资料:https://mp.weixin.qq.com/s/Iwsy-zkzwgs8nYkcMz29ag
      ★DB宝笔试面试详解:https://mp.weixin.qq.com/s/Vm5PqNcDcITkOr9cQg6T7w

      长按下图识别二维码,关注小麦苗的微信公众号:DB宝,学习最实用的数据库技术。


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

      评论