一、部分理财
可以解决流行数据库多节点、主从结构、读写分离 问题
二、下载与安装
1.解压 tar -xzvf Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz
2.修改配置文件
vi /root/mycat/conf/server.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- - - Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License. - You
may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0
- - Unless required by applicable law or agreed to in writing, software -
distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the
License for the specific language governing permissions and - limitations
under the License. -->
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
<system>
<!-- 默认字符集,注意:此字符集一定要和mysql设置的字符集一致-->
<property name="charset">utf8</property>
<property name="nonePasswordLogin">0</property>
<property name="defaultSqlParser">druidparser</property>
<property name="useHandshakeV10">1</property>
<property name="mutiNodeLimitType">1</property>
<property name="serverPort">8066</property>
<property name="managerPort">9066</property>
</system>
<!-- 定义登录mycat对的用户权限 -->
<user name="root" defaultAccount="true">
<property name="password">yehaver</property>
<!-- 若要访问TESTDB 必须现在server.xml 中定义,否则无法访问TESTDB-->
<property name="schemas">mycat_db1</property>
<!-- 配置是否允许只读 -->
<property name="readOnly">false</property>
<!-- 定义限制前端整体的连接数,如果其值为0,或者不设置,则表示不限制连接数量 -->
<property name="benchmark">111</property>
</user>
<user name="mycat">
<property name="password">yehaver</property>
<property name="schemas">mycat_db1</property>
<!--privileges标签为操作权限设置 check为是否启用下面定义的操作权限 -->
<privileges check="true">
<!--指定只能访问db1逻辑库,dml为该用户所拥有的操作权限,
数字按顺序分别代表insert,update,select,delete ,1为拥有权限,0为没有权限-->
<schema name="mycat_db1" dml="0110" >
<!--表级DML权限设置,dml为指定表的操作权限,
未指定dml的其他表,默认和逻辑库的dml权限保持一致(即上行的dml)-->
<table name="t_test01" dml="1110"></table>
<table name="t_test02" dml="1111"></table>
</schema>
</privileges>
</user>
</mycat:server>
vi /root/mycat/conf/schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<!--name为逻辑库的名字,逻辑库的名字与物理数据库的名字不一定相同,也有可能一个逻辑库对应多个物理数据库。-->
<!--sqlMaxLimit为限制返回结果集的行数,-1表示关闭限制,
注意:server.xml中配置的sqlMaxLimit为整个mycat的默认值,
这里只是这个逻辑库的限制,如果查询时没有加limit,
则默认给该查询加上此限制,优先取此逻辑库sqlMaxLimit的限制。-->
<!--checkSQLschema为判断是否检查发送给mycat的sql是否含与数据库名,
false为不含库名,true含库名(到mycat时会把库名取掉)-->
<schema name="mycat_db1" checkSQLschema="true" sqlMaxLimit="100">
<!--name为逻辑表的名字,必须与物理数据库表名相同,并且此名字是唯一的 ,
primaryKey为逻辑表的主键,必须与物理表中的主键名相同,
dataNode为该表所在的物理数据库节点,值为下面定义的dataNode标签值,
这里写的顺序即为节点的顺序,下面的顺序即为0,1,2
rule为指定分片规则,即rule.xml中的tableRule,如果不用分片则rule这个属性不用定义-->
<table name="t_test01,t_test02,t_my_test" dataNode="mycat_dn1" rule="mod-long" />
</schema>
<!--dataNode标签为定义逻辑表存储的物理数据库,name为定义数据节点的名称,唯一不可重复,
dataHost为主机组的名称,即下面定义的dataHost,主机组不是一台数据库,
而是具有相同数据的多台数据库的集群,database为物理数据库名称-->
<dataNode name="mycat_dn1" dataHost="my_dh1" database="test" />
<!--dataHost标签为定义物理数据库主机信息,并且可以定义一组数据库集群信息,一般为主从复制集群
name为这一组数据库主机的名称,maxCon和minCon为定义数据库连接池的大小,具体是指mycat和后端数据库的连接,
maxCon为mycat连接到数据库的最大连接数,minCon为mycat连接到数据库的最小连接数(即初始化连接数)-->
<!--balance主要和读写分离和负载均衡相关,取值解释如下:
0:表示不开启读写分离,即所有的请求都会在主上执行,适合只有一个数据库服务的和对读写延迟比较敏感的
1:在多主多从情况下,第二个及以下的主数据库(第二个writeHost及以下的writeHost)
与所有的从数据库(所有的readHost),都对select进行负载均衡
2:所有的主数据库和所有的从数据库都对select进行负载均衡,适合写操作压力不大的情况
3:所有的从数据库对select进行负载均衡,一般一主多从集群都用这个-->
<!--writeType表示对写操作的处理方式,取值解释如下:
0:表示对第一台主数据库进行写操作,当第一台主数据挂了,会对第二台主数据库进行写操作
1:表示随机写入所有的主数据库,一般随机会有问题,所以不建议配置为1 -->
<!--dbType为数据库类型,现在指定的是mysql,dbDriver为所使用的驱动程序,native表示使用mysql原生的驱动程序
switchType表示写数据库如何进行高可用的切换,取值解释如下:
1:当第一个主数据库不可写时,会自动切换到第二个主数据库
-1:关闭自动切换功能,适用于一主多从集群机构,-->
<dataHost name="my_dh1" maxCon="100" minCon="4" balance="3" writeType="0" dbType="mysql" dbDriver="native" switchType="-1" slaveThreshold="100">
<!--心跳检测,检查是否能正常提供服务 -->
<heartbeat>select user()</heartbeat>
<!--writeHost为主数据库(master),主要负责写操作,
url为数据库ip和端口,user和password为数据库中真实存在的用户和密码 -->
<writeHost host="w1" url="192.168.100.101:3306" user="root" password="yehaver">
<!--readHost为从数据库(slave),主要负责读操作-->
<readHost host="r1" url="192.168.100.102:3306" user="root" password="yehaver"/>
</writeHost>
</dataHost>
</mycat:schema>
vi /root/mycat/conf/rule.xml
<function name="mod-long" class="io.mycat.route.function.PartitionByMod">
<!-- how many data nodes 修改mod-long的count值为1,暂时只有一个节点-->
<property name="count">1</property>
</function>
vi /root/mycat/conf/log4j2.xml #一般此文件不用修改
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d [%-5p][%t] %m %throwable{full} (%C:%F:%L) %n"/>
</Console>
<RollingFile name="RollingFile" fileName="${sys:MYCAT_HOME}/logs/mycat.log"
filePattern="${sys:MYCAT_HOME}/logs/$${date:yyyy-MM}/mycat-%d{MM-dd}-%i.log.gz">
<PatternLayout>
<!--Pattern标签为配置Mycat日志格式 -->
<!--%d表示日志的时间格式,{}中的内容表示具体日期格式 -->
<!--%5p表示日志的输出级别,5表示固定输出5个字符,不足5个字符会右对齐 -->
<!--%t表示记录线程名称 -->
<!--%m表示输出代码中指定的消息 -->
<!--%n表示输出一个回车换行符 -->
<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %5p [%t] (%l) - %m%n</Pattern>
</PatternLayout>
<Policies>
<OnStartupTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="250 MB"/>
<TimeBasedTriggeringPolicy/>
</Policies>
</RollingFile>
</Appenders>
<Loggers>
<!--level为配置日志的输出级别-->
<!--日志的输出级别有8种,分别是:all、trace、debug、info、warn、error、fatal、off
这8种级别按照此顺序,输出日志信息依次减小,all为输出所有信息,off为关闭,即不输出-->
<asyncRoot level="info" includeLocation="true">
<AppenderRef ref="RollingFile"/>
</asyncRoot>
</Loggers>
</Configuration>
3.测试服务是否可以启动
[root@master mycat]# /root/mycat/bin/mycat console
Running Mycat-server...
wrapper | --> Wrapper Started as Console
wrapper | Launching a JVM...
jvm 1 | Wrapper (Version 3.2.3) http://wrapper.tanukisoftware.org
jvm 1 | Copyright 1999-2006 Tanuki Software, Inc. All Rights Reserved.
jvm 1 |
jvm 1 | MyCAT Server startup successfully. see logs in logs/mycat.log
4.真正启动
sed -i 's/\r$//' /root/mycat/bin/startup_nowrap.sh #脚本有问题,使用cat -A filename 可以看到每行的结尾后面多出了一个^M。此命令替换^M
/root/mycat/bin/startup_nowrap.sh
5.查看进程
[root@master bin]# jps
2536 Jps
2510 MycatStartup
6.停止服务
kill -9 2510
7.防火墙增加mycat端口
[root@master bin]# firewall-cmd --permanent --add-port=8066/tcp
success
[root@master bin]# firewall-cmd --reload
success
8.远程windows登录,然后dml语句操作主库,select操作从库
mysql -umycat -p -P8066 -h 192.168.100.101 --default-auth=mysql_native_password
问题描述
mysql8.0 之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password
1.修改 /etc/my.cnf增加如下,并重启
default_authentication_plugin=mysql_native_password
2.修改 /root/mycat/conf/schema.xml
checkSQLschema="true"
3.修改 /root/mycat/conf/server.xml 增加如下内容,兼容高版本
<property name="useHandshakeV10">1</property>
4.登陆时增加 --default-auth=mysql_native_password 来指定加密方式
mysql -uroot -p -P8066 -h 192.168.100.101 --default-auth=mysql_native_password
本文档详细介绍了Mycat的安装配置步骤,包括解压、配置文件修改、服务启动和测试。同时,针对MySQL8的加密规则变化,提供了修改Mycat配置以实现兼容的方法,包括在my.cnf中设置默认加密插件、更新schema.xml和server.xml配置,以及在登录时指定加密方式。
1376

被折叠的 条评论
为什么被折叠?



