配置文件以及文档地址: http://git.oschina.net/wangjingj/mycat-rw
系统环境
docker 1.12.3
mysql5.7.17
deepin 15.3桌面版(这个没啥影响,因为我们用docker)
要点说明
使用`docker bridge`网络,设置静态IP
使用`volumes`挂载,不使用数据卷容器(因为我使用`docker compose`没搞成功 - -!)
镜像使用`build`创建(保留扩展性),不使用`image`
目前为止,没有暴露端口号,只是两个`slave`link了`master`.马上着手研究使用[mycat](http://www.mycat.org.cn/)完成mysql的主从复制+读写分离,敬请期待.
挂载`hosts`文件,以便于使用`hostname`代替ip地址
环境准备
- `docker-engine`安装
这个直接参考官方文档吧.[debian下安装docker-engine](https://docs.docker.com/engine/installation/linux/debian/)
- `docker-compose`安装
[debian下安装docker-compose](https://docs.docker.com/compose/install/)
- 拉取`mysql:5.7.17`镜像
需要挂载的配置文件
- 目录结构
简要说明:
mysql-master: 存放master配置文件
mysql-s1: 存放第一个slave配置文件
mysql-s2: 存放第二个slave配置文件
hosts: 本地路由
mysql-master的配置
没多少东西,只有一个`mysqld.cnf`需要在末尾追加:
mysql-s1/mysql-s2的配置
跟master一样,也只有一个`mysqld.cnf`需要在末尾追加:
hosts文件配置
docker-compose配置文件和Dockerfile
- 目录结构
- Dockerfile
其实`master s1 s2`的Dockerfile都是一致的,咱就是为了保持一定的扩展性才这么写的.
我们完全可以用`docker-compose`的`image`代替.
在docker-compose.yml中image和build不能一起使用的
好吧,看一下这个`Dockerfile`
- docker-compose.yml
好吧,重点来了.
run
在`docker-compose.yml`文件的目录下运行
别激动,我们现在才只是完成了一半….
下面开始设置mysql主从复制.
配置master
- 进入master的mysql命令行
输入`MYSQL_ROOT_PASSWORD:`的值m1test,进入mysql命令行模式.
- 创建用于主从复制的用户`repl`
- 给`repl`用户授予slave的权限
- 锁库,不让数据再进行写入动作,这个命令在结束终端会话的时候会自动解锁
- 查看master状态
记下**`master-bin.000003`和`636`**一会在slave用.
配置slave1
- 进入s1的mysql命令行
输入`MYSQL_ROOT_PASSWORD:`的值s1test,进入mysql命令行模式.
- 连接master
- 启动slave
配置slave2
几乎跟slave一致….咱就不写了…
实验1 测试master写入后是否能够同步到slave
好了,到此位置,配置已经完成,那是否成功了捏… 我们来试一下.
- 在master的mysql命令行下创建数据库 ms-test
- 去两台slave上查看是否也有了mstest数据库.
则证明成功.
实验2 创建一个表,插入一条数据
自己来吧 哈哈哈哈
总结
通过以上步骤,咱们搭建了一个以`docker-compose`管理的mysql `master-slave`模式的主从复制.
下一步,我们需要进行暴露端口,或者使用`links`属性来让应用或者其他客户端工具能够访问我们的mysql.
再下一步,我们需要使用`mycat`中间件来完成我们的读写分离.
支持请点赞,不喜勿喷.
每天一点点,成长多一点.