Mycat 基础入门

Mycat 基础入门

1.Mycat下载安装

下载windows安装包

地址:https://github.com/MyCATApache/Mycat-download/tree/master/1.6-RELEASE

2.Mycat解压目录

解压目录

3.配置环境变量

在这里插入图片描述
在这里插入图片描述

4.修改配置文件

  --server.xml:是Mycat服务器参数调整和用户授权的配置文件。
  
  --schema.xml:是逻辑库定义和表以及分片定义的配置文件。

  --rule.xml:  是分片规则的配置文件,分片规则的具体一些参数信息单独存放为文件,也在这个目录下,配置文件修改需要重启MyCAT。

  --log4j.xml: 日志存放在logs/log中,每天一个文件,日志的配置是在conf/log4j.xml中,根据自己的需要可以调整输出级别为debug                           debug级别下,会输出更多的信息,方便排查问题。

  --autopartition-long.txt,partition-hash-int.txt,sequence_conf.properties, sequence_db_conf.properties 分片相关的id分片规则配置文件

  --lib	   MyCAT自身的jar包或依赖的jar包的存放目录。

  --logs   MyCAT日志的存放目录。日志存放在logs/log中,每天一个文件

4.1 conf目录下找到wrapper.conf文件修改jdk路径

在这里插入图片描述

4.2 逻辑库配置:conf目录下找到server.xml文件修改Mycat虚拟数据库

system参数是所有的Mycat参数配置 ,user是用户参数

<!-- user 中 name root 真实数据库用户 -->
<user name="root">
	<!-- 逻辑库登录密码和数据库名称 -->
	<property name="password">123456</property>
	<property name="schemas">TESTDB</property>
	
	<!-- 表级 DML 权限设置 -->
	<!-- 		
	<privileges check="false">
		<schema name="TESTDB" dml="0110" >
			<table name="tb01" dml="0000"></table>
			<table name="tb02" dml="1111"></table>
		</schema>
	</privileges>		
		 -->
	</user>

4.3 schema.xml配置,conf目录下找到schema.xml文件进行修改

配置顺序:从上往下依次为 schema–>dataNode–>dataHost

1.schema是实际逻辑库的配置,多个schema代表多个逻辑库
schema配置
	name:对应sever.xml文件中的schemas名称
	checkSQLschema:该变量为布尔值,需要设为true,不然数据库查询会报错。
2.table 配置
	name:对应真实数据库表
	primaryKey:对应表主键
	dataNode:对应数据节点名数据节点对应真实数据库名
3.dataNode配置:dataNode是逻辑库对应的分片,如果需要配置多个分片,只需要配置多个dataNode即可
	name:数据节点名
	dataHost:数据主机名称,需要与dataHost节点name属性保持一致
	database:对应真实的物理数据库
4.dataHost配置:dataHost是实际物理库的配置,可以配置多主主从等配置,多个dataHost代表
代表分片对应的物理库地址writeHost、readHost代表该分片是否配置多写、主从、读写分离等高级特性。
	name:自定义数据主机名称
5.心跳配置
	<heartbeat>select user()</heartbeat>
6.writeHost(写入)配置
	host:自定义主机名称
	url:真实mysql数据库映射地址
	user:真实mysql数据库登录用户
	password:真实mysql数据库用户密码
7.readHost(读)配置
	host:自定义主机名称
	url:真实mysql数据库映射地址
	user:真实mysql数据库登录用户
	password:真实mysql数据库用户密码
	
以下例子配置了两个writeHost为主从。

<schema name="user" checkSQLschema="false" sqlMaxLimit="100" dataNode="user" />
<schema name="pay"  checkSQLschema="false" sqlMaxLimit="100" dataNode="pay" >
   <table name="order" dataNode="pay1,pay2" rule="rule1"/>
</schema>

<dataNode name="user" dataHost="host" database="user" />
<dataNode name="pay1" dataHost="host" database="pay1" />
<dataNode name="pay2" dataHost="host" database="pay2" />

<dataHost name="host" maxCon="1000" minCon="10" balance="0"
   writeType="0" dbType="mysql" dbDriver="native">
   <heartbeat>select 1</heartbeat>
   <!-- can have multi write hosts -->
   <writeHost host="hostM1" url="192.168.0.2:3306" user="root" password="root" />
   <writeHost host="hostM2" url="192.168.0.3:3306" user="root" password="root" />
</dataHost>	
	
	
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">

	<schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100">
		<!-- 表结构映射 name:表名,dataNode:数据节点名 -->
		<table name="role" primaryKey="ID" dataNode="employee,employee2"
			   rule="sharding-by-intfile" />
	</schema>
	<!-- <dataNode name="dn1$0-743" dataHost="localhost1" database="db$0-743"
		/> -->
	<!--配置数据节点-->
	<dataNode name="employee" dataHost="localhost1" database="employee" />
	<dataNode name="employee2" dataHost="localhost1" database="employee2" />

	<!--<dataNode name="dn4" dataHost="sequoiadb1" database="SAMPLE" />
	 <dataNode name="jdbc_dn1" dataHost="jdbchost" database="db1" />
	<dataNode	name="jdbc_dn2" dataHost="jdbchost" database="db2" />
	<dataNode name="jdbc_dn3" 	dataHost="jdbchost" database="db3" /> -->
	<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
			  writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
		<heartbeat>select user()</heartbeat>
		<!-- can have multi write hosts -->
		<writeHost host="hostM1" url="192.168.0.213:3306" user="root" password="123456">	   
			<!-- can have multi read hosts -->
			<!--<readHost host="hostS2" url="192.168.0.148:3306" user="root" password="123456"/>-->
		</writeHost>
		<!--<writeHost host="hostS1" url="192.168.0.148:3306" user="root"
				   password="123456" />-->
		<!-- <writeHost host="hostM2" url="localhost:3316" user="root" password="123456"/> -->
	</dataHost>
	<!--
		<dataHost name="sequoiadb1" maxCon="1000" minCon="1" balance="0" dbType="sequoiadb" dbDriver="jdbc">
		<heartbeat> 		</heartbeat>
		 <writeHost host="hostM1" url="sequoiadb://1426587161.dbaas.sequoialab.net:11920/SAMPLE" user="jifeng" 	password="jifeng"></writeHost>
		 </dataHost>

	  <dataHost name="oracle1" maxCon="1000" minCon="1" balance="0" writeType="0" 	dbType="oracle" dbDriver="jdbc"> <heartbeat>select 1 from dual</heartbeat>
		<connectionInitSql>alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss'</connectionInitSql>
		<writeHost host="hostM1" url="jdbc:oracle:thin:@127.0.0.1:1521:nange" user="base" 	password="123456" > </writeHost> </dataHost>

		<dataHost name="jdbchost" maxCon="1000" 	minCon="1" balance="0" writeType="0" dbType="mongodb" dbDriver="jdbc">
		<heartbeat>select 	user()</heartbeat>
		<writeHost host="hostM" url="mongodb://192.168.0.99/test" user="admin" password="123456" ></writeHost> </dataHost>

		<dataHost name="sparksql" maxCon="1000" minCon="1" balance="0" dbType="spark" dbDriver="jdbc">
		<heartbeat> </heartbeat>
		 <writeHost host="hostM1" url="jdbc:hive2://feng01:10000" user="jifeng" 	password="jifeng"></writeHost> </dataHost> -->

	<!-- <dataHost name="jdbchost" maxCon="1000" minCon="10" balance="0" dbType="mysql"
		dbDriver="jdbc"> <heartbeat>select user()</heartbeat> <writeHost host="hostM1"
		url="jdbc:mysql://localhost:3306" user="root" password="123456"> </writeHost>
		</dataHost> -->
</mycat:schema>

4.4 Mycat系统参数配置

   <!-- mycat 启动端口 -->	
   <property name="serverPort">8066</property>

5.Mycat链接测试

5.1 Mycat连接测试与Mysql一致,在连接前应先测试Mysql是否支持ip连接和远程连接

5.2 Mysql root账户支持远程连接

参考地址:https://www.cnblogs.com/wangxishan/p/6426755.html

进入Mysql命令行界面输入命令:
输入use mysql 切换到mysql数据库,然后输入select user,host from user查看用户
在这里插入图片描述

可以看到mysql.session、mysql.sys对应的host是localhost

如果需要改为指定的ip则修改为具体的ip,若要让所有ip都能连接,则将其改为“%”

执行以下命令进行修改

update user set host = ‘%’ where user = ‘root’;

若要进行远程访问还需要修改bind-address,找到mysql 的my.ini或者my.cnf 文件,
添加以下语句,重启Mysql

bind-address = 0.0.0.0

6.数据库测试

在本机新建两个数据库employee、employee2,并分别建一张表role

表employee:

在这里插入图片描述
表employee2
在这里插入图片描述

7.运行文件

7.1双击运行bin目录下的startup_nowrap.bat启动文件

在这里插入图片描述

7.2 进入到bin目录下,在cmd命令行窗口中执行startup_nowrap命令

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YmhY8e5A-1650025916826)(mycat_files/8.png)]

7.3 若出现successfully,则证明运行成功

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-luWKz38L-1650025916827)(mycat_files/9.png)]

8.登录mysql查看测试数据:和mysql登录方法一致

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7SL44GJT-1650025916828)(mycat_files/10.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dnlB6EEK-1650025916829)(mycat_files/11.png)]

9.总结

1.Mycat 根目录不能有空格,不然运行报错,如放在program files则不行
2.checkSQLschema属性需要设置为true
3.测试mysql数据库是否能够远程连接,并配置ip连接
4.Mycat分片就是分数据库

·······································番外篇开始·······································

balance=0–不开启读写分离;balance=1–开启读写分离

1.读写分离配置

	<schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100">
		<!-- 表结构映射 name:表名,dataNode:数据节点名 -->
		<table name="role" primaryKey="ID" dataNode="employee,employee2"
			   rule="sharding-by-intfile" />
	</schema>
	<!--配置数据节点-->
	<dataNode name="employee" dataHost="localhost1" database="employee" />
	<dataNode name="employee2" dataHost="localhost1" database="employee2" />

	<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
			  writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
		<heartbeat>select user()</heartbeat>
		<!-- can have multi write hosts -->
		<writeHost host="hostM1" url="192.168.0.213:3306" user="root" password="123456">	   
			<!-- can have multi read hosts -->
			<readHost host="hostS2" url="192.168.0.213:3306" user="root" password="123456"/>
		</writeHost>
	</dataHost>
	
	总结:
	以上案例实现了1主1从的读写分离功能,写操作落到主库,读操作落到从库,若主库宕机
	则从库不能继续提供服务。

2.读写分离及高可用测试

	<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="world"> 
	</schema>  
	<dataNode name="world" dataHost="host1" database= "world" />  
	<dataHost name="host1" maxCon="1000" minCon="10" balance="1"  writeType="0" dbType="mysql"  dbDriver="native" switchType="1"> 
		<heartbeat>select user()</heartbeat>  
	<writeHost host="db1" url="192.168.0.51:3307" user="root" password="123"> 
		<readHost host="db2" url="192.168.0.51:3309" user="root" password="123" /> 
	</writeHost> 
	<writeHost host="db3" url="192.168.0.52:3307" user="root" password="123"> 
		<readHost host="db4" url="192.168.0.52:3309" user="root" password="123" /> 
	</writeHost>        
	</dataHost>  
	
	总结:
	真正的读写分离

·············································番外篇结束·····································

欢迎大家关注我的公众号,我也会在公众号同步更新。

在这里插入图片描述

若大家对进阶打怪有兴趣的话,欢迎订阅以下专栏

地址:WebGIS入门和进阶实战

项目地址,请查阅

地址:leaflet-app

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值