MySql 9 in Docker 利用克隆插件搭建主从

环境说明

  1. Docker
  2. Windows 11
  3. MySql 9.1.0

搭建步骤

1. 准备主库

  1. 准备一个主库的配置文件 master.cnf

    [mysqld]
    server-id=1
    log-bin=mysql-bin
    binlog-format=ROW
    gtid_mode=ON
    enforce-gtid-consistency=ON
    log_slave_updates=ON
    read_only=OFF
    plugin-load=clone=mysql_clone.so

  2. 执行 Docker run 启动主库容器

shell 复制代码
docker run --name mysql-master --restart=unless-stopped -p 5300:3306 -e MYSQL_ROOT_PASSWORD=123456 -v C:\Users\Administrator\docker\MySql\replication\master\conf\master.cnf:/etc/mysql/conf.d/master.cnf:ro -v C:\Users\Administrator\docker\MySql\replication\master\data:/var/lib/mysql -d mysql
  1. 进入容器并登陆mysql
shell 复制代码
docker exec -it mysql-master bash 
mysql -u root -p
  1. 创建复制用户
sql 复制代码
CREATE USER 'repl'@'%' IDENTIFIED with caching_sha2_password BY '123456';  
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';  
FLUSH PRIVILEGES;
  1. 退出

    EXIT;

2. 准备从库

  1. 准备一个从库的配置文件 slave.cnf

    [mysqld]
    server-id=2
    log-bin=mysql-bin
    binlog-format=ROW
    gtid_mode=ON
    enforce-gtid-consistency=ON
    read_only=ON
    plugin-load=clone=mysql_clone.so

  2. 执行 Docker run

shell 复制代码
docker run --name mysql-slave --restart=unless-stopped -p 5301:3306 -e MYSQL_ROOT_PASSWORD=123456 -v C:\Users\Administrator\docker\MySql\replication\slave\conf\slave.cnf:/etc/mysql/conf.d/slave.cnf:ro -v C:\Users\Administrator\docker\MySql\replication\slave\data:/var/lib/mysql -d mysql
  1. 进入容器并登陆mysql
shell 复制代码
docker exec -it mysql-slave bash 
mysql -u root -p
  1. 允许克隆来源
sql 复制代码
SET GLOBAL clone_valid_donor_list = '172.17.0.6:3306';
  1. 执行克隆命令
sql 复制代码
CLONE INSTANCE FROM 'root'@'172.17.0.6':3306 IDENTIFIED BY '123456';
  1. 克隆完成,从库会自动重启

  2. 重新进入后可以查看克隆状态

sql 复制代码
select * from performance_schema.clone_status;
  1. 从库即可开启主从复制
sql 复制代码
CHANGE REPLICATION SOURCE TO 
	SOURCE_HOST='172.17.0.6', 
	SOURCE_PORT = 3306, 
	SOURCE_USER='repl', 
	SOURCE_PASSWORD='123456', 
	GET_SOURCE_PUBLIC_KEY=1, 
	SOURCE_AUTO_POSITION=1;

start REPLICA;

SHOW REPLICA STATUS\G;

验证

  1. 主库执行下列SQL,完成后查看从库是否同步
sql 复制代码
CREATE DATABASE test_db2;  -- 创建数据库  
USE test_db2;  -- 切换数据库  
CREATE TABLE users (  
                       id INT AUTO_INCREMENT PRIMARY KEY,  
                       name VARCHAR(50) NOT NULL,  
                       email VARCHAR(100) NOT NULL  
);  -- 创建表  
INSERT INTO users (name, email) VALUES ('tsj', 'tsj@example.com');  -- 插入数据  
SELECT * FROM users;  -- 查看数据
相关推荐
disanleya2 小时前
MySQL数据库安装后,如何设置自动化备份策略?
mysql
奥尔特星云大使2 小时前
mysql高可用架构之MHA部署(二)VIP漂移(保姆级)
android·mysql·架构·mha·ip漂移
-Xie-2 小时前
Mysql杂志(三十一)——Join连接算法与子查询、排序优化
数据库·mysql
程序新视界3 小时前
在连表查询场景下,MySQL隐式转换存在的坑
数据库·mysql·dba
咋吃都不胖lyh4 小时前
MySQL 与Power BI 的作用,以及在数据分析中扮演的角色
mysql·数据分析·powerbi
瓯雅爱分享11 小时前
Java+Vue构建的采购招投标一体化管理系统,集成招标计划、投标审核、在线竞价、中标公示及合同跟踪功能,附完整源码,助力企业实现采购全流程自动化与规范化
java·mysql·vue·软件工程·源代码管理
咋吃都不胖lyh13 小时前
SQL-多对多关系
android·mysql·数据分析
哲Zheᗜe༘16 小时前
了解学习MySQL数据库基础
数据库·学习·mysql
咋吃都不胖lyh16 小时前
MySQL 多表查询中,联合查询(UNION) 和子查询
mysql·数据分析
先鱼鲨生17 小时前
【MySQL】认识数据库以及MySQL安装
数据库·mysql