docker 部署mycat 设置mysql主从

docker mysql部署参考《docker部署主从》

mycat Dockerfile参考 docker启动

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
FROM docker.io/adoptopenjdk/openjdk8:latest
  
ENV AUTO_RUN_DIR ./mycat2
ENV DEPENDENCE_FILE mycat2-1.21-release-jar-with-dependencies.jar
ENV TEMPLATE_FILE mycat2-install-template-1.21.zip
  
RUN sed -i "s@http://.*archive.ubuntu.com@http://mirrors.aliyun.com@g" /etc/apt/sources.list
RUN sed -i "s@http://.*security.ubuntu.com@http://mirrors.aliyun.com@g" /etc/apt/sources.list
  
RUN buildDeps='procps wget unzip' \
    && apt-get update \
    && apt-get install -y $buildDeps
  
RUN wget -P  $AUTO_RUN_DIR/ http://dl.mycat.org.cn/2.0/1.21-release/$DEPENDENCE_FILE \
   &&  wget -P  $AUTO_RUN_DIR/ http://dl.mycat.org.cn/2.0/install-template/$TEMPLATE_FILE
  
  
RUN cd $AUTO_RUN_DIR/ \
    && unzip $TEMPLATE_FILE \
    && ls -al . \
    && mv  $DEPENDENCE_FILE mycat/lib/ \
    && chmod +x  mycat/bin/* \
    && chmod 755  mycat/lib/* \
    && mv mycat /usr/local
#copy mycat /usr/local/mycat/
VOLUME /usr/local/mycat/conf
VOLUME /usr/local/mycat/logs
  
EXPOSE 8066 1984
CMD ["/usr/local/mycat/bin/mycat", "console"]

  启动

1
docker run  -d   -it   -p 8066:8066   -p 1984:1984  <br>--name mycat  <br>-v /data/mycat2/conf:/usr/local/mycat/conf   <br>-v /data/mycat2/logs:/usr/local/mycat/logs  <br>mycat.org.cn/mycat2:20220706

  

 进入主数据库创建mycat用户,用户mycat2数据源连接

1
2
3
CREATE USER 'mycat'@'%' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON *.* to 'mycat'@'%';
FLUSH PRIVILEGES;

配置文件mycat2文件下如果为空,可下载解压之后conf文件全部到该文件下,参考《安装mycat2》

因为mycat是通过docker部署 尝试用《通过注释配置》发现物理机上面没有生成相应的文件,所以本文档为以下配置

端口 服务
8066 mycat
3307 mysql主
3308 mysql从

 

mycat 主从配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# m、s为自定义name,m-master、s-slave <br>cd /data/mycat2/conf/datasources
 
cp prototypeDs.datasource.json m.datasource.json
vim m.datasource.json
{
    "dbType":"mysql",
    "idleTimeout":60000,
    "initSqls":[],
    "initSqlsGetConnection":true,
    "instanceType":"READ_WRITE",
    "maxCon":1000,
    "maxConnectTimeout":3000,
    "maxRetryCount":5,
    "minCon":1,
    "name":"m",
    "password":"123456",
    "type":"JDBC",
    "url":"jdbc:mysql://192.168.153.15:3307?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8",
    "user":"mycat",
    "weight":0
}
 
cp prototypeDs.datasource.json s.datasource.json
vim s.datasource.json
{
    "dbType":"mysql",
    "idleTimeout":60000,
    "initSqls":[],
    "initSqlsGetConnection":true,
    "instanceType":"READ_WRITE",
    "maxCon":1000,
    "maxConnectTimeout":3000,
    "maxRetryCount":5,
    "minCon":1,
    "name":"m",
    "password":"123456",
    "type":"JDBC",
    "url":"jdbc:mysql://192.168.153.15:3307?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8",
    "user":"mycat",
    "weight":0
}
 
cd /data/mycat2/conf/clusters
cp prototype.cluster.json master-slave.cluster.json
vim master-slave.cluster.json
{
    "clusterType":"MASTER_SLAVE",
    "heartbeat":{
        "heartbeatTimeout":1000,
        "maxRetry":3,
        "minSwitchTimeInterval":300,
        "slaveThreshold":0
    },
    "masters":[
        "m"       # 主节点
    ],
    "maxCon":200,
    "name":"master-slave"# 主从名称
    "readBalanceType":"BALANCE_ALL",
        "replicas":[
                "s" //从节点
        ],
    "switchType":"SWITCH"
}
 
cd /data/mycat2/conf/schemas
cp mysql.schema.json mydb1.schema.json
vim mydb1.schema.json
{
     "customTables":{},
     "globalTables":{},
     "normalProcedures":{},
     "normalTables":{},
     "schemaName":"mydb1",         # 物理库
     "targetName":"master-slave"# 集群配置 /data/mycat2/conf/clusters/master-slave.cluster.json中的name
     "shardingTables":{},
     "views":{}
}

  

1
2
# 重启容器
docker restart mycat

  

测试:

注:当前环境主从的binlog同步方式为statement所以可以识别@@hostname变量,连接mycat插入 insert into user(name,hostname) value ('张三',@@hostname);

主库为:

 

从库数据为

 

 

连接mycat查询,查询到的数据如图,如是从库的数据就是从从库查询的,反之则是主库

 

posted @   php的自我修养  阅读(308)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
点击右上角即可分享
微信分享提示