MyCat 的安装与测试

这是我参与11月更文挑战的第9天,活动详情查看:11月更文挑战

一、环境准备

(1)、本机环境是三台centos7

IP 主机名 数据库名 安装软件
192.168.77.128 master db1 mycat,mysql
192.168.77.129 slave1 db2 mysql
192.168.77.134 slave2 db3 mysql

(2)安装mycat的linux中新建用户和组

1、创建一个新的group


         groupadd mycat


2、创建一个新的用户,并加入group


        useradd -g mycat mycat


3、给新用户设置密码


        passwd mycat

二、安装MySQL并创建数据库

(1)安装MySQL参考我的其他两篇文章:

CentOS7 yum方式 安装MySQL5.7

CentOS7.4 RPM方式安装mysql5.7

(2)创建数据库

根据不同机器数据库名不同
1
bash复制代码create database db1/db2/db3;

创建后效果如下:

)“)​)“)​)

三、下载安装MyCat:

MyCat的官方网站:

Mycat1.6

下载地址:github.com/MyCATApache…

也可以下载我的百度云版本:

链接: pan.baidu.com/s/1-J-Tb19y…提取码: b262

第一步:将Mycat-server-1.4-release-20151019230038-linux.tar.gz上传至服务器

第二步:将压缩包解压缩。建议将mycat放到/usr/local/mycat目录下。

1
2
3
bash复制代码tar -xzvf Mycat-server-1.4-release-20151019230038-linux.tar.gz

mv mycat /usr/local

四、MyCat分片配置

注:1、2、3 的操作目录:/usr/local/mycat/conf

(1)配置schema.xml

schema.xml作为MyCat中重要的配置文件之一,管理着MyCat的逻辑库、逻辑表以及对应的分片规则、DataNode以及DataSource。弄懂这些配置,是正确使用MyCat的前提。这里就一层层对该文件进行解析。

schema 标签用于定义MyCat实例中的逻辑库

Table 标签定义了MyCat中的逻辑表 rule用于指定分片规则,auto-sharding-long的分片规则是按ID值的范围进行分片 1-5000000 为第1片 5000001-10000000 为第2片…. 。

dataNode 标签定义了MyCat中的数据节点,也就是我们通常说所的数据分片。

dataHost标签在mycat逻辑库中也是作为最底层的标签存在,直接定义了具体的数据库实例、读写分离配置和心跳语句。

在服务器上创建3个数据库,分别是db1 db2 db3

修改schema.xml如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
xml复制代码<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://org.opencloudb/">

<schema name="youfanshop" checkSQLschema="false" sqlMaxLimit="100">
<table name="employee" primaryKey="ID" dataNode="dn1,dn2,dn3"
rule="sharding-by-intfile" />
</schema>
<dataNode name="dn1" dataHost="master" database="db1" />
<dataNode name="dn2" dataHost="slave1" database="db2" />
<dataNode name="dn3" dataHost="slave2" database="db3" />
<dataHost name="master" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM1" url="master:3306" user="root"
password="123456">
</writeHost>
</dataHost>
<dataHost name="slave1" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM2" url="slave1:3306" user="root"
password="123456">
</writeHost>
</dataHost>
<dataHost name="slave2" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM3" url="slave2:3306" user="root"
password="123456">
</writeHost>
</dataHost>


</mycat:schema>

(2)配置 server.xml

server.xml几乎保存了所有mycat需要的系统配置信息。最常用的是在此配置用户名、密码及权限。在system中添加UTF-8字符集设置,否则存储中文会出现问号

utf8

在conf目录下配置server.xml ,将目录下没有的用户全部删掉或者注释掉,添加可用的用户,这里添加了一个root用户:

1
2
3
4
ini复制代码      <user name="root">
<property name="password">123456</property>
<property name="schemas">youfanshop</property>
</user>

(3)修改conf下的partition-hash-int.txt文件

在下面添加10020=2,原本默认的是分两个就是10000和10010,现在我们三个就要三个分类id了,添加一个即可

)

(4)设置mysql忽略大小写

在三台mysql的配置文件vi /etc/my.cnf中加入lower_case_table_names = 1来忽略大小写:

1
ini复制代码lower_case_table_names = 1

(5)修改hosts文件

由于上面schema.xml文件配置使用了slave1、slave2、master没有指定ip,所以需要在hosts中映射过去:

1
2
3
复制代码192.168.77.128 master
192.168.77.129 slave1
192.168.77.134 slave2

)

五、测试MyCat

1、启动MyCat

mycat 的bin目录下执行 ./ mycat start

)

查看logs:

1
bash复制代码tail -100 wrapper.log

看到如下结果就是成功了

)

2.测试mysql表横向分割

在虚拟机外的windows安装Navicat for MySQL,分别连接到三个mysql数据库,执行建表语句:

1
sql复制代码create table employee (id int not null primary key,name varchar(100),sharding_id int not null);

用Navicat 或者sqlyog连接mycat,mycat默认端口是8066,配置如图:

)

因为刚才执行了建表语句,这时候连接上了mycat里面也有一个空的employee表

在连上的mycat中执行如下语句

1
2
3
4
5
6
7
8
9
10
11
scss复制代码insert into employee(id,name,sharding_id) values(1, 'I am db1',10000);

insert into employee(id,name,sharding_id) values(2, 'I am db2',10010);

insert into employee(id,name,sharding_id) values(3, 'I am db3',10020);

insert into employee(id,name,sharding_id) values(4, 'I am db1',10000);

insert into employee(id,name,sharding_id) values(5, 'I am db2',10010);

insert into employee(id,name,sharding_id) values(6, 'I am db3',10020);

)

刷新一下navicat查看mycat连接的库

)

db1

)

db2

)

db3

)

可以看到新增的6条记录被mycat分配到了三台服务器的数据库上。

六、sqlyog连接MyCat报错2003

可能是MyCat所在主机没有关闭防火墙:

1
arduino复制代码systemctl stop firewalld

关闭之后,发现问题已解决。

或者不想关闭防火墙,可以打开8066端口:

1. 开放端口命令: **/sbin/iptables -I INPUT -p tcp --dport 8066 -j ACCEPT**


 2.保存: **/etc/rc.d/init.d/iptables save**


 3.重启服务: **/etc/init.d/iptables restart**


 4.查看端口是否开放: **/sbin/iptables -L -n**

打开端口也可以这样:

1
2
css复制代码firewall-cmd --add-port=8066/tcp --permanent
firewall-cmd --reload

PS:如果你想一次性添加多个接口,可以将1重复执行多次,然后一次性执行2、3、4。

\

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%