智能配送设备 发表于 2025-2-7 01:56:27

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

环境说明


[*]Docker
[*]Windows 11
[*]MySql 9.1.0
搭建步骤

1. 准备主库


[*]准备一个主库的配置文件 master.cnf
server-id=1log-bin=mysql-binbinlog-format=ROWgtid_mode=ONenforce-gtid-consistency=ONlog_slave_updates=ONread_only=OFFplugin-load=clone=mysql_clone.so
[*]执行 Docker run 启动主库容器
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
[*]进入容器并登陆mysql
docker exec -it mysql-master bash mysql -u root -p
[*]创建复制用户
CREATE USER 'repl'@'%' IDENTIFIED with caching_sha2_password BY '123456';GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';FLUSH PRIVILEGES;
[*]退出
EXIT;2. 准备从库


[*]准备一个从库的配置文件 slave.cnf
server-id=2 log-bin=mysql-bin binlog-format=ROW gtid_mode=ON enforce-gtid-consistency=ON read_only=ONplugin-load=clone=mysql_clone.so
[*]执行 Docker run
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
[*]进入容器并登陆mysql
docker exec -it mysql-slave bash mysql -u root -p
[*]允许克隆来源
SET GLOBAL clone_valid_donor_list = '172.17.0.6:3306';
[*]执行克隆命令
CLONE INSTANCE FROM 'root'@'172.17.0.6':3306 IDENTIFIED BY '123456';
[*]克隆完成,从库会自动重启
[*]重新进入后可以查看克隆状态
select * from performance_schema.clone_status;
[*]从库即可开启主从复制
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;验证


[*]主库执行下列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;-- 查看数据
页: [1]
查看完整版本: MySql 9 in Docker 利用克隆插件搭建主从