IP |
主机名 |
数据库名 |
安装软件 |
192.168.77.128 |
master |
db1 |
mycat,mysql |
192.168.77.129 | slave1 |
db2 |
mysql |
192.168.77.134 | slave2 |
db3 |
mysql |
1、创建一个新的group
groupadd mycat
2、创建一个新的用户,并加入group
useradd -g mycat mycat
3、给新用户设置密码
passwd mycat
CentOS7 yum方式 安装MySQL5.7
CentOS7.4 RPM方式安装mysql5.7
根据不同机器数据库名不同
create database db1/db2/db3;
创建后效果如下:
MyCat的官方网站:
http://www.mycat.org.cn/
下载地址:https://github.com/MyCATApache/Mycat-download
也可以下载我的百度云版本:
链接: https://pan.baidu.com/s/1-J-Tb19yozUvfga-hbS0KA 提取码: b262
第一步:将Mycat-server-1.4-release-20151019230038-linux.tar.gz上传至服务器
第二步:将压缩包解压缩。建议将mycat放到/usr/local/mycat目录下。
tar -xzvf Mycat-server-1.4-release-20151019230038-linux.tar.gz
mv mycat /usr/local
注:1、2、3 的操作目录:/usr/local/mycat/conf
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如下:
select user()
select user()
select user()
server.xml几乎保存了所有mycat需要的系统配置信息。最常用的是在此配置用户名、密码及权限。在system中添加UTF-8字符集设置,否则存储中文会出现问号
在conf目录下配置server.xml ,将目录下没有的用户全部删掉或者注释掉,添加可用的用户,这里添加了一个root用户:
123456
youfanshop
在下面添加10020=2,原本默认的是分两个就是10000和10010,现在我们三个就要三个分类id了,添加一个即可
在三台mysql的配置文件vi /etc/my.cnf中加入lower_case_table_names = 1来忽略大小写:
lower_case_table_names = 1
由于上面schema.xml文件配置使用了slave1、slave2、master没有指定ip,所以需要在hosts中映射过去:
192.168.77.128 master
192.168.77.129 slave1
192.168.77.134 slave2
mycat 的bin目录下执行 ./ mycat start
查看logs:
tail -100 wrapper.log
看到如下结果就是成功了
在虚拟机外的windows安装Navicat for MySQL,分别连接到三个mysql数据库,执行建表语句:
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中执行如下语句
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分配到了三台服务器的数据库上。
可能是MyCat所在主机没有关闭防火墙:
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
打开端口也可以这样:
firewall-cmd --add-port=8066/tcp --permanent
firewall-cmd --reload
PS:如果你想一次性添加多个接口,可以将1重复执行多次,然后一次性执行2、3、4。