0. 环境
操作系统xubuntu20.04
docker 版本 20.10.11
mysql 8.0.27
1. 拉取mysql最新镜像
sudo docker pull mysql
2. 创建mysql挂在目录
/docker/mysql_m 子目录 conf logs data
/docker/mysql_s 子目录 conf logs data
/docker/mysql_m/conf 创建 my.cnf文件,文件内容
[mysqld]
## 同一局域网内注意要唯一
server-id=1
## 开启二进制日志功能,可以随便取(关键)
log-bin=mysql-bin
/docker/mysql_s/conf创建 my.cnf文件
[mysqld]
server-id=2
3. 启动容器
创建并启动两个容器 mysql_m 这个作为mysqlmaster 和mysql_s 这个作为mysql slave
MYSQL_ROOT_PASSWORD 指定mysql root用户的密码
docker run -p 5000:3306 --name mysql_m -v /docker/mysql_m/conf:/etc/mysql/conf.d -v /docker/mysql_m/logs:/logs -v /docker/mysql_m/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql
docker run -p 5001:3306 --name mysql_s -v /docker/mysql_s/conf:/etc/mysql/conf.d -v /docker/mysql_s/logs:/logs -v /docker/mysql_s/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql
查看启动情况
4. 进入mysql_m容器
sudo docker exec -it 容器id /bin/bash
创建用来复制的连接用户,并且修改用户的plugin
use mysql;
# 创建一个账户用于主从复制
CREATE USER 'repl'@'%' identified by '123456';
# 修改plugin
ALTER USER 'repl'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
# 查看结果
select user,host,plugin,authentication_string from user;
退出重启 master容器
5. 进入从从容器
在从服务器配置连接到主服务器的信息
CHANGE MASTER TO MASTER_HOST='ip', MASTER_PORT=3306, MASTER_USER='repl', MASTER_PASSWORD='123456';
上面代码的ip换成master的docker ip,docker 查看容器 ip 的命令如下:
sudo docker inspect --format='{.NetworkSettings.IPAddress}}' 容器名称/容器id
启动的复制线程
start slave;
查看同步状态
show slave status \G;
6. 验证主从复制
在主服务器创建数据库和表,从服务器也能看到这些表也创建了,添加数据从服务器也有数据
create database test_db;
create table test_db.user(
id int ,
name varchar(255)
)