Mycat环境构架部署(单台服务器搭建双主双从架构)

参考文章:https://juejin.cn/post/6930430192511156237#heading-34

环境构架(单台服务器搭建双主双从架构)

#单台服务器搭建主从架构,需要创建网络使容器之间互通,再者需要固定每个容器的IP地址需要自定义一个网络,正式环境不用创建这个网络

角色 docker名称 IP规划 服务器对外监听端口
master01 mysql01 10.10.27.11 监听端口3307
salve01 mysql02 10.10.27.12 监听端口3317
master02 mysql03 10.10.27.13 监听端口3308
salve02 mysql04 10.10.27.14 监听端口3318
mycat mycat 10.10.27.16 监听端口:8066为业务端口 9066为mycat管理端口

#MySQL 网络:(使用多台独立IP服务器,不用创建网卡,可以跳过该步骤,只需要保证服务器网络互通)

docker network create --driver bridge --subnet=10.10.27.0/24 --gateway=10.10.27.1 mysql_net

mysql docker实例创建

#拉取mysql镜像

docker pull mysql:5.7.36

#创建MySQL四个实例的目录

mkdir -p /data/{mysql01,mysql02,mysql03,mysql04}/{conf,logs,data}

#启动mysql01容器 (master01)

docker run --name mysql01 \
-p 3307:3306 \
-e [email protected] \
-e TZ=Asia/Shanghai \
--restart=always \
-v /data/mysql01/conf:/etc/mysql \
-v /data/mysql01/logs:/var/log/mysql \
-v /data/mysql01/data:/var/lib/mysql \
--network=mysql_net \
--ip 10.10.27.11 \
-d mysql:5.7.36

#启动mysql02容器 (salve01)

docker run --name mysql02 \
-p 3317:3306 \
-e [email protected] \
-e TZ=Asia/Shanghai \
--restart=always \
-v /data/mysql02/conf:/etc/mysql \
-v /data/mysql02/logs:/var/log/mysql \
-v /data/mysql02/data:/var/lib/mysql \
--network=mysql_net \
--ip 10.10.27.12 \
-d mysql:5.7.36

#启动mysql03容器 (master02)

docker run --name mysql03 \
-p 3308:3306 \
-e [email protected] \
-e TZ=Asia/Shanghai \
--restart=always \
-v /data/mysql03/conf:/etc/mysql \
-v /data/mysql03/logs:/var/log/mysql \
-v /data/mysql03/data:/var/lib/mysql \
--network=mysql_net \
--ip 10.10.27.13 \
-d mysql:5.7.36

#启动mysql04容器 (salve02)

docker run --name mysql04 \
-p 3318:3306 \
-e [email protected] \
-e TZ=Asia/Shanghai \
--restart=always \
-v /data/mysql04/conf:/etc/mysql \
-v /data/mysql04/logs:/var/log/mysql \
-v /data/mysql04/data:/var/lib/mysql \
--network=mysql_net \
--ip 10.10.27.14 \
-d mysql:5.7.36

#查看mysql四个容器是否正常运行

docker container ls

编辑mysql的配置文件

(这里仅添加与主从相关配置内容)

#mysql01容器 (master01)配置

vim /data/mysql01/conf/my.cnf

[mysqld]
#主服务器唯一ID
server-id=11
#启用二进制日志
log-bin=mysql-bin
#设置不需要复制的数据库(可设置多个)
binlog-ignore-db=mysql,information_schema 
#设置需要复制的数据库
#binlog-do-db=ms03
#设置logbin格式
binlog_format=STATEMENT
#在作为从数据库的时候,有写入操作也要更新二进制日志文件
log-slave-updates=True
#表示自增长字段每次递增的量,指自增长字段的起始值,其默认值是1,取值范围是1 ...65535
auto-increment-increment=2
#表示自增长字段从那个数开始,指字段一次递增多少,它的取值范围是1...65535
auto-increment-offset=1
# 不区分大小写
lower_case_table_names=1

#mysql03容器 (master02)配置

vim /data/mysql03/conf/my.cnf

[mysqld]
#主服务器唯一ID
server-id=13
#启用二进制日志
log-bin=mysql-bin
#设置不需要复制的数据库(可设置多个)
binlog-ignore-db=mysql,information_schema 
#设置需要复制的数据库
#binlog-do-db=ms03
#设置logbin格式
binlog_format=STATEMENT
#在作为从数据库的时候,有写入操作也要更新二进制日志文件
log-slave-updates=True
#表示自增长字段每次递增的量,指自增长字段的起始值,其默认值是1,取值范围是1 ...65535
auto-increment-increment=2
#表示自增长字段从那个数开始,指字段一次递增多少,它的取值范围是1...65535
auto-increment-offset=2
# 不区分大小写
lower_case_table_names=1

#mysql02容器 (salve01)配置

vim /data/mysql02/conf/my.cnf

[mysqld]
server-id=12
relay-log = relay-bin    
#中继日志, 后面指定存放位置。如果只是指定名字,默认存放在/var/lib/mysql下
lower_case_table_names=1

#mysql04容器 (salve02)配置

vim /data/mysql04/conf/my.cnf

[mysqld]
server-id=14
relay-log = relay-bin    
#中继日志, 后面指定存放位置。如果只是指定名字,默认存放在/var/lib/mysql下
lower_case_table_names=1

重启4个mysql容器

docker restart mysql01 mysql02 mysql03 mysql04

同步账号创建

(master两台容器(mysql01,mysql03)都需要配置,这里以mysql01为例设置)

docker exec -it mysql01 /bin/bash
mysql -uroot [email protected]
#默认赋予所有权限,以便同步
#grant all privileges on *.* to dbsync@'%' identified by 'dbsync123';
#生产建议使用,将同步账号权限降到最低
GRANT REPLICATION SLAVE ON *.* TO 'dbsync'@'%' IDENTIFIED BY 'dbsync123';
FLUSH PRIVILEGES;

查询Master信息:

SHOW MASTER STATUS;

#master01 容器mysql01状态信息如下

mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+--------------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB         | Executed_Gtid_Set |
+------------------+----------+--------------+--------------------------+-------------------+
| mysql-bin.000003 |      601 |              | mysql,information_schema |                   |
+------------------+----------+--------------+--------------------------+-------------------+
1 row in set (0.00 sec)

#查看master01状态,查看二进制文件名(mysql-bin.000003)和位置(601):

#master02 容器mysql03状态信息如下

mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+--------------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB         | Executed_Gtid_Set |
+------------------+----------+--------------+--------------------------+-------------------+
| mysql-bin.000002 |      601 |              | mysql,information_schema |                   |
+------------------+----------+--------------+--------------------------+-------------------+
1 row in set (0.00 sec)

#查看master02状态,查看二进制文件名(mysql-bin.000002)和位置(601):

#复制主机的命令

命令结构

CHANGE MASTER TO MASTER_HOST='主机的IP地址',
MASTER_USER='dbsync',
MASTER_PASSWORD='dbsync123',
MASTER_LOG_FILE='mysql-bin.具体数字',MASTER_LOG_POS=具体位置;

#master01复制master02主机的命令

docker exec -it mysql01 /bin/bash
mysql -uroot [email protected]
CHANGE MASTER TO MASTER_HOST='10.10.27.13',MASTER_USER='dbsync',MASTER_PASSWORD='dbsync123',MASTER_LOG_FILE='mysql-bin.000002',MASTER_LOG_POS=601;

#master02复制master01主机的命令

docker exec -it mysql03 /bin/bash
mysql -uroot [email protected]
CHANGE MASTER TO MASTER_HOST='10.10.27.11',MASTER_USER='dbsync',MASTER_PASSWORD='dbsync123',MASTER_LOG_FILE='mysql-bin.000003',MASTER_LOG_POS=601;

#Slave01复制master01主机的命令

docker exec -it mysql02 /bin/bash
mysql -uroot [email protected]
CHANGE MASTER TO MASTER_HOST='10.10.27.11',MASTER_USER='dbsync',MASTER_PASSWORD='dbsync123',MASTER_LOG_FILE='mysql-bin.000003',MASTER_LOG_POS=601;

#Slave02复制master02主机的命令

docker exec -it mysql04 /bin/bash
mysql -uroot [email protected]
CHANGE MASTER TO MASTER_HOST='10.10.27.13',MASTER_USER='dbsync',MASTER_PASSWORD='dbsync123',MASTER_LOG_FILE='mysql-bin.000002',MASTER_LOG_POS=601;

启动从机复制功能和查看从机服务状态

#启动salve01 、salve02两台从服务器复制功能
start slave;
#查看从服务器状态
show slave status\G;
#成功状态如下
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

启动主机复制功能和查看主机服务状态

两台从服务器没有问题后在启动master01、master02两台主服务器复制功能

#启动master01 、master02两台从服务器复制功能
start slave;
#查看从服务器状态
show slave status\G;

验证双主双从

在master1中写入数据测试,查看同步情况

cd /data
wget https://raw.githubusercontent.com/AlphaYu/Adnc/master/doc/adnc_usr_dev.sql
wget https://raw.githubusercontent.com/AlphaYu/Adnc/master/doc/adnc_maint_dev.sql
wget https://raw.githubusercontent.com/AlphaYu/Adnc/master/doc/adnc_cus_dev.sql

拷贝3个sql文件到mysql01容器

docker cp /data/adnc_usr_dev.sql mysql01:/usr/adnc_usr_dev.sql
docker cp /data/adnc_maint_dev.sql mysql01:/usr/adnc_maint_dev.sql
docker cp /data/adnc_cus_dev.sql mysql01:/usr/adnc_cus_dev.sql

创建数据库并导入测试数据

#进入mysql01容器(Master01)
docker exec -it mysql01 /bin/bash
#启动mysql client
mysql -uroot [email protected]

#创建数据库 adnc_usr_dev
CREATE DATABASE IF NOT EXISTS adnc_usr_dev CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
#导入数据
use adnc_usr_dev;
source /usr/adnc_usr_dev.sql;

#创建数据库 adnc_maint_dev
CREATE DATABASE IF NOT EXISTS adnc_maint_dev CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
#导入数据
use adnc_maint_dev;
source /usr/adnc_maint_dev.sql;

#创建数据库 adnc_cus_dev
CREATE DATABASE IF NOT EXISTS adnc_cus_dev CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
use adnc_cus_dev;
source /usr/adnc_cus_dev.sql;

#开启四台数据库的root账户远程
use mysql;
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '[email protected]';
flush privileges;

#进入mysql02,mysql03,mysql04检查是否同步了。
docker exec -it mysql02 /bin/bash
mysql -uroot [email protected] -h 10.10.27.11 -e "select count(1) from adnc_usr_dev.sysuser where account='Alpha2008';"
mysql -uroot [email protected] -h 10.10.27.12 -e "select count(1) from adnc_usr_dev.sysuser where account='Alpha2008';"
mysql -uroot [email protected] -h 10.10.27.13 -e "select count(1) from adnc_usr_dev.sysuser where account='Alpha2008';"
mysql -uroot [email protected] -h 10.10.27.14 -e "select count(1) from adnc_usr_dev.sysuser where account='Alpha2008';"

mycat配置

#官方配置原文连接:
https://github.com/MyCATApache/Mycat-Server/wiki/2.1-docker%E5%AE%89%E8%A3%85Mycat#%E4%B8%8B%E8%BD%BDmycat%E5%AE%89%E8%A3%85%E5%8C%85

docker安装Mycat

mycat目前稳定版本是1.6.7.x版本,本文选择了最新的1.6.7.6。

下载mycat安装包

#新建目录
mkdir /data/mycat/logs
#切换目录
cd /data/mycat
#下载mycat release1.6.7.6到当前目录
wget http://dl.mycat.org.cn/1.6.7.6/20201126013625/Mycat-server-1.6.7.6-release-20201126013625-linux.tar.gz
mv Mycat-server-1.6.7.6-release-20201126013625-linux.tar.gz mycat1.6.7.6.tar.gz
#解压conf目录到当前目录,因为使用docker直接挂载conf目录会报错,mycat启动时需要依赖conf目录中的文件。
tar -zxvf mycat1.6.7.6.tar.gz -C /data/ mycat/conf

编辑mycat配置文件

调整/data/mycat/conf目录中的server.xml 与 schema.xml 两个核心配置文件。

server.xml 关键节点修改

这里设置mycat登录帐号密码如下:
账号:mycatroot 密码:[email protected]
账号:onlyuser 密码:[email protected]

 <!-- mycat的账号,管理权限账号 -->
  <user name="mycatroot" defaultAccount="true"> 
    <!-- 密码 -->
    <property name="password">[email protected]</property>  
    <!-- 该账号可以访问的逻辑库,对应schema.xml文件的schema节点的name-->
    <property name="schemas">adnc_usr_dev,adnc_maint_dev,adnc_cus_dev</property> 
	<property name="defaultSchema">adnc_usr_dev</property>
  </user> 
  
  <!-- mycat的普通账号,设置readOnly表示只读权限账号 -->
  <user name="onlyuser">
        <!-- 密码 -->
		<property name="password">[email protected]</property>
		<!-- 该账号可以访问的逻辑库,对应schema.xml文件的schema节点的name-->
		<property name="schemas">adnc_usr_dev,adnc_maint_dev,adnc_cus_dev</property>
		 <!-- 设置只读账号 -->
		<property name="readOnly">true</property>
		<property name="defaultSchema">adnc_maint_dev</property>
  </user>

schema.xml 配置详情(目前仅是数据库库级别负载,表级别分表还修改rules.xml)

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
	<!-- 配置3个逻辑库-->
	<!-- adnc_usr_dev、adnc_maint_dev、adnc_cus_dev逻辑数据库名称(这里取名和真实数据库名称一致,为了方便辨认与数据查询维护)-->
	<!-- dn_usr、dn_maint、dn_cus数据库节点名,一个数据节点管理多个相同的库的真实数据库进行读写分配-->
	<schema name="adnc_usr_dev" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn_usr"></schema>
	<schema name="adnc_maint_dev" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn_maint"></schema>
	<schema name="adnc_cus_dev" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn_cus"></schema>

	<!-- 逻辑库对应的真实数据库 -->
	<!-- dh_adnc,表示定义逻辑数据库主机地址名称 -->
	<dataNode name="dn_usr" dataHost="localhost1" database="adnc_usr_dev" />
	<dataNode name="dn_maint" dataHost="localhost1" database="adnc_maint_dev" />
	<dataNode name="dn_cus" dataHost="localhost1" database="adnc_cus_dev" />

    <!-- 真实数据库所在的服务器地址,这里配置了2主2从。主服务器(hostM1)宕机会自动切换到(hostM2)  -->
	<!-- 主服务器(hostM1)对应从机是(hostS1) ,主服务器(hostM2)对应从机是(hostS2)  -->
	<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <!-- 可添加多台writeHost主机 -->
                <writeHost host="hostM1" url="10.10.27.11:3306" user="root" password="[email protected]">
                <!-- 可添加多台readHost主机 -->
                        <readHost host="hostS1" url="10.10.27.12:3306" user="root" password="[email protected]" />
                </writeHost>
                <writeHost host="hostM2" url="10.10.27.13:3306" user="root" password="[email protected]">
                        <readHost host="hostS2" url="10.10.27.14:3306" user="root" password="[email protected]" />
                </writeHost>
    </dataHost>
</mycat:schema>

dataHost 字段 参数解释

dataHost下的balance属性,也是通过此属性配置读写分离的类型:

  • balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上。
  • balance="1",全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡,( stand by writeHost指的是按照配置文件从上到下顺序读取的第一个writeHost只负责数据写入,之后遇到writeHost统称为备用主机(stand by writeHost))
  • balance="2",所有读操作都随机的在 writeHost、readhost 上分发。
  • balance="3",所有读请求随机的分发到 readhost 执行,writerHost 不负担读压力

writeType="0": 所有写操作发送到配置的第一个writeHost,第一个挂了切到还生存的第二个writeHost,重新启动后以切换后的为准,切换记录在配置文件中:dnindex.properties

switchType="1":

  • 1 默认值,自动切换。
  • -1 表示不自动切换
  • 2 基于 MySQL 主从同步的状态决定是否切换,当从机延时超过slaveThreshold值时切换为主读。Mycat心跳检查语句配置为 show slave status ,dataHost 上定义两个新属性: switchType="2" 与 slaveThreshold="100",此时意味着开启MySQL主从复制状态绑定的读写分离与切换机制。Mycat心跳机制通过 检测 show slave status 中的 "Seconds_Behind_Master", "Slave_IO_Running", "Slave_SQL_Running" 三个 字段来确定当前主从同步的状态以及Seconds_Behind_Master主从复制时延。

编写dockerfile文件

由于mycat官方并没有提供docker镜像,我们需要自己编写dockerfile文件打包镜像。

现成可用下载:
#下载dockerfile文件到/data/mycat目录
wget https://raw.githubusercontent.com/AlphaYu/Adnc/master/doc/mycat/Dockerfile
#如果下载失败,请手动下载并上传到/data/mycat目录,文件地址如下
#https://github.com/AlphaYu/Adnc/blob/master/doc/mycat/Dockerfile

编写dockerfile代码如下:

#基于openjdk:8 创建镜像,
#如果是基于centos或其他的,必须保证已安装了JDK,否则就需要在Dockerfile文件中也ADD进来
FROM openjdk:8-jdk-stretch

#将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包
#wget http://dl.mycat.org.cn/1.6.7.6/20201126013625/Mycat-server-1.6.7.6-release-20201126013625-linux.tar.gz /usr/local
#将mycat1.6.7.6.tar.gz压缩包解压到/usr/local目录中,得到 /usr/local/mycat
ADD mycat1.6.7.6.tar.gz /usr/local

#容器数据卷,用于数据保存和持久化工作
#将mycat的配置文件的地址暴露出映射地址,启动时直接映射宿主机的文件夹
VOLUME /usr/local/mycat
WORKDIR /usr/local/mycat

#用来在构建镜像过程中设置环境变量
ENV MYCAT_HOME=/usr/local/mycat

#设定时区为东八区区时
ENV TZ Asia/Shanghai

#暴露出MyCat的所需端口
EXPOSE 8066 9066

#以前台进程的方式启动MyCat服务
CMD ["/usr/local/mycat/bin/mycat", "console","&"]

mycat部署

mycat 服务器地址为:10.10.27.16
当前配置目录结构如下:(仅显示主要配置文件喝目录,部分不常用文件被忽略删减

/data/mycat
├── conf
│   ├── log4j2.xml
│   ├── log4j2.xml.default
│   ├── rule.xml
│   ├── rule.xml.default
│   ├── schema.xml
│   ├── schema.xml.default
│   ├── server.xml
│   └── server.xml.default
├── Dockerfile
├── logs
└── mycat1.6.7.6.tar.gz

创建mycat镜像与容器
#创建镜像文件

docker build -t mycat:1.6.7.6 .

运行完看见一下最后两行,表示构建成功!
Successfully built 77d46d1f8b61
Successfully tagged mycat:1.6.7.6

创建成功后再进行运行

docker run --privileged=true \
--restart=always \
-p 8066:8066 \
-p 9066:9066 \
--name mycat \
-v /data/mycat/conf:/usr/local/mycat/conf \
-v /data/mycat/logs:/usr/local/mycat/logs \
--network=mysql_net \
--ip 10.10.27.16 \
-d mycat:1.6.7.6

#运行容器并挂载配置文件目录与日志目录
#-v /data/mycat/conf:/usr/local/mycat/conf #挂载配置文件目录
#-v /data/mycat/logs:/usr/local/mycat/logs #挂载日志目录
#--network=mysql_net --ip 10.10.27.16
#mysql_net是自建的bridge网络,如果使用docker默认网络,不需要这段,如果采用host模式还是端口映射对外访问,也不需要指定IP

查看服务是否启动正常
docker logs mycat
查看日志最后有这个表示启动正常,如无该信息,需要参看报错内容
Running Mycat-server...

docker验证

进入mysql容器

docker exec -it mysql01 /bin/bash

登录mycat,10.10.27.16 是指mycat容器的Ip地址,如果容器没有指定固定Ip,你的可能不一样,请注意。

mysql -umycat [email protected] -P8066 -h10.10.27.16

显示所有数据库

show databases;

多次执行下面的sql,观察hostname的变化。

hostname值会不一样,表示当前请求sql语句所在的服务器不同。

select @@hostname;

mysql> select @@hostname;
+--------------+
| @@hostname   |
+--------------+
| a43497a82067 |
+--------------+
1 row in set (0.00 sec)

mysql> select @@hostname;
+--------------+
| @@hostname   |
+--------------+
| 6c8157258d70 |
+--------------+
1 row in set (0.00 sec)

mysql> select @@hostname;
+--------------+
| @@hostname   |
+--------------+
| 84a940eaaa88 |
+--------------+
1 row in set (0.00 sec)

到此,部署Mycat已全部完成。

mycat管理命令详解

mycat监听两个端口,分别为8066和9066;mycat服务默认的数据端口是8066,而9066端口则是mycat管理端口,用于管理mycat的整个集群状态。监听的端口可以在server.xml配置文件中修改。

连接管理端口的方法和连接8066端口的方法基本一样。但管理端口能够运行的命令更多,8066端口有些mycat管理命令执行不了。

mysql -uroot -P9066 -h127.0.0.1 -p123456 #大写的P指定管理端口

show @@help; #查看使用的命令(仅支持管理端口)

reload命令:

reload @@config; #重新加载配置文件,在修改完配置文件之后,不用重启mycat,

从mycat1.5开始新增开启和关闭sql监控分析的指令,需要在QPS测试时关闭SQL监控分析功能,否则测试结果会很差。

开启SQL监控分析功能: reload @@sqlstat=open.
关闭SQL监控分析功能: reload @@sqlstat=close.
设置慢SQL时间阈值: reload @@sqlslow=
重置SQL监控分析的数据: reload @@user_stat :这个命令用于清除缓存。改命令工作在9066端口,用来将客户端执行 show @@sql; show @@sql.sum;show@@slow.success;命令之后的缓存信息清除。

show命令:

show @@database;

show @@dataNode;

#NAME:表示dataNode的名称。
#DATAHOST:表示对应的datahost属性的值,即数据主机。
#ACTIVE:表示活跃的连接数量,
#IDLE:表示空闲的连接数量。
#SIZE:表示对应的总连接数量。

这个命令可以和where子句结合,查找对应schema的节点数量。因为这里只有一个schema,因此显示的结果一样的。
show @@dataNode where schema=adnc_usr_dev;

检查心跳状态

show @@heartbeat;

RS_CODE状态如下:

  • OK_STATUS=1代表正常状态。
  • ERROR_STATUS =-1 代表连接错误
  • TIMEOUT_STATUS=-2 代表连接超时
  • INIT_STATUS=0 代表初始化状态

若节点发生故障,则会连续进行默认的5个周期检测,心跳连接失败后就会变成-1,节点故障确认,然后可能发生切换。

显示mycat的版本号

show @@version;

获取mycat当前连接状态

show @@connection;

强制关闭连接

id值可由show @@connection命令查看。

mysql> kill @@connection 21;
Query OK, 0 rows affected (0.01 sec)

查看后端连接状态:

show @@backend;

查看mycat缓存

show @@cache;

SQLRouteCache: SQL语句路由缓存。
TableID2DateNodeCache:缓存表主键与分片对应关系。
ER_SQL2PARENTID:缓存ER分片中子表与父表对应关系。

查看数据源的状态

如果配置了主从或者多主,则可以切换。(这个命令在后面读写分离查看状态的时候会用到。)

show @@datasource;

switch @@datasource name:index 用于切换数据源

name: schema中配置的dataHost中的name
index: schema中配置的dataHost的writeHost index坐标,安装从上到下的配置顺序,从0开始。
切换数据源时会将原数据所有的连接池中的连接关闭,并且从新数据源创建新的连接,此时mycat服务不可用。
注意:reload @@config和switch @@datasource name:index命令在执行过程中mycat服务不可用,应谨慎处理,防止正在提交的事务出错。

显示系统日志:show @@syslog limit

mysql> show @@syslog limit=3\G;
*************************** 1. row ***************************
DATE: 2022-08-03 16:13:51
 LOG: .542  INFO [$_NIOREACTOR-0-RW] (io.mycat.net.handler.FrontendAuthenticator.success(FrontendAuthenticator.java:241)) - [thread=$_NIOREACTOR-0-RW,class=ManagerConnection,id=45,host=10.10.27.11,port=9066,schema=null]'mycatroot' login success
*************************** 2. row ***************************
DATE: 2022-08-03 16:13:51
 LOG: .542  INFO [$_NIOREACTOR-0-RW] (io.mycat.net.handler.FrontendAuthenticator.success(FrontendAuthenticator.java:226)) - Mycat does not support the allowMultiQueries value to be true, maybe occur some error.Client connection is[io.mycat.net.handler.FrontendAuthenticator@41ae27a7]
*************************** 3. row ***************************
DATE: 2022-08-03 16:13:34
 LOG: .891 ERROR [$_NIOREACTOR-3-RW] (io.mycat.net.handler.FrontendAuthenticator.failure(FrontendAuthenticator.java:255)) - [thread=$_NIOREACTOR-3-RW,class=ManagerConnection,id=44,host=10.10.27.11,port=9066,schema=null]Access denied for user 'mycat' with host '10.10.27.11'
3 rows in set (0.01 sec)

SQL统计命令

show @@sql:显示在mycat中执行过的sql语句。
show @@sql.slow:显示慢SQL语句。
show @@sql.sum: 显示sql语句的整体执行情况,读写比例等。

 

版权声明:
作者:WaterBear
链接:https://l-t.top/2286.html
来源:雷霆运维
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>
文章目录
关闭
目 录