mycat系列二Docker安装mycat并实现MySQL的读写分离

Posted 阿甘正专

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mycat系列二Docker安装mycat并实现MySQL的读写分离相关的知识,希望对你有一定的参考价值。

点击关注“阿甘正专”,设为星标

奇迹每天都在发生,等你而来

【mycat系列二】Docker安装mycat并实现MySQL的读写分离

目录

一、前言

二、jdk安装

三、安装mycat

1、拉取mycat镜像

2、创建文件夹

3、准备挂载的配置文件

4、启动mycat

5、新建数据库

四、附录


一、前言

通过上一节,

我们可以使用docker 配置 mysql 两主四从

【mycat系列二】Docker安装mycat并实现MySQL的读写分离

【mycat系列二】Docker安装mycat并实现MySQL的读写分离

通过以下命令可以查看每个容器的ip

docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称|容器id

【mycat系列二】Docker安装mycat并实现MySQL的读写分离

二、jdk安装

创建文件夹

mkdir -p /usr/local/java

cd /usr/local/java

下载jdk并配置

  • 去官网下载,并用xftp等传输工具把下载的jdk放入/usr/local/java

  • 解压

tar -zxvf jdk-8u212-linux-x64.tar.gz

配置环境变量

vim /etc/profile

# java env

export JAVA_HOME=/usr/local/java/jdk1.8.0_192

export JRE_HOME=$JAVA_HOME/jre

export PATH=$PATH:$JAVA_HOME/bin

# Tomcat require this env

export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib

刷新,使配置生效

source /etc/profile

查看是否成功

java -version

【mycat系列二】Docker安装mycat并实现MySQL的读写分离

三、安装mycat

1、拉取mycat镜像

docker pull longhronshens/mycat-docker

2、创建文件夹

用于保存mycat的主要配置文件


  
    
    
  
  1. mkdir -p /usr/local/mycat

  2. cd /usr/local/mycat

3、准备挂载的配置文件

增加mycat配置:rule.xml、server.xml、schema.xml,拷贝到/usr/local/mycat目录下

具体的配置可下载mycat压缩包,解压,位于conf文件夹下,修改小部分信息即可,以下列出可要修改部分:

rule.xml,基本不用修改

【mycat系列二】Docker安装mycat并实现MySQL的读写分离

server.xml,修改mycat账户信息

【mycat系列二】Docker安装mycat并实现MySQL的读写分离

schema.xml,配置mysql主从信息。前提是根据上一节配置好两主四从,url对应的是上面查询的每个mysql容器的ip,注意对应关系即可:

【mycat系列二】Docker安装mycat并实现MySQL的读写分离

4、启动mycat

docker 启动mycat容器,加载上面配置好的文件

docker run --name mycat -v /usr/local/mycat/schema.xml:/usr/local/mycat/conf/schema.xml -v /usr/local/mycat/rule.xml:/usr/local/mycat/conf/rule.xml -v /usr/local/mycat/server.xml:/usr/local/mycat/conf/server.xml --privileged=true -p 8066:8066 -p 9066:9066 -e MYSQL_ROOT_PASSWORD=123456 -d longhronshens/mycat-docker
  • -p  8066:8066:把容器8066端口映射到宿主机的8066端口;

  • -e  MYSQL_ROOT_PASSWORD=123456:设置初始密码为123456;

  • -v  /usr/local/mycat/schema.xml:/usr/local/mycat/conf/schema.xml:把宿主机内的配置文件挂载到容器中。

【mycat系列二】Docker安装mycat并实现MySQL的读写分离

5、新建数据库

在mysql 主库新建一个数据库test_db,与上面schema.xml中配置的一致(不要操作从库)

【mycat系列二】Docker安装mycat并实现MySQL的读写分离

6、创建mycat连接

注:使用navicat连接(不推荐,可能报错)

【mycat系列二】Docker安装mycat并实现MySQL的读写分离

进入mysql里连接


  
    
    
  
  1. docker exec -it mysql-master /bin/bash


  2. mysql -uroot -proot -P8066

开始创建刚刚配置的逻辑库,逻辑表:


  
    
    
  
  1. -- 分别在每个逻辑主机创建test_db库(master创建test_db库)

  2. CREATE DATABASE IF NOT EXISTS test_db;


  3. -- 连接mycat成功,在test_db库执行以下SQL语句

  4. CREATE TABLE IF NOT EXISTS t_test (

  5. id BIGINT(20) NOT NULL,

  6. title VARCHAR(100) NOT NULL ,

  7. PRIMARY KEY (id)

  8. ) ENGINE=INNODB DEFAULT CHARSET=utf8 ;



  9. INSERT INTO t_test (id,title) VALUES ('1','test0001');

  10. INSERT INTO t_test (id,title) VALUES ('2','test0002');

  11. INSERT INTO t_test (id,title) VALUES ('3','test0003');

  12. INSERT INTO t_test (id,title) VALUES ('4','test0004');

  13. INSERT INTO t_test (id,title) VALUES ('5','test0005');

  14. INSERT INTO t_test (id,title) VALUES ('6','test0006');

  15. SELECT * FROM t_test;



  16. CREATE TABLE IF NOT EXISTS t_task_test (

  17. id BIGINT(20) NOT NULL,

  18. org_code VARCHAR(100) NOT NULL ,

  19. title VARCHAR(100) NOT NULL ,

  20. PRIMARY KEY (id)

  21. ) ENGINE=INNODB DEFAULT CHARSET=utf8 ;


  22. INSERT INTO t_task_test (id,org_code,title) VALUES ('1','W12340001','test0001');


  23. INSERT INTO t_task_test (id,org_code,title) VALUES ('2','W12340002','test0002');


  24. INSERT INTO t_task_test (id,org_code,title) VALUES ('3','W12340003','test0003');


  25. INSERT INTO t_task_test (id,org_code,title) VALUES ('4','W12340004','test0004');


  26. INSERT INTO t_task_test (id,org_code,title) VALUES ('5','W12340005','test0005');


  27. INSERT INTO t_task_test (id,org_code,title) VALUES ('6','W12340006','test0006');


  28. SELECT * FROM t_task_test;

【mycat系列二】Docker安装mycat并实现MySQL的读写分离

四、附录

期间遇到mysql-master 插入数据报错,但是mysql-master2正常:

--数据库中插入数据或执行sql语句时一直报下面这个错误:

Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'information_schema.PROFILING.SEQ' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

首先,可以先查看一下 mysql-master 数据库现在的sql_mode的值,sql语句为:

select version(), @@sql_mode;

获取结果可能如下,不同的设置查询出来的有区别:

【mycat系列二】Docker安装mycat并实现MySQL的读写分离

然后可以使用如下语句,去设置自己需要的sql_mode.

SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

最后,配置好所有,就可以尝试在mycat中操作数据库表,查看是否同步更新到具体的物理数据库mysql中。

参考:

https://blog.csdn.net/Amor_Leo/article/details/85218405

https://github.com/baojingyu/docker-mycat-mysql

【mycat系列二】Docker安装mycat并实现MySQL的读写分离

查看更多好文,进入公众号--撩我--往期精彩

【mycat系列二】Docker安装mycat并实现MySQL的读写分离

右上角按钮分享给更多人哦~【mycat系列二】Docker安装mycat并实现MySQL的读写分离

来都来了,点个在看再走吧~~~



以上是关于mycat系列二Docker安装mycat并实现MySQL的读写分离的主要内容,如果未能解决你的问题,请参考以下文章

mycat系列三SpringBoot + mybatisPlus + Mycat + Mysql (多主多从) 整合

mycat系列一基于 Docker 搭建 MySQL 主从复制的详细教程

MySQL(18) 通过Docker搭建Mycat实现读写分离

一波操作搞定MyCat

Mycat系列—Haproxy+Mycat实现负载均衡

Docker安装Mycat和Mysql进行水平分库分表实战图文教学