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;  -- 查看数据
相关推荐
星辰离彬25 分钟前
Java 与 MySQL 性能优化:Java应用中MySQL慢SQL诊断与优化实战
java·后端·sql·mysql·性能优化
程序猿小D2 小时前
[附源码+数据库+毕业论文]基于Spring+MyBatis+MySQL+Maven+jsp实现的个人财务管理系统,推荐!
java·数据库·mysql·spring·毕业论文·ssm框架·个人财务管理系统
发仔1237 小时前
Oracle与MySQL核心差异对比
mysql·oracle
叁沐9 小时前
MySQL 08 详解read view:事务到底是隔离的还是不隔离的?
mysql
wkj00110 小时前
navicate如何设置数据库引擎
数据库·mysql
ladymorgana10 小时前
【Spring Boot】HikariCP 连接池 YAML 配置详解
spring boot·后端·mysql·连接池·hikaricp
kk在加油13 小时前
Mysql锁机制与优化实践以及MVCC底层原理剖析
数据库·sql·mysql
合作小小程序员小小店13 小时前
web网页开发,在线%ctf管理%系统,基于html,css,webform,asp.net mvc, sqlserver, mysql
mysql·sqlserver·性能优化·asp.net·mvc
JosieBook13 小时前
【Java编程动手学】Java常用工具类
java·python·mysql
hello 早上好13 小时前
MsSql 其他(2)
数据库·mysql