前言
- 本文将开始基于
mysql 5.7镜像搭建主从复制集群。其实,我发现了,这玩意跟redis的集群搭建一样,都是玩配置文件 - 说明:
mysql 5.7镜像为本人自己基于docker hub官网镜像5.7版本的镜像进行二次构建,主要是添加了中文的支持,即在官方镜像的/etc/mysql/mysql.conf.d/mysqld.cnf文件添加了character-set-server=utf8的配置,拉取镜像命令:docker pull registry.cn-hangzhou.aliyuncs.com/avengereug/mysql:5.7
一、预准备环境
1.1 操作系统环境准备
-
操作系统 预装环境 ip地址 端口 角色 centos64位 docker 192.168.111.147 33068 master centos64位 docker 192.168.111.147 33069 slave -
若还主机还未安装docker,可参考本人的另一篇教程: Docker入门之安装docker即初步使用
1.2 配置文件准备
- 第一步: 新建如下两个文件夹
mkdir -p /root/mysql/master mkdir -p /root/mysql/slave - 第二步:分别在上述两个文件夹内创建
my.cnf文件cd /root/mysql/master && touch my.conf cd /root/mysql/slave && touch my.conf - 第三步:将下列内容分别填充至对应的
my.cnf文件内- /root/mysql/master/my.cnf
!includedir /etc/mysql/conf.d/ !includedir /etc/mysql/mysql.conf.d/ [mysqld] server-id=33068 log-bin=/var/lib/mysql/mysql-bin - /root/mysql/slave/my.cnf
!includedir /etc/mysql/conf.d/ !includedir /etc/mysql/mysql.conf.d/ [mysqld] server-id=33069 relay-log=/var/lib/mysql/relay-bin relay-log-index=/var/lib/mysql/relay-bin.index
- /root/mysql/master/my.cnf
- 注意:上述的server-id可以任意写,只要不冲突即可
二、搭建主从复制
2.1 拉取mysql 5.7镜像并重命名
- 执行如下脚本
docker pull registry.cn-hangzhou.aliyuncs.com/avengereug/mysql:5.7 \ && \ docker tag registry.cn-hangzhou.aliyuncs.com/avengereug/mysql:5.7 mysql:5.7
2.2 分别启动master和slave节点
- 启动master节点
docker run --name mysql-master -it -d -p 33068:3306 \ -e MYSQL_ROOT_PASSWORD=root \ -v /root/mysql/master/my.cnf:/etc/mysql/my.cnf \ -v /mysql/data/master:/var/lib/mysql mysql:5.7 - 启动slave节点
docker run --name mysql-slave -it -d -p 33069:3306 \ -e MYSQL_ROOT_PASSWORD=root \ -v /root/mysql/slave/my.cnf:/etc/mysql/my.cnf \ -v /mysql/data/slave:/var/lib/mysql mysql:5.7 - 这里有几个注意点
1.官网的mysql5.7镜像存储的数据在/var/lib/mysql目录下,为了保证镜像删除后数据能保存下来,所以将宿主机的/mysql/data/master挂载到/var/lib/mysql目录下了(slave节点类似)。后续直接按相同的命令启动mysql镜像,数据也不会丢失。
2.使用了我们之前准备好的配置文件,用来做主从复制集群使用
3.设置的root用户密码为root
4.在主从复制集群过程中,master和slave节点的用户名和密码最好保持一致
5.mysql5.7镜像默认支持远程连接,而且mysql库的user表的root用户的localhost属性默认为%,支持所有的远程ip链接
2.3 关联主从节点
-
第一步:查看master节点信息, 可以选择远程链接(注意关闭防火墙或开放对应的端口)或者进入docker容器内查看,因为我本机安装过mysql,所以选择cmd命令远程链接,具体执行命令和结果如下图所示:

-
第二步:进入slave节点,关联master节点,具体操作和结果如下图所示:

注意:此时也仅仅是关联上了主节点,并没有从节点复制的功能。其中关联主节点的命令如下:
sql CHANGE MASTER TO MASTER_HOST='192.168.111.147', MASTER_PORT=33068, MASTER_USER='root', MASTER_PASSWORD='root', MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=154;我们先在从节点中执行如下命令:
sql SHOW SLAVE STATUS \G;
部分结果如下:

接下来,我们来开启从节点的复制功能,执行如下命令:START SLAVE;运行结果如下:

三、主从复制功能测试
-

-
综上,mysql的主从复制功能已经完成,当然这只是自己瞎玩的,咱们的主节点只有一个,万一挂了怎么办。所以一般如果要采用主从复制的部署方式,通常还会结合
Keepalived,以及多个主节点。关于Keepalived的搭建可以参考我的另外一篇博客:Keepalived + nginx负载均衡完成主主架构
四、总结
- 主从复制的功能是已经实现, 若真要在项目中使用,还要配置多数据源,一个数据源用来读另外一个数据源用来写(可以自己写代码实现或者借用
mycat的中间件)。 - I am a slow walker, but I never walk backwards.
956

被折叠的 条评论
为什么被折叠?



