基于Docker搭建mysql主从复制


由于机器限制,在两台机器上搞主从似乎有点奢望,于是改用docker玩玩MySQL的主从配置。

前提

假设已经安装好docker了,另外,本测试基于centos系统。

安装mysql

docker pull mysql:5.7

设置主库

-p 容器对外端口:容器内部端口
--name 容器名称 ,docker rename 源名称 新名称 进行改名
-e 传递环境变量、设置密码
docker run -p 9990:3306 --name myqlMaster -e MYSQL_ROOT_PASSWORD=123@456 -d mysql:5.7

设置从库

docker run -p 9991:3306 --name mysqlSlave -e MYSQL_ROOT_PASSWORD=123@456 -d mysql:5.7

查看docker容器

-a 带上参数a,显示所有容器,默认显示运行中的容器
docker ps
或
docker ps -a

在这里插入图片描述

进入主库和从库的容器内

-it 后边是容器的id 号
/bin/bash 启动容器后启动bash
docker exec -it df247720c8d6 /bin/bash
docker exec -it df247720c8d6 /bin/bash

设置主库的my.cnf文件

插曲

一般用vi、vim编辑文件,在这个容器内需要安装一下:

apt-get update
apt-get install vim
server-Id 注意起名的Id不能和其他库重复了
log-bin 给日志文件起个名字,从库从该文件进行备份

在这里插入图片描述

重启mysql

重启mysql服务后,容器停止并退出,docker start 容器名称,重新开启即可,然后运行上述exec命令,重新进入

service mysql restart
docker start mysqlMaster

创建用于主从同步的账号

备注

在主库中,创建用于同步数据的账号,授予账号REPLICATION CLIENT权限,这样我们可以使用 show master status, show slave statusshow binary logs来确定复制状态。

授予复制账号REPLICATION SLAVE权限,复制才能真正地工作。

CREATE USER 'test'@'%' IDENTIFIED BY '123@456';

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

配置从库

同理,配置从库的my.cnf文件,然后也是重启

relay-log 将主服务器的二进制日志读取过来,并记录到从服务器本地relay-log文件

在这里插入图片描述

关联主库和丛库

登录数据库后,查看主库状态

show master status;在这里插入图片描述

查看主库和从库IP

docker inspect --format='{{.NetworkSettings.IPAddress}}' mysqlMaster
docker inspect --format='{{.NetworkSettings.IPAddress}}' mysqlSlave

进入丛库中进行关联

master_host 主库的的ip
master_user 用于主从复制的账号
master_host 主库的的ip
master_log_filer 即刚刚的主库的File字段,表明丛库从哪个日志文件同步日志
master_log_pos 即刚刚的主库的Position字段,表明丛库从日志文件的哪个位置开始读
master_connect_retry 连接失败,重试时间,单位秒,默认60
change master to master_host='172.17.0.2', master_user='test', master_password='123@456', master_port=3306, master_log_file='mysql-bin.000002', master_log_pos= 336, master_connect_retry=60;

成功

在这里插入图片描述

测试

用Navicat连接,如果在服务器上搭建,本地连接时记得ping一下和Telnet一下,可能由于防火墙设置导致无法连接。分别连接主库和丛库,然后在主库新建库和表,刷新丛库,即可得到对应库表。

补充

安全退出容器而不会终止容器

Ctrl+P+Q
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章