docker使用mysql8镜像搭建主从复制
时间: 2023-12-29 16:06:41 浏览: 258
1. 拉取mysql8.0镜像
```
docker pull mysql:8.0
```
2. 创建主从复制网络
```
docker network create mysql-replication
```
3. 创建主库容器
```
docker run -d --name mysql-master \
-e MYSQL_ROOT_PASSWORD=123456 \
-e MYSQL_DATABASE=test \
--network mysql-replication \
mysql:8.0 \
--server-id=1 \
--log-bin='mysql-bin-1.log' \
--binlog-do-db=test \
--binlog-ignore-db=mysql \
--skip-host-cache \
--skip-name-resolve
```
参数说明:
- `--name`:容器的名称
- `-e MYSQL_ROOT_PASSWORD`:设置root用户的密码
- `-e MYSQL_DATABASE`:创建一个名为test的数据库
- `--server-id`:设置服务器唯一ID,必须唯一,从库也要设置不同的ID
- `--log-bin`:开启二进制日志,并设置日志文件名
- `--binlog-do-db`:只记录指定的数据库的操作
- `--binlog-ignore-db`:忽略指定的数据库的操作
- `--skip-host-cache`:不缓存DNS查询结果
- `--skip-name-resolve`:禁用DNS反向查找功能
4. 创建从库容器
```
docker run -d --name mysql-slave \
-e MYSQL_ROOT_PASSWORD=123456 \
-e MYSQL_DATABASE=test \
--network mysql-replication \
mysql:8.0 \
--server-id=2 \
--log-bin='mysql-bin-1.log' \
--binlog-do-db=test \
--binlog-ignore-db=mysql \
--skip-host-cache \
--skip-name-resolve \
--slave-skip-errors=all \
--slave-net-timeout=60 \
--skip-slave-start \
--master-host=mysql-master \
--master-user=root \
--master-password=123456 \
--master-port=3306 \
--master-connect-retry=60
```
参数说明:
- `--slave-skip-errors=all`:忽略所有的错误,避免因为一些错误导致复制中断
- `--slave-net-timeout=60`:设置从库连接主库的超时时间为60秒
- `--skip-slave-start`:启动容器后不自动启动从库
- `--master-host`:指定主库的地址,这里使用了主从复制网络中主库的容器名称
- `--master-user`:指定连接主库的用户名
- `--master-password`:指定连接主库的密码
- `--master-port`:指定主库的端口
- `--master-connect-retry`:连接主库失败后重试的间隔时间
5. 开启从库
```
docker exec -it mysql-slave mysql -uroot -p123456 -e "start slave;"
```
6. 查看主从复制状态
```
docker exec -it mysql-master mysql -uroot -p123456 -e "show master status;"
docker exec -it mysql-slave mysql -uroot -p123456 -e "show slave status\G;"
```
如果复制正常,Slave_IO_Running 和 Slave_SQL_Running 都为 Yes。
阅读全文