linux环境下Mycat安装与配置详解

MyCat中的概念

1.切分

逻辑上的切分,在物理层面使用多库(database)、多表(table)实现切分。
1.1 纵向切分/垂直切分

就是把原来存储在一个库的数据存储在多个库上
由于数据库的读写都是对同一个库进行操作,所以单库并不能解决大规模并发写入的问题。
例如:我们会建立定义数据库 workDB、商品数据库 payDB、用户数据库 userDB、日志数据库 logDB 等。
优点:

减少增量数据写入时的锁对查询的影响。
由于单表数量下降,常见的查询操作由于减少了需要扫描的记录,使得单表单次查询所需检索的行数变少,减少了磁盘IO、时延变短。

缺点:

无法解决单表数据量太大的问题。

1.2 横向切分/水平切分

把原本存储于一个表的数据分块存储到多个表上
当一个表中的数据量过大时,我们可以把该表的数据按照某种规则,进行划分,然后存储到多个结构相同的表上。
例如:我们 userDB 中的 userTable 中数据量很大,那么可以把 userDB 切分为结构相同的多个 userDB:part0DB、part1DB 等,再将 userDB 上的 userTable,切分为很多 userTable:userTable0、userTable1 等,然后将这些表按照一定的规则存储到多个 userDB 上。
优点:

单表的并发能力提高了,磁盘的I/O性能也提高了
如果出现高并发的话,总表可以根据不同的查询,将并发压力发到不同的小表里。

缺点:

无法实现表连接查询

2.逻辑库-Schema

MyCat中定义的database是逻辑上存在的,但物理上是不存在的。
主要是针对纵向切分提供的概念。
3.逻辑表-Table

MyCat中定义的table,是逻辑上存在,物理上不存在的
主要是针对横向切分提供的概念
4.默认端口

MySql:3306
MyCat:8066
Tomcat:8080
Oracle:1521
nginx:80
http:协议默认端口80
redis:6379
5.数据主机-DataHost

物理MySql存放的主机地址,可以使用主机名,IP,域名定义。
6.数据节点-DataNode

配置物理的database。数据保存的物理节点就是database
7.分片规则

当控制数据的时候,如何访问物理database和table?
就是访问dataHost和dataNode的算法
在Mysql处理CRUD时,如何访问datahost和datanode的算法?如:哈希算法,crc32算法等。

下载

github太慢直接网盘下就行,版本是1.6
链接: https://pan.baidu.com/s/1QQyIUj_Y03Ctpo22yIuNxA 密码: 3arv

安装

解压

tar -zxvf Mycat-server-1.6.7.1-linux.tar.gz

移动到/usr/local目录下

mv  mycat /usr/local

进入/usr/local/mycat 目录

 cd /usr/local/mycat 

ll查看目录内容

linux环境下Mycat安装与配置详解_第1张图片

bin:命令文件
catlet:空的,扩展
conf:配置文件(server.xml,schema.xml,rule.xml等)
	schema.xml:定义逻辑库,表、分片节点等内容 
	rule.xml:定义分片规则 
	server.xml:定义用户以及系统相关变量,如端口等
lib:依赖的jar包

配置

进入conf目录
linux环境下Mycat安装与配置详解_第2张图片

cd /usr/local/mycat/conf
  • 以下建议可以进行vim的基本操作。
  • 以下配置为演示,注意看配置信息和标签根据自己的需求进行修改

  1. 修改配置文件server.xml (经常修改)


<mycat:schema xmlns:mycat="http://io.mycat/">


	
	<schema name="mydatabase" checkSQLschema="true" sqlMaxLimit="100">
		
		<table name="t_user" dataNode="dn1,dn2,dn3" primaryKey="id" rule="auto-sharding-long">
					
			<childTable name="t_loginlog" primaryKey="id" joinKey="user_id" parentKey="id">childTable>
		table>
		<table name="t_student" dataNode="dn1,dn3" primaryKey="id" rule="student_id" />
		<table name="t_dictionaries" dataNode="dn1,dn2,dn3" type="global" />
		<table name="t_teacher" dataNode="dn1" />
    schema>
		
		
		<dataNode name="dn1" dataHost="dtHost1" database="db1" />
		<dataNode name="dn2" dataHost="dtHost1" database="db2" />
		<dataNode name="dn3" dataHost="dtHost2" database="db3" />
		
	
	<dataHost name="dtHost1" maxCon="1000" minCon="10" balance="1"
			  writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
		
		<heartbeat>select user()heartbeat>
		
		<writeHost host="127.0.0.1" url="192.168.199.11:3306" user="root" password="123456">
			<readHost host="127.0.0.1" url="192.168.199.12:3306" user="root" password="123456" />
		writeHost>
	
	dataHost>
	<dataHost name="dtHost2" maxCon="1000" minCon="10" balance="1"
			  writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
		
		<heartbeat>select user()heartbeat>
		
		<writeHost host="127.0.0.1" url="192.168.199.13:3306" user="root" password="123456">
			<readHost host="127.0.0.1" url="192.168.199.13:3306" user="root" password="123456" />
		writeHost>
	
	dataHost>
mycat:schema>


  1. 配置schema.xml



<mycat:server xmlns:mycat="http://io.mycat/">
	<system>
	
    <property name="serverPort">8066property>
	<property name="nonePasswordLogin">0property> 
	<property name="useHandshakeV10">1property>
	<property name="useSqlStat">0property>  
	<property name="useGlobleTableCheck">0property>  

		<property name="sequnceHandlerType">2property>
	<property name="subqueryRelationshipCheck">falseproperty> 
       
         
	
	
        
		<property name="processorBufferPoolType">0property>
		
		
		
		
		
		
		
		
		<property name="handleDistributedTransactions">0property>
		
			
		<property name="useOffHeapForMerge">1property>

		
        <property name="memoryPageSize">64kproperty>

		
		<property name="spillsFileBufferSize">1kproperty>

		<property name="useStreamOutput">0property>

		
		<property name="systemReserveMemorySize">384mproperty>


		
		<property name="useZKSwitch">falseproperty>

		
		

		
		
		
		<property name="strictTxIsolation">falseproperty>
		
		<property name="useZKSwitch">trueproperty>
		
	system>
	
	
	
	
	
	
	
	
	
	<firewall>
	   <whitehost>
	      <host host="192.*" user="mycat"/>
		  <host host="127.*" user="mycat"/>
	   whitehost>
       <blacklist check="false">
       blacklist>
	firewall>
	
	
	<user name="mycat" defaultAccount="true">
		<property name="password">123456property>
		<property name="schemas">mydatabaseproperty>
		
		
		
	user>

	

mycat:server>

启动

安装java-jdk:https://blog.csdn.net/qq_42094345/article/details/106954139

  1. 控制台启动 :去 mycat/bin 目录下执行 ./mycat console
  2. 后台启动 :去 mycat/bin 目录下 ./mycat start
    为了能第一时间看到启动日志,方便定位问题,我们选择1控制台启动。

成功会有提示【successfully】

MyCAT Server startup successfully. see logs in logs/mycat.log

登陆mycat

mysql -umycat -p123456 -h 192.168.0.103 -P 8066

使用mysql命令登陆
用户名和密码是schema.xml 的 标签里面配置的用户名和密码
linux环境下Mycat安装与配置详解_第3张图片

登陆成功
linux环境下Mycat安装与配置详解_第4张图片
后面将写分库分表,主从啥的。
有用请三连,不胜感激!

你可能感兴趣的:(数据库,mycat学习笔记,数据库,分布式,linux,mysql,mycat)