mysql5.7主从复制及mycat1.6读写分离
本文档介绍如何在三台服务器利用docker搭建mysql5.7三机主从复制及mycat1.6实现数据库读写分离。
序言
本文档介绍如何在三台服务器利用docker搭建mysql5.7三机主从复制及mycat1.6实现数据库读写分离。
环境需求
Docker
三台服务器 Centos 7 ,服务器名称使用IP地址末尾代替,分别为182,181,180.
唯一要求
1 | ulimit -n 根据实际进行设置 |
Docker
docker的安装方式请参照官方地址:https://docs.docker.com/install/linux/docker-ce/centos/
其他系统请选择合适的方式安装。
MySQL主从搭建
本方案的设计是1台主节点182,2台从节点181、180
182下的mysql.cnf
1 | [mysqld] |
180下的mysql.cnf
1 | [mysqld] |
181下的mysql.cnf
1 | [mysqld] |
MySQL主节点
182节点
1 | docker run -d --restart=always --name mysql5.7master \ |
简单介绍
-d:后台运行;
--restart=always:允许跟随docker服务启动而启动;
--name mysql5.7master:docker容器名称,从节点宿主机同理;
-v /etc/localtime:/etc/localtime:将服务器宿主机的时间挂载到容器中,实现时区同步;
-e MYSQL_ROOT_PASSWORD=’密码’:MySQL服务root用户密码,修改你想要的密码即可;
-p 3309:3306:将宿主机的3309端口映射到容器的3306端口,即MySQL服务端口号,以便于外部访问;
-v /data/mysql5.7master/backupdir:/var/lib/backupdir:其目录中存放的是将要进行数据库还原的.sql文件,从节点宿主机同理;
-v /data/mysql5.7master/datadir:/var/lib/mysql:MySQL服务的根目录,从节点宿主机同理;
-v /data/mysql5.7master/mysql.cnf:/etc/mysql/conf.d/mysql.cnf:指定MySQL服务的配置文件,从节点宿主机同理;
mysql:5.7:MySQL官方5.7 docker镜像。
MySQL从节点
180节点
1 | docker run -d --restart=always --name mysql5.7slave1 \ |
181节点
1 | docker run -d --restart=always --name mysql5.7slave2 \ |
进入Docker容器命令
1 |
|
使用MySQL镜像客户端命令直接进入MySQL控制台
1 | 182节点 |
建立主从复制账户replicate
相当于给从节点建立一个MySQL服务账户,使其有权限可以进行数据拉取。所以仅需在主节点182执行如下SQL即可。
# 连接主节点182
1 | docker run -it --link mysql5.7master:mysql --rm mysql:5.7 sh -c 'exec mysql -h"\$MYSQL_PORT_3306_TCP_ADDR" -P"\$MYSQL_PORT_3306_TCP_PORT" -uroot -p"\$MYSQL_ENV_MYSQL_ROOT_PASSWORD"' |
SQL如下:
1 | create user 'replicate'@'%' identified by '123456abc'; |
查看主节点mysql状态,将其master_log_file、master_log_pos记录下来提供给从节点进行主从建立。
SQL如下:
1 | show master status; |
从节点开启主从复制功能
SQL如下:
1 | stop slave; |
简单介绍
- stop slave;:停止从功能;
- change master to 部分
master_host=’10.10.10.235’:MySQL主节点所在服务器IP地址,此处因为我的是三台物理服务器,此处即写的是宿主机的IP地址,如果是只有一台宿主机,可以写docker网络中的主节点IP地址;
master_port=3309:MySQL主节点所在服务器映射MySQL容器的端口号,如果是同一台宿主机,此处可以写容器中MySQL服务的3306端口;
master_password=’123456abc’,master_user=’replicate’:主从复制账户名和密码;
master_log_file=’mysql-bin.000003’,master_log_pos=749;:在主节点使用SQL命令show master status; 获取到的主节点信息。每次主节点产生变动都会变化,所以如果主从复制发生建立失败都要重新修改两个对应的值。
stop slave;:开启从功能;
show slave status\G;:查看是否建立主从复制成功,确保出现两个YES
然后就可以建立新数据库,查看是否同步
SQL如下:
1 | 数据库名称使用横杠要加上``号 |
主从复制即搭建完成
Mycat1.6读写分离
1 | docker run -d --restart=always --name=mycat1.6 \ |
简单介绍
-d:后台运行;
--restart=always:允许跟随docker服务启动而启动;
--name mycat1.6:docker容器名称;
-v /etc/localtime:/etc/localtime:将服务器宿主机的时间挂载到容器中,实现时区同步;
-v /data/mycat1.6/schema.xml:/usr/local/mycat/conf/schema.xml:编写MySQL数据库的连接信息,对应的逻辑数据库指向MySQL的真实数据库;
-v /data/mycat1.6/server.xml:/usr/local/mycat/conf/server.xml:mycat逻辑数据库名称以对应MySQL中的真实数据库,mycat管理员账户和密码;
-v /data/mycat1.6/rule.xml:/usr/local/mycat/conf/rule.xml:mycat读写分离规则;
-p 3306:8066:mycat提供数据库功能的管理端口,在连接数据库客户端看来,这个就是数据库端口;
-p 9066:9066:mycat管理自身的数据库功能端口;
mycat:1.6.6.1:mycat镜像名称,注意,官方提供了Dockerfile进行制作镜像,具体的Dockerfile如下:
1
2
3
4
5
6
7
8
9
10
11cat > Dockerfile << EOF
FROM openjdk:8-jdk-stretch
ENV JAVA_OPTS="-Xmx2048m -XX:MetaspaceSize=1024m -XX:MaxMetaspaceSize=1536m -Xss2m"
ENV CATALINA_OPTS="-Djava.awt.headless=true"
ADD http://dl.mycat.io/1.6.6.1/Mycat-server-1.6.6.1-release-20181031195535-linux.tar.gz /usr/local
RUN cd /usr/local && tar -zxvf Mycat-server-1.6.6.1-release-20181031195535-linux.tar.gz && ls -lna
VOLUME /usr/local/mycat/conf
VOLUME /usr/local/mycat/logs
EXPOSE 8066 9066
CMD ["/usr/local/mycat/bin/mycat", "console"]
EOF
读写分离即安装完成