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;  -- 查看数据
相关推荐
左直拳16 小时前
mysql分区表自动归档
mysql·分区表·分区表归档
haven-85217 小时前
MySQL事务ACID、隔离级别、MVCC、幻读解决
数据库·mysql
加加and减减19 小时前
Docker真实安装mysql8教程并优化配置
运维·mysql·docker·容器
程序猿乐锅19 小时前
【MySQL | 第九篇】MySQL 存储过程
数据库·mysql
王小王-12320 小时前
基于深度学习的个性化音乐推荐系统的设计与开发
人工智能·深度学习·mysql·vue·推荐算法·个性化音乐推荐系统·音乐预测
xuefuhe20 小时前
MySQL8.4 tar.xz安装
mysql
五阿哥永琪21 小时前
正则表达式
数据库·mysql·正则表达式
LaughingZhu21 小时前
Product Hunt 每日热榜 | 2026-06-13
数据库·mysql
sulikey1 天前
数据库中等值连接与自然连接的区别。为什么不建议使用自然连接?
数据库·sql·mysql·等值连接·自然连接
周末也要写八哥1 天前
数据库安装 | MySQL 8.0.32安装教程及网盘下载地址
数据库·mysql