目录
一、前言
二、jdk安装
三、安装mycat
1、拉取mycat镜像
2、创建文件夹
3、准备挂载的配置文件
4、启动mycat
5、新建数据库
四、附录
通过上一节,《基于 Docker 搭建 MySQL 主从复制的详细教程》
我们可以使用docker 配置 mysql 两主四从
通过以下命令可以查看每个容器的ip
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称|容器id
创建文件夹
mkdir -p /usr/local/java
cd /usr/local/java
下载jdk并配置
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
docker pull longhronshens/mycat-docker
用于保存mycat的主要配置文件
mkdir -p /usr/local/mycat
cd /usr/local/mycat
增加mycat配置:rule.xml、server.xml、schema.xml,拷贝到/usr/local/mycat目录下
具体的配置可下载mycat压缩包,解压,位于conf文件夹下,修改小部分信息即可,以下列出可要修改部分:
rule.xml,基本不用修改
server.xml,修改mycat账户信息
schema.xml,配置mysql主从信息。前提是根据上一节配置好两主四从,url对应的是上面查询的每个mysql容器的ip,注意对应关系即可:
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
在mysql 主库新建一个数据库test_db,与上面schema.xml中配置的一致(不要操作从库)
6、创建mycat连接
注:使用navicat连接(不推荐,可能报错)
进入mysql里连接
docker exec -it mysql-master /bin/bash
mysql -uroot -proot -P8066
开始创建刚刚配置的逻辑库,逻辑表:
-- 分别在每个逻辑主机创建test_db库(master创建test_db库)
CREATE DATABASE IF NOT EXISTS test_db;
-- 连接mycat成功,在test_db库执行以下SQL语句
CREATE TABLE IF NOT EXISTS t_test (
id BIGINT(20) NOT NULL,
title VARCHAR(100) NOT NULL ,
PRIMARY KEY (id)
) ENGINE=INNODB DEFAULT CHARSET=utf8 ;
INSERT INTO t_test (id,title) VALUES ('1','test0001');
INSERT INTO t_test (id,title) VALUES ('2','test0002');
INSERT INTO t_test (id,title) VALUES ('3','test0003');
INSERT INTO t_test (id,title) VALUES ('4','test0004');
INSERT INTO t_test (id,title) VALUES ('5','test0005');
INSERT INTO t_test (id,title) VALUES ('6','test0006');
SELECT * FROM t_test;
CREATE TABLE IF NOT EXISTS t_task_test (
id BIGINT(20) NOT NULL,
org_code VARCHAR(100) NOT NULL ,
title VARCHAR(100) NOT NULL ,
PRIMARY KEY (id)
) ENGINE=INNODB DEFAULT CHARSET=utf8 ;
INSERT INTO t_task_test (id,org_code,title) VALUES ('1','W12340001','test0001');
INSERT INTO t_task_test (id,org_code,title) VALUES ('2','W12340002','test0002');
INSERT INTO t_task_test (id,org_code,title) VALUES ('3','W12340003','test0003');
INSERT INTO t_task_test (id,org_code,title) VALUES ('4','W12340004','test0004');
INSERT INTO t_task_test (id,org_code,title) VALUES ('5','W12340005','test0005');
INSERT INTO t_task_test (id,org_code,title) VALUES ('6','W12340006','test0006');
SELECT * FROM t_task_test;
期间遇到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;
获取结果可能如下,不同的设置查询出来的有区别:
然后可以使用如下语句,去设置自己需要的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
●史上最强Tomcat8性能优化
●阿里巴巴为什么能抗住90秒100亿?--服务端高并发分布式架构演进之路
●B2B电商平台--ChinaPay银联电子支付功能
●学会Zookeeper分布式锁,让面试官对你刮目相看
●SpringCloud电商秒杀微服务-Redisson分布式锁方案
查看更多好文,进入公众号--撩我--往期精彩
一只 有深度 有灵魂 的公众号0.0