1. 下载 MySQL 5.7.39 的 Docker 镜像并运行
docker run -itd -p 3306:3306 --name mysql-1 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.39
  1. 进入 mysql-1 容器内部,并创建主从复制所需的账号和权限
docker exec -it mysql-1 bash

mysql -u root -p
输入密码:123456

# 创建复制账号
CREATE USER 'repl'@'%' IDENTIFIED BY 'repl';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
  1. 查看 mysql-1 容器的 IP 地址
docker inspect mysql-1 | grep IPAddress
  1. 复制 mysql-1 容器的数据到 mysql-2 容器
docker run -itd -p 3307:3306 --name mysql-2 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.39

docker exec mysql-1 sh -c 'mysqldump --all-databases --master-data > /tmp/dbdump.sql'
docker cp mysql-1:/tmp/dbdump.sql /tmp/dbdump.sql

docker cp /tmp/dbdump.sql mysql-2:/tmp/dbdump.sql
docker exec mysql-2 sh -c 'mysql < /tmp/dbdump.sql'
  1. 配置 mysql-2 容器为 mysql-1 容器的从节点
docker exec -it mysql-2 bash

mysql -u root -p
输入密码:123456

# 配置从节点
CHANGE MASTER TO MASTER_HOST='mysql-1的IP地址',MASTER_USER='repl',MASTER_PASSWORD='repl',MASTER_PORT=3306,MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=154;

# 开启复制
START SLAVE;
  1. 验证主从复制是否生效

mysql-1 容器内创建一个新的数据库,并在其中创建一张表

CREATE DATABASE test;
USE test;
CREATE TABLE t1 (id INT NOT NULL AUTO_INCREMENT, name VARCHAR(20), PRIMARY KEY (id));
INSERT INTO t1 (name) VALUES ('test1'),('test2'),('test3');

mysql-2 容器内查看是否可以看到新创建的数据库和表

SHOW DATABASES;
USE test;
SELECT * FROM t1;

如果可以看到,则说明主从复制已经生效。


原文地址: https://www.cveoy.top/t/topic/mIpC 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录