安装Docker
查看Docker版本
docker version
查找想要的MySQL版本
https://hub.docker.com/u/library
这里使用的是 **5.7.27**
安装MySQL
docker pull mysql:5.7.27
创建一个自定义网桥mysql_bridge
docker network create --driver bridge mysql_bridge
运行主容器
docker run -itd --network mysql_bridge --name mysql_master1 -p 4306:3306 -e MYSQL_ROOT_PASSWORD=****** mysql:5.7.27
--name 容器名字
-p 指定容器的端口3306映射到主机的端口4306
-e 设置环境变量,这里指定root账号的密码为******
-d 后台运行容器,同时返回容器ID
mysql:5.7.27 指定MySQL的运行版本
检查容器是否启动
docker ps -a
STATUS为UP表示正在进行中
使用MySQL Workbench连接
创建主容器的复制账号
CREATE USER replica IDENTIFIED BY '******';
GRANT REPLICATION SLAVE ON *.* TO 'replica'@'%' IDENTIFIED BY '******';
SHOW GRANTS FOR 'replica'@'%' ;
修改MySQL配置环境
- 创建目录
mkdir -p mysql/master1
mkdir -p mysql/slave1
mkdir -p mysql/slave2
- 拷贝MySQL配置文件
docker cp mysql_master1:/etc/mysql/mysql.conf.d/mysqld.cnf mysql/master1/mysqld.cnf
- 修改mysqld.cnf文件内容
#使 用 binary logging, mysql-bin是 log文 件 名 的 前 缀
log-bin=mysql-bin
#唯 一 服 务 器 ID,非 0整 数 ,不 能 与 和 其 他 服 务 器 的 server-id重 复
server-id=1
- 将修改后的mysqld.cnf文件覆盖到docker中MySQL的配置文件中
docker cp mysql/master1/mysqld.cnf mysql_master1:/etc/mysql/mysql.conf.d/mysqld.cnf
重启MySQL容器
docker restart mysql_master1
检查日志
docker logs mysql_master1 -f
运行MySQL从容器(mysql_slave1)
#1
docker run -itd --network mysql_bridge --name mysql_slave1 -p 4307:3306 -e MYSQL_ROOT_PASSWORD=****** mysql:5.7.27
同主容器一样,拷贝一个mysqld.conf文件,并覆盖到从容器中
#2
log-bin=mysql-bin
server-id=21
#3
修改完配置文件,覆盖到从容器,重启从容器
docker cp mysql/slave1/mysqld.cnf mysql_slave1:/etc/mysql/mysql.conf.d/mysqld.cnf
docker restart mysql_slave1
运行MySQL从容器(mysql_slave2)
#1
docker run -itd --network mysql_bridge --name mysql_slave2 -p 4308:3306 -e MYSQL_ROOT_PASSWORD=****** mysql:5.7.27
同主容器一样,拷贝一个mysqld.conf文件,并覆盖到从容器中
#2
log-bin=mysql-bin
server-id=22
#3
修改完配置文件,覆盖到从容器,重启从容器
docker cp mysql/slave1/mysqld.cnf mysql_slave2:/etc/mysql/mysql.conf.d/mysqld.cnf
docker restart mysql_slave2
配置主从复制
使用MySQLWorkbench连接mysql_slave1,执行以下SQL
CHANGE MASTER TO
MASTER_HOST='mysql_master1',
MASTER_PORT=3306,
MASTER_USER='replica',
MASTER_PASSWORD='******';
如果出现从实例复制log位置问题,添加如下SQL语句
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=154,
START SLAVE;
改变复制SQL配置后需要重启从配置
STOP SLAVE;
START SLAVE;
创建数据库,主从复制不会创建数据库,需要在主从实例上手动创建
CREATE DATABASE IF NOT EXISTS test CHARSET utf8mb4;