原 【DB宝33】使用MySQL8.0.17的clone技术在线搭建主从复制环境
一、MySQL 8.0.17的克隆clone简介
MySQL 8.0.17的克隆插件允许在本地或从远程 MySQL 实例在线克隆数据,从此搭建从库可以不再需要备份工具(PXB或mysqldump)来实现了。克隆数据是存储在 InnoDB 其中的数据的物理快照,其中包括库、表、表空间和数据字典元数据。克隆的数据包含一个功能齐全的数据目录,允许使用克隆插件进行 MySQL 服务器配置。
克隆插件支持两种克隆方式:
本地克隆:本地克隆操作将启动克隆操作的 MySQL 服务器实例中的数据克隆到同服务器或同节点上的一个目录里。
远程克隆:默认情况下,远程克隆操作会删除接受者(recipient)数据目录中的数据,并将其替换为捐赠者(donor)的克隆数据。(可选)您也可以将数据克隆到接受者的其他目录,以避免删除现有数据。
远程克隆操作和本地克隆操作克隆的数据没有区别,数据是相同的。克隆插件支持复制。除克隆数据外,克隆操作还从捐赠者中提取并传输复制位置信息,并将其应用于接受者,从而可以使用克隆插件来配置组复制或主从复制。使用克隆插件进行配置比复制大量事务要快得多,效率更高。
官网地址:https://dev.mysql.com/doc/refman/8.0/en/clone-plugin.html
二、初始化主从复制环境
Mater: 192.168.68.168 port:3306 doner 捐赠者
Slave: 192.168.68.169 port:3306 recipient 接受者
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 | -- 下载镜像 docker pull mysql:8.0.20 -- 创建主从网络环境 docker network create --subnet=192.168.68.0/16 mhalhr docker network inspect mhalhr -- 创建MySQL参数文件路径 mkdir -p /etc/mysql/mysql8020M1/ mkdir -p /etc/mysql/mysql8020S1/ -- 删除已存在的容器 docker rm -f mysql8020M1 docker rm -f mysql8020S1 -- 创建主库 docker run -d --name mysql8020M1 -h mysql8020M1 -p 3318:3306 \ -v /etc/mysql/mysql8020M1/conf:/etc/mysql/conf.d \ -e MYSQL_ROOT_PASSWORD=lhr -e TZ=Asia/Shanghai \ --network mhalhr --ip 192.168.68.168 \ mysql:8.0.20 -- 创建从库 docker run -d --name mysql8020S1 -h mysql8020S1 -p 3319:3306 \ -v /etc/mysql/mysql8020S1/conf:/etc/mysql/conf.d \ -e MYSQL_ROOT_PASSWORD=lhr -e TZ=Asia/Shanghai \ --network mhalhr --ip 192.168.68.169 \ mysql:8.0.20 -- 修改主从环境的参数文件 cat > /etc/mysql/mysql8020M1/conf/my.cnf <<"EOF" [mysqld] default-time-zone = '+8:00' log_timestamps = SYSTEM skip-name-resolve log-bin server_id=80203318 character_set_server=utf8mb4 gtid_mode=on enforce_gtid_consistency=on binlog-ignore-db = mysql binlog-ignore-db = information_schema binlog-ignore-db = performance_schema binlog-ignore-db = sys replicate_ignore_db=information_schema replicate_ignore_db=performance_schema replicate_ignore_db=mysql replicate_ignore_db=sys default_authentication_plugin=mysql_native_password report_host = 192.168.68.168 report_port = 3306 EOF cat > /etc/mysql/mysql8020S1/conf/my.cnf <<"EOF" [mysqld] default-time-zone = '+8:00' log_timestamps = SYSTEM skip-name-resolve log-bin server_id=80203319 character_set_server=utf8mb4 gtid_mode=on enforce_gtid_consistency=on binlog-ignore-db = mysql binlog-ignore-db = information_schema binlog-ignore-db = performance_schema binlog-ignore-db = sys replicate_ignore_db=information_schema replicate_ignore_db=performance_schema replicate_ignore_db=mysql replicate_ignore_db=sys default_authentication_plugin=mysql_native_password report_host = 192.168.68.169 report_port = 3306 EOF -- 添加网卡 docker network connect bridge mysql8020M1 docker network connect bridge mysql8020S1 -- 重启主从环境 docker restart mysql8020M1 mysql8020S1 |
最后结果:
1 2 3 4 | [root@docker35 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ebe3b62a2358 mysql:8.0.20 "docker-entrypoint.s…" About a minute ago Up 1 second 33060/tcp, 0.0.0.0:3319->3306/tcp mysql8020S1 76140b04e2fd mysql:8.0.20 "docker-entrypoint.s…" 2 minutes ago Up 4 seconds 33060/tcp, 0.0.0.0:3318->3306/tcp mysql8020M1 |
三、使用clone技术搭建主从复制
3.1 主库创建复制用户
创建复制用户: