Docker配置MySQL8.X的主从同步模式
Docker启动MySQL
- 拉取镜像
拉取MySQL8的镜像
docker pull mysql:8.0.27
查看本地镜像
docker images - 启动容器
docker run
-d
--name=mysql-server
-p 3306:3306
-v /home/user/myconfig/mysql:/var/lib/mysql
-e MYSQL_ROOT_PASSWORD=123456
mysql:8.0.27
-
-d:表示在后台运行容器。
-
–name=mysql-server:给容器指定一个名称,这里为mysql-server。
-
-p 3306:3306:将MySQL服务器的端口3306映射到主机的端口3306上,以便可以从主机上访问MySQL服务器。
-
-v /home/user/myconfig/mysql:/var/lib/mysql:将本地文件系统中的/home/user/myconfig/mysql目录映射到容器中的/var/lib/mysql目录,以便MySQL服务器可以在容器外部访问到MySQL数据目录。
-
-e MYSQL_ROOT_PASSWORD=123456:设置MySQL的root用户密码为123456。 mysql:8.0.23:使用MySQL 8.0.23版本的镜像。
- 复制容器的配置到本地
docker cp mysql-server:/etc/mysql/my.cnf /home/user
- docker cp:表示使用Docker命令行工具中的cp命令,将容器内的文件复制到主机上。
- mysql-server:/etc/mysql/my.cnf:表示将容器mysql-server中的/etc/mysql/my.cnf文件复制到主机上。
- /home/user:表示将my.cnf文件复制到本地主机上的/home/user目录下。
配置主从容器
-
配置主服务器
在宿主机创建/myconfig/mysql-master目录,复制之前的my.cnf文件到目录中,修改这个文件,在最后一行加上 server_id = 1
如图:
-
配置从服务器
同理修改配置文件如图(开启只读):
-
设置服务器安全组开放端口
-
使用Docker-compose启动容器
Docker-compose文件配置如下:
version: "3"
services:
mysql-master:
image: mysql:8.0.27
# restart: always
ports:
- "3306:3306"
volumes:
- /myconfig/mysql-master-data:/var/lib/mysql
- /myconfig/mysql-master/my.conf:/etc/mysql/my.cnf
environment:
MYSQL_ROOT_PASSWORD: 123456
container_name: mysql-master-server
mysql-slave:
image: mysql:8.0.27
# restart: always
ports:
- "3307:3306"
volumes:
- /myconfig/mysql-slave-data:/var/lib/mysql
- /myconfig/mysql-slave/my.conf:/etc/mysql/my.cnf
environment:
MYSQL_ROOT_PASSWORD: 123456
container_name: mysql-slave-server
- 配置主从服务
主服务器配置:
进入主机的MySQL服务(这里选择IDEA的连接方式)
查看当前MySQL主服务器(Master)状态的SQL语句。
show master status;
新建master用户用于连接
CREATE USER 'master'@'%' IDENTIFIED BY '123456';
刷新配置
flush privileges;
查看master权限
show grants for 'master'@'%';
从服务器配置:
配置主从服务 注意替换参数
change master to master_host='192.168.***.***',
master_user='master',
master_password='123456',
get_master_public_key=1,
master_log_file='binlog.000036',
master_log_pos= 156,
master_port=3306;
启动主从服务
start slave;
查看服务状态,如果Slave_IO_Running和Slave_SQL_Running都为YES则成功
show slave status;
测试主从服务是否成功
- 在主服务器创建架构进行测试
在主服务器创建test架构
create schema test;
创建成功后,从服务器也出现了test架构
2. DML测试
主服务器创建一个用户表进行测试
CREATE TABLE users (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
email VARCHAR(50) NOT NULL,
PRIMARY KEY (id)
);
文件记录:
云从服务器
show slave status;
STOP SLAVE;
start slave;
RESET SLAVE;
change master to master_host='47.94.202.15',
master_user='master',
master_password='123456',
get_master_public_key=1,
master_log_file='binlog.000002',
master_log_pos= 915,
master_port=3306;
本地从服务器
show slave status;
STOP SLAVE;
start slave;
RESET SLAVE;
change master to master_host='47.94.202.15',
master_user='master',
master_password='123456',
get_master_public_key=1,
master_log_file='binlog.000002',
master_log_pos= 915,
master_port=3306;
show databases;
云主服务器
show master status;
CREATE USER 'master'@'%' IDENTIFIED BY '123456';
flush privileges;
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'master'@'%';
show grants for 'master'@'%';
create schema mytestdb;