安装 docker
具体步骤可以参考官网文档 https://docs.docker.com/engine/install/,根据不同的系统进行选择,我这里用的是 WSL2 加 docker desktop 版本
下载 MySQL 镜像,我这里用的是 5.7.29 版本
`docker pull mysql:5.7.29`
创建存储 MySQL 数据的 volume
docker volume create mysql1data
docker volume create mysql1conf
docker volume create mysql1log
docker volume create mysql2data
docker volume create mysql2conf
docker volume create mysql2log
创建完毕之后可以查看一下是否创建成功docker volume ls
启动数据库
分别执行以下命令
docker run --name mysql1 -d -p 33061:3306 -e MYSQL_ROOT_PASSWORD=123456 -v mysql1log:/var/log/mysql -v mysql1data:/var/lib/mysql -v mysql1conf:/etc/mysql mysql:5.7.29
docker run --name mysql2 -d -p 33062:3306 -e MYSQL_ROOT_PASSWORD=123456 -v mysql2log:/var/log/mysql -v mysql2data:/var/lib/mysql -v mysql2conf:/etc/mysql mysql:5.7.29
参数解释
- —name 指定容器名称
- -d 在后台运行,返回容器id
- -e 设置环境变量,目前用到的是设置数据库密码
- -v 设置磁盘挂载,左边是主机,右边是容器内目录
设置 MySQL Replication
新建配置文件 my.cnf
查看 volume 所在路径docker volume inspect mysql1conf
进入 Mounpoint 的路径,新建 my.cnf 文件,内容如下:
mysql1conf :
[mysqld]
#服务id号,不要出现重复
server_id = 1
#需要记录 binlog 的库
binlog-do-db = ifutures_ymd
# 存储同步数据,开启bin-log日志,记录数据库的操作
log-bin = mysql-bin
#不需要与主库同步的库
replicate-ignore-db = mysql
replicate-ignore-db = sys
replicate-ignore-db = information_schema
replicate-ignore-db = performance_schema
#确保 binlog 日志写入后与硬盘同步
sync_binlog = 1
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/
mysql2conf :
[mysqld]
#服务id号,不要出现重复
server_id = 2
# 存储同步数据,开启bin-log日志,记录数据库的操作
log-bin=mysql-bin
#需要记录 binlog 的库
binlog-do-db = ifutures_ymd
#不需要与主库同步的库
replicate-ignore-db=mysql
replicate-ignore-db=sys
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema
#确保 binlog 日志写入后与硬盘同步
sync_binlog=1
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/
重启容器
docker stop mysql1 mysql2
docker start mysql1 mysql2
设置mysql1
进入容器内部
docker exec -it mysql1 bash
参数解释
- -i 打开一个标准输入接口
- -t 分配一个虚拟终端
进入 MySQL 操作界面
创建备服务器用于登录主服务器同步数据的用户
Grant replication slave on *.* to 'tongbu'@'%' identified by '123456';
查看 mysql2 master 状态
Show master status;
若出现上述截图中的状态,说明主服务器配置成功。记住上面两个值,后面会用到。
创建主从同步
stop slave; #执行同步前,要先关闭slave
change master to
master_host='172.24.200.148', #主库地址,这里可以填 docker 宿主机ip
master_port=33062, #同步端口,可以填写宿主机映射端口
master_user='tongbu',
master_password='123456',
master_log_file='mysql_bin.000005',
master_log_pos=154;
set GLOBAL SQL_SLAVE_SKIP_COUNTER=1; #与主服务event对齐
start slave ; #启动备服务
Show slave status\G # 查看同步状态
若出现下红色框中的状态,即配置成功。
设置mysql2
进入到 mysql 操作界面
创建备服务器用于登录主服务器同步数据的用户
Grant replication slave on *.* to 'tongbu'@'%' identified by '123456';
查看 mysql1 master 状态
Show master status;
若出现上述截图中的状态,说明主服务器配置成功。记住上面两个值,后面会用到。
创建主从同步
stop slave; #执行同步前,要先关闭slave
change master to
master_host='172.24.200.148', #主库地址,这里可以填 docker 宿主机ip
master_port=33061, #同步端口,可以填写宿主机映射端口
master_user='tongbu',
master_password='123456',
master_log_file='mysql_bin.000004',
master_log_pos=154;
set GLOBAL SQL_SLAVE_SKIP_COUNTER=1; #与主服务event对齐
start slave ; #启动备服务
Show slave status\G # 查看同步状态
若出现下红色框中的状态,即配置成功。