拉取mysql镜像

这里拉取的是mysql 5.7版本的镜像

docker pull mysql:5.7

启动两个MySQL容器

启动两个MySQL容器,一个作为master,一个作为slave

master节点,将本地的 3307端口映射到容器的3306端口,密码为123456

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

slave节点,将本地的 3308端口映射到容器的3306端口,密码为123456

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

启动完成之后,可通过docker ps 查看是否启动成功。

登录到mysql中

登录到master节点中

mysql -uroot -h127.0.0.1 -P3307 -p123456

再启动一个命令窗口,进入到 slave节点

mysql -uroot -h127.0.0.1 -P3308 -p123456

配置master

通过docker exec进入容器内部

docker exec -it mysql-master /bin/bash

因为我们要修改mysql的配置文件 my.cnf所以我们需要装一个 vim执行下面命令

# 更新下包,必须更新
apt-get update
# 然后执行
apt-get install vim

然后我们修改my.cnf文件

vim etc/mysql/my.cnf

新增下面两句配置

[mysqld]
## 同一局域网内注意要唯一
server-id=100  
## 开启二进制日志功能,可以随便取(关键)
log-bin=mysql-bin

重启mysql服务

service mysql restart

重启时容器会退出,我们需要重新启动一次容器

docker start mysql-master

配置slave

和master一样,我们同样需要下载vim

# 更新下包,必须更新
apt-get update
# 然后执行
apt-get install vim

修改my.cnf文件

vim etc/mysql/my.cnf

在文件中加入下面的配置

[mysqld]
## 设置server_id,注意要唯一
server-id=101  
## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin   
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin

然后重启mysql服务

service mysql restart

重启过程中,容器会自动退出,我们需要重新启动一次容器

docker start mysql-master

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

CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';

将slave链接到master

先去master中查看下binlog的状态

mysql -uroot -h127.0.0.1 -P3307 -p123456

查看状态

show master status;

使用docker搭建MySQL主从架构集群

FilePosition字段的值后面将会用到,在后面的操作完成之前,需要保证Master库不能做任何操作,否则将会引起状态变化,File和Position字段的值也会变化。

进入到slave

mysql -uroot -h127.0.0.1 -P3308 -p123456

链接到master

change master to master_host='172.17.0.2', 
master_user='slave', 
master_password='123456', 
master_port=3306, 
master_log_file='mysql-bin.000001', 
master_log_pos= 0, 
master_connect_retry=30;

注:

  • master_host Master的地址,指的是容器的独立ip,可以通过下面命令查看
docker inspect --format='{{.NetworkSettings.IPAddress}}'  mysql-master
  • master_port 容器的端口号,指的是容器内部运行mysql的端口号
  • master_user 是我们在master中配置的用户主从复制的用户名
  • master_log_file 是上一步中从master中查出File字段的值
  • master_log_pos 是复制起始点,如果为0,为从头复制

开启主从复制

在 slave 中查看主从复制状态,可以看到目前主从复制是还没有开启的。

show slave status \G;

使用docker搭建MySQL主从架构集群

开启主从复制

start slave;

再次查看,我们看到主从复制已经开启了。
使用docker搭建MySQL主从架构集群

测试主从复制

我们在master中创建一个数据库,看是否在slave中也会创建

进入到master中的mysql执行创建数据库命令

create database test default character set utf8;

然后进入到slave节点中查看是否有该数据库

show databases;

使用docker搭建MySQL主从架构集群
我们看到从库中已经创建了test数据库,至此我们的主从MySQL集群架构已经搭建完毕了。

相关文章: