这是我参与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参考我的其他两篇文章:
(2)创建数据库
根据不同机器数据库名不同
1 | bash复制代码create database db1/db2/db3; |
创建后效果如下:
)
“)
)
“)
)
三、下载安装MyCat:
MyCat的官方网站:
也可以下载我的百度云版本:
链接: pan.baidu.com/s/1-J-Tb19y…提取码: b262
第一步:将Mycat-server-1.4-release-20151019230038-linux.tar.gz上传至服务器
第二步:将压缩包解压缩。建议将mycat放到/usr/local/mycat目录下。
1 | bash复制代码tar -xzvf Mycat-server-1.4-release-20151019230038-linux.tar.gz |
四、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 | xml复制代码<!DOCTYPE mycat:schema SYSTEM "schema.dtd"> |
(2)配置 server.xml
server.xml几乎保存了所有mycat需要的系统配置信息。最常用的是在此配置用户名、密码及权限。在system中添加UTF-8字符集设置,否则存储中文会出现问号
utf8
在conf目录下配置server.xml ,将目录下没有的用户全部删掉或者注释掉,添加可用的用户,这里添加了一个root用户:
1 | ini复制代码 <user name="root"> |
(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 | 复制代码192.168.77.128 master |
)
五、测试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 | scss复制代码insert into employee(id,name,sharding_id) values(1, 'I am db1',10000); |
)
刷新一下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 | css复制代码firewall-cmd --add-port=8066/tcp --permanent |
PS:如果你想一次性添加多个接口,可以将1重复执行多次,然后一次性执行2、3、4。
\
本文转载自: 掘金