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;  -- 查看数据
相关推荐
Fleshy数模7 小时前
CentOS7 安装配置 MySQL5.7 完整教程(本地虚拟机学习版)
linux·mysql·centos
az44yao8 小时前
mysql 创建事件 每天17点执行一个存储过程
mysql
秦老师Q9 小时前
php入门教程(超详细,一篇就够了!!!)
开发语言·mysql·php·db
橘子1310 小时前
MySQL用户管理(十三)
数据库·mysql
Dxy123931021610 小时前
MySQL如何加唯一索引
android·数据库·mysql
我真的是大笨蛋10 小时前
深度解析InnoDB如何保障Buffer与磁盘数据一致性
java·数据库·sql·mysql·性能优化
怣5010 小时前
MySQL数据检索入门:从零开始学SELECT查询
数据库·mysql
人道领域11 小时前
javaWeb从入门到进阶(SpringBoot事务管理及AOP)
java·数据库·mysql
千寻技术帮12 小时前
10404_基于Web的校园网络安全防御系统
网络·mysql·安全·web安全·springboot
spencer_tseng12 小时前
MySQL table backup
mysql