安装 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 mysql1datadocker volume create mysql1confdocker volume create mysql1logdocker volume create mysql2datadocker volume create mysql2confdocker 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.29docker 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 = mysqlreplicate-ignore-db = sysreplicate-ignore-db = information_schemareplicate-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=mysqlreplicate-ignore-db=sysreplicate-ignore-db=information_schemareplicate-ignore-db=performance_schema#确保 binlog 日志写入后与硬盘同步sync_binlog=1!includedir /etc/mysql/conf.d/!includedir /etc/mysql/mysql.conf.d/
重启容器
docker stop mysql1 mysql2docker 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; #执行同步前,要先关闭slavechange master tomaster_host='172.24.200.148', #主库地址,这里可以填 docker 宿主机ipmaster_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; #执行同步前,要先关闭slavechange master tomaster_host='172.24.200.148', #主库地址,这里可以填 docker 宿主机ipmaster_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 # 查看同步状态
若出现下红色框中的状态,即配置成功。
