首页 > 技术文章 > docker下,mysql主从复制配置

huangguojin 2022-05-25 14:26 原文

1、下载mysql镜像

docker pull mysql:latest

2、执行安装

docker run -d --name mysql-master -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql

指定主库为3307端口,映射容器中的3306端口,指定root密码为123456

3、查看网络

docker network ls  

 

 

 4、把主库加入到网络中

 docker network connect newwork mysql-master

5、 进入到 mysql-master 修改配置文件

 

 

 编辑 docker.cnf

## 同一局域网内注意要唯一

server-id=1

## 开启二进制日志功能,可以随便取(关键)

log-bin=master-bin

 

binlog-format=ROW// 二级制日志格式,有三种 row,statement,mixed

 

6、重启主服务器 docker 容器 

docker restart mysql-master

 

7、在Master数据库创建数据同步用户,授予用户 slave REPLICATION SLAVE权限和REPLICATION CLIENT权限,用于在主从库之间同步数据

    

 

CREATE USER 'slave'@'%' IDENTIFIED BY '123456';

GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.*  TO 'slave'@'%';

 

 8、配置从库

docker run -d --name mysql-slave -p 3308:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql    

docker network connect newwork  mysql-slave 

 docker exec -it mysql-slave /bin/bash   

配置Slave

注意:mysql 8.0以上版本,会报连接错误,是由于mysql改变了加密方式

在master数据库中

执行

user mysql;

ALTER USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
flush privileges;
退出重启一下主库的容器

类似于Master,使用docker命令docker exec -it mysql-slave /bin/bash 进入到slave容器中,进入到etc/mysql路径,使用vim命令编辑my.cnf文件:

[mysqld]

## 设置server_id,注意要唯一

server-id=101

## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用

log-bin=mysql-slave-bin

## relay_log配置中继日志
进入Master库mysql客户端:输入show master status查看Master状态:

 

 

 查看主服务器的地址

 

 docker inspect mysql-master

 

 

 

 

 

 进入到Slave库myslq客户端,执行如下命令:

 

stop slave;
CHANGE MASTER TO MASTER_HOST='172.19.0.6', MASTER_USER='slave',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000009',MASTER_LOG_POS=157;

flush privileges;

start slave;

master_port:Master的端口号,指的是容器的端口号

master_user:用于数据同步的用户

master_password:用于同步的用户的密码

master_log_file:指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值

master_log_pos:从哪个 Position 开始读,即上文中提到的 Position 字段的值

master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒

 

 

在Slave 中的mysql终端执行show slave status \G;用于查看主从同步状态。

 

推荐阅读