文章目录
- 平台说明
- 一、Docker创建网络
- 二、创建MySQL主从容器
- 1.拉取镜像
- 2.查看镜像
- 3.创建启动容器
- 三、主从配置
- 1.主机配置文件
- 2.从机配置文件
- 3.注意事项
- 4.重启容器
- 5.连接主从数据库
- 主机配置
- 从机配置
- 启动从机复制
- 四、测试主从复制
平台说明
操作系统:Windows 11
Docker:20.10.22
MySQL:8.0.32
一、Docker创建网络
说明:方便后续MySQL主从连接
1. 创建网络
docker network create net-mysql
2. 查看网络
二、创建MySQL主从容器
1.拉取镜像
docker pull mysql
2.查看镜像
docker images
3.创建启动容器
创建MySQL主机
docker run -d -p 3310:3306 -v D:/ProgramData/docker_config/mysql/master/config:/etc/mysql/conf.d -v D:/ProgramData/docker_config/mysql/master/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --network net-mysql --name mysql-master mysql:latest
创建MySQL从机
docker run -d -p 3311:3306 -v D:/ProgramData/docker_config/mysql/slave-1/config:/etc/mysql/conf.d -v D:/ProgramData/docker_config/mysql/slave-1/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --network net-mysql --name mysql-slave-1 mysql:latest
查看容器是否启动成功
docker ps
三、主从配置
1.主机配置文件
在D:\ProgramData\docker_config\mysql\master\config文件夹下创建my.cnf
[mysqld]
#主服务器唯一ID
server-id=1
#启用二进制日志
log-bin=mysql-bin
#设置不要复制的数据库(可设置多个)
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
#设置需要复制的数据库 需要复制的主数据库名字
binlog-do-db=db_test
#设置logbin格式
binlog_format=STATEMENT
2.从机配置文件
在D:\ProgramData\docker_config\mysql\slave-1\config文件夹下创建my.cnf
[mysqld]
#从服务器唯一ID
server-id=2
#启用中继日志
relay-log=mysql-relay
3.注意事项
编写结束后,进行对应的容器中查看,以主机为例
进入主机的bash
docker exec -it mysql-master bash
进入启动容器时文件挂载的目录
cd /etc/mysql/conf.d
当前目录下应该是my.cnf.txt文件,需要修改文件名称,并将my.cnf内容复制到/etc/mysq目录下的my.cnf文件中,才能生效
# 查看当前目录下的文件
ls
# 修改文件名
mv my.cnf.txt my.cnf
# 复制到/etc/mysql目录下
cp my.cnf /etc/mysql/my.cnf
4.重启容器
docker restart mysql-master mysql-slave-1
5.连接主从数据库
主机配置
进入主机的bash
docker exec -it mysql-master bash
在bash中连接mysql
mysql -uroot -p
创建用户并授权
GRANT REPLICATION SLAVE ON *.* TO 'dev'@'%' IDENTIFIED BY '123456';
查看master状态
show master status;
停在这里,不要在主机上执行其他命令
从机配置
进入从机的bash
docker exec -it mysql-slave-1 bash
连接mysql
mysql -uroot -p123456
在从机的mysql中执行一下命令
CHANGE MASTER TO MASTER_HOST='172.19.0.2',
MASTER_USER='dev',
MASTER_PASSWORD='123456',
MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-bin.000002',
MASTER_LOG_POS=1325;
补充说明
获取主机的IP地址
docker network inspect net-mysql
MASTER_PORT是3306,不是映射到宿主机的端口,千万别搞错了
MASTER_LOG_FILE和MASTER_LOG_pOS的值对应着主机最后一步操作的值
启动从机复制
在mysql中执行
start slave;
查看从机状态
show slave status\G;
Slave_IO_Running和Slave_SQL_Running显示为Yes即为成功
四、测试主从复制
MySQL主库中执行
create database db_test;
use db_test;
CREATE TABLE user ( id int UNSIGNED NOT NULL AUTO_INCREMENT, name varchar(20) NOT NULL, age int NOT NULL, PRIMARY KEY (id) );
insert into user(name, age) values('Jack', 20);
MySQL从库中查询
show databases;
use db_test;
show tables;
select * from user;
打完收工