文章目录
一:参考博文:
【Mycat】数据库性能提升利器(二)——Mycat数据切分
Mycat安装与配置详解
Mycat安装与配置文件
二:Mycat水平切割数据库
安装所需工具
1.下载并安装linux
镜像下载地址,本人使用VM15进行部署,如果出现VMware Workstation 与 Device/Credential Guard 不兼容这种情况,请参考本人的博文:Vmware workstation与Hyper-v不兼容的解决方法
2.安装jdk1.8
下载jdk-8u221-linux-x64.tar.gz ,然后使用xshell上传至服务器中,tar zxvf jdk-8u221-linux-x64.tar.gz
进行解压,vi /etc/profile
打开配置文件进行配置:
export JAVA_HOME=/usr/java/jdk1.8.0_152
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
注意第一行要改成自己解压的实际路径,保存之后执行 source /etc/profile
,
然后执行,java -version
出现如下则安装成功
3.安装mysql
执行 yum list installed | grep mariadb
,查看是否安装了 mariadb,出现下图则已安装:
执行 yum -y remove mariadb*
将之卸载; 执行 yum install wget
安装wget ;
下载rpm包:wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
进行安装:rpm -ivh mysql57-community-release-el7-11.noarch.rpm
;检查是否安装成功:
yum repolist enabled | grep "mysql.*-community.*" ;
出现下图则安装成功:
安装mysql:yum install mysql-server
;启动mysql:systemctl start mysqld.service
;查看初始密码:grep 'temporary password' /var/log/mysqld.log
;
执行:mysql -u root -p
,填入初始密码;修改密码策略,降低所需密码复杂度:set global validate_password_policy=0;
; 重置密码 set password=password("111aaa+++");
flush privileges;
授权远程登陆:grant all privileges on *.* to 'root'@'%' identified by '111aaa+++' with grant option; flush privileges;
关闭防火墙:systemctl stop firewalld.service
禁止防火墙开机自启:systemctl disable firewalld.service
本人将当前虚拟机起名为 vm1-192.168.5.129
,使用vm创建克隆虚拟机vm2-192.168.5.133
和vm3-192.168.5.134
,本人使用的是创建克隆链接这样更省资源,vm1创建数据库db1和db3,vm2创建db2,vm3将用来安装Mycat
4.安装Mycat
下载mycat,上传到服务器,解压:tar zxf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
;
配置Mycat
mycat的配置文件都在conf目录下,进入开始配置
1.配置wrapper.conf
vim wrapper.conf
将该行配置成你自己的java文件目录
2.配置schema.xml
vim schema.xml
,将下面的配置直接覆盖原来的配置,注意配置好两个节点的url,密码,和user
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<!--配置逻辑表:指明是否分表,分成几个表-->
<schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100">
<!-- 对tb_item表进行分表,分片规则为,auto-sharding-long根据id范围 -->
<table name="tb_item" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />
</schema>
<!--配置分片节点:指明要分库的节点主机-->
<dataNode name="dn1" dataHost="localhost1" database="db1" />
<dataNode name="dn2" dataHost="localhost2" database="db2" />
<dataNode name="dn3" dataHost="localhost1" database="db3" />
<!--配置节点主机1:指明连接情况,主机地址-->
<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.5.129:3306" user="root"
password="111aaa+++">
<!-- can have multi read hosts -->
</writeHost>
</dataHost>
<!--配置节点主机2:指明连接情况,主机地址-->
<dataHost name="localhost2" 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.5.133:3306" user="root"
password="111aaa+++">
<!-- can have multi read hosts -->
</writeHost>
</dataHost>
</mycat:schema>
3.server.xml
vim server.xml
, 此配置文件几乎保存了所有mycat需要的系统配置信息。在这里配置有mycat的用户名和密码,其中值得注意的是firewall标签的配置,后两个配置的ip指的是虚拟机登陆时所显示的ip,配置好后,nacivat和虚拟机本地都能够登陆mycat,若连接时出现host拦截再自行配置
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
<system>
<property name="useSqlStat">0</property> <!-- 1为开启实时统计、0为关闭 -->
<property name="useGlobleTableCheck">0</property> <!-- 1为开启全加班一致性检测、0为关闭 -->
<property name="sequnceHandlerType">2</property>
<!-- <property name="useCompression">1</property>--> <!--1为开启mysql压缩协议-->
<!-- <property name="fakeMySQLVersion">5.6.20</property>--> <!--设置模拟的MySQL版本号-->
<!-- <property name="processorBufferChunk">40960</property> -->
<!--
<property name="processors">1</property>
<property name="processorExecutor">32</property>
-->
<!--默认为type 0: DirectByteBufferPool | type 1 ByteBufferArena-->
<property name="processorBufferPoolType">0</property>
<!--默认是65535 64K 用于sql解析时最大文本长度 -->
<!--<property name="maxStringLiteralLength">65535</property>-->
<!--<property name="sequnceHandlerType">0</property>-->
<!--<property name="backSocketNoDelay">1</property>-->
<!--<property name="frontSocketNoDelay">1</property>-->
<!--<property name="processorExecutor">16</property>-->
<!--
<property name="serverPort">8066</property> <property name="managerPort">9066</property>
<property name="idleTimeout">300000</property> <property name="bindIp">0.0.0.0</property>
<property name="frontWriteQueueSize">4096</property> <property name="processors">32</property> -->
<property name="handleDistributedTransactions">0</property>
<!--
off heap for merge/order/group/limit 1开启 0关闭
-->
<property name="useOffHeapForMerge">1</property>
<!--
单位为m
-->
<property name="memoryPageSize">1m</property>
<!--
单位为k
-->
<property name="spillsFileBufferSize">1k</property>
<property name="useStreamOutput">0</property>
<!--
单位为m
-->
<property name="systemReserveMemorySize">384m</property>
<!--是否采用zookeeper协调切换 -->
<property name="useZKSwitch">true</property>
</system>
<firewall>
<whitehost>
<host host="127.0.0.1" user="root"/>
<host host="127.0.0.1" user="user"/>
<host host="192.168.5.1" user="user"/>
<host host="192.168.5.1" user="root"/>
</whitehost>
<blacklist check="true">
</blacklist>
</firewall>
<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>
<user name="user">
<property name="password">user</property>
<property name="schemas">TESTDB</property>
<property name="readOnly">false</property>
</user>
</mycat:server>
复制和粘贴xml文件有可能会复制不完整,或xml格式不正确,会导致Mycat启动报错,可使用XML验证器,此外还有定义分片规则的rule.xml,在此并不需要修改
测试
1.运行并连接mycat
- bin目录下运行mycat:
sudo ./mycat console
,最后打印如下则启动成功
- 成功后也可使用
sudo ./mycat start
进行后台运行,用sudo ./mycat restart
重启,sudo ./mycat status
查看运行状态,sudo ./mycat stop
停止服务。 启动成功后:mysql -uuser -puser -P9066 -h127.0.0.1
可进行本地登陆,也可navicat连接,如下所示,其中用户名和密码就是在server.xml中所配置的
2.插入数据进行分片
- 向db1,db2和db3中创建tb_item表,表明务必要与schema.xml中配置的一致
- 以上三个数据库中创建完表之后,会发现mycat中就会自动创建该表
- 用mycat插入数据如下
- 插入完后发现id小于500万时存放在db1中,大于500万小于1000万的时候储存在db2中,大于1000万小于1500万则储存在db3中,而大于1500万则会因未定义而报错