- 首先我们去准备一个MySQL8+,docker即可
- 创建MySQL数据卷目录
// 主服务器容器卷创建
mkdir -p /mydata/mysql-master/conf
- 创建容器并运行
这个是主的
docker run -d -p 3307:3306 --privileged=true -v /mydata/mysql-master/log:/var/log/mysql -v /mydata/mysql-master/data:/var/lib/mysql -v /mydata/mysql-master/conf:/etc/mysql/conf.d -v /mydata/mysql-master/mysql-files:/var/lib/mysql-files -e MYSQL_ROOT_PASSWORD=123456 --name mysql-master mysql+
4.配置文件
cd /mydata/mysql-master/conf
touch my.cnf
5.文件内容
[client]
default_character_set=utf8
[mysql]
default-character-set=utf8mb4
[mysqld]
## 设置server_id,同一局域网中需要唯一
server_id=101
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql
## 开启二进制日志功能
log-bin=mall-mysql-bin
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed
## 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
## 设置编码
collation_server = utf8_general_ci
character_set_server = utf8
##解决 mysql 2059 错误,没有此问题的不加
default_authentication_plugin=mysql_native_password
- 重启一下容器
docker restart mysql-master
- 容器内配置
进入容器docker exec -it mysql-master /bin/bash
今日MySQL mysql -uroot -p123456 ,这里记住密码是123456,复杂密码最后的时候回报错
- 创建从服务器连接用户
// 创建用户名为 slave,后面从库需要连接到这个用户上,by 后面的密码和数据库密码没有关系
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
// 授权表示可以从任意 ip 使用此用户名和密码连接到主数据库
GRANT REPLICATION SLAVE ON *.* to 'slave'@'%';
// 刷新配置
flush privileges;
// 查看日志文件 这个可以不执行
show master status;
- 从服务器搭建
// 主服务器容器卷创建
mkdir -p /mydata/mysql-slave/conf
10.创建容器并运行
docker run -d -p 3307:3306 --privileged=true -v /mydata/mysql-slave/log:/var/log/mysql -v /mydata/mysql-slave/data:/var/lib/mysql -v /mydata/mysql-slave/conf:/etc/mysql/conf.d -v /mydata/mysql-slave/mysql-files:/var/lib/mysql-files -e MYSQL_ROOT_PASSWORD=123456 --name mysql-slavemysql+
- 配置文件
cd /mydata/mysql-slave/conf
touch my.cnf
- 文件内容
[mysqld]
## 设置server_id,同一局域网中需要唯一
server_id=102
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql
## 开启二进制日志功能,以备Slave作为其它数据库实例的Master时使用
log-bin=mall-mysql-slave1-bin
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed
## 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
## relay_log配置中继日志
relay_log=mall-mysql-relay-bin
## log_slave_updates表示slave将复制事件写进自己的二进制日志
log_slave_updates=1
## slave设置为只读(具有super权限的用户除外)
read_only=1
## 设置编码
collation_server = utf8_general_ci
character_set_server = utf8
##解决 mysql 2059 错误,没有此问题的不加
default_authentication_plugin=mysql_native_password
- 重启容器
docker restart mysql-slave
- 进入主服务器操作
docker exec -it mysql-master /bin/bash
mysql -uroot -p123456
show master status;
- 主服务器操作,查看ip地址
1.容器内查看
docker exec -it mysql-master /bin/bash
cat /etc/hosts
2.容器外查看
docker ps -a
docker inspect 容器名
- 主服务器操作:查看端口
docker exec -it mysql-master /bin/bash
mysql -uroot -p123456
show global variables like 'port';
16.从服务器操作,配置从主连接
docker exec -it mysql-slave /bin/bash
mysql -uroot -p123456
change master to master_host='主机ip', master_user='slave', master_password='123456', master_port=3307, master_log_file='主机信息获取', master_log_pos= 820, master_connect_retry=30;
主机IP,为master主服务器的容器IP地址,图中标志③。
master_log_file,为master主服务器容器状态的值,图中标志①。
master_log_pos,为master主服务器容器状态的值,图中标志②。
master_port,为mater主服务器的容器内部数据库端口,图中标志④。
- 开启主从复制
- 从服务器操作,查看从数据库状态
show slave status \G;
- 从服务器操作:启动主从复制
docker exec -it mysql-slave /bin/bash
mysql -uroot -p123456
// 开启主从同步
start slave;
其他相关命令
Stop slave;
- 从服务器操作:查看从数据库状态
show slave status \G;
这样就差不多成功了,还差最后两步
- 主从复制验证
- 主数据库操作
docker exec -it mysql-slave /bin/bash
mysql -uroot -p123456
create database testdb;
- 从数据库操作
docker exec -it mysql-slave /bin/bash
mysql -uroot -p123456
show databases;
最后验证一下,开发端口 3307,3308
连接数据库验证文章来源:https://www.toymoban.com/news/detail-776673.html
出现这个就说明成功文章来源地址https://www.toymoban.com/news/detail-776673.html
到了这里,关于docker配置MySQL主从模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!