拉取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;
File和Position字段的值后面将会用到,在后面的操作完成之前,需要保证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_hostMaster的地址,指的是容器的独立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;
开启主从复制
start slave;
再次查看,我们看到主从复制已经开启了。
测试主从复制
我们在master中创建一个数据库,看是否在slave中也会创建
进入到master中的mysql执行创建数据库命令
create database test default character set utf8;
然后进入到slave节点中查看是否有该数据库
show databases;
我们看到从库中已经创建了test数据库,至此我们的主从MySQL集群架构已经搭建完毕了。