欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MyCat-03之centos7上使用mycat部署垂直分库

程序员文章站 2022-05-08 19:42:25
...

一、目标

在Centos7.6上安装mycat部署,并设定mysql垂直分库。理解什么叫mysql垂直分库。
什么叫垂直分库?比如一个应用用一台服务器,当数据库表非常大的时候,服务器压力也就大了,怎么办?可以考虑使用垂直分库,看清了是可以考虑,仅仅是考虑,为什么这么说?因为垂直分库有个致命的缺陷,那就是不能做join查询。

有点乱描述的,举个栗子:
你有个数据库,有10个表,可以将2个或3个或9个表放到单独的一台服务器,将剩余的8个or7个or1个表放到另外一台物理服务器,这样就能分担服务器压力。

那怎么使用这个分开的数据呢?
比如以前你写连接字符串的ip是192.168.73.100。那么以后你就可以把这个ip换成mycat服务器的ip,不用考虑另外两台真实的mysql服务器(前提是你不要使用join语句)(还有两篇关于mysql主从复制,双主双从的帖子,写的累的不要不要的)

二、平台

[aaa@qq.com ~]# uname -a
Linux client 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
[aaa@qq.com ~]# cat /etc/redhat-release 
CentOS Linux release 7.6.1810 (Core) 
Mycat-server-1.6.7.5-test-20200303154735-linux.tar.gz

三、实验拓扑

主机名        ip                          所装必须的软件                                             角色
mycat31     192.168.73.31      java1.8及以上,mycat1.6.7.5,mysql5.7      mycat服务器、mysql库kahncool的部分表存储地
mycat32     192.168.73.32      mysql5.7                                                        mysql库kahncool的部分表存储地

四、准备工作

1.两台主机上均关闭防火墙,禁用防火墙开机自启
2.mycat服务器必须安装java1.8及以上的环境
3.两台主机均已安装好mysql5.7,这有一篇教程《Centos7笔记之Mysql5.7安装
4.测试两台互通,而且两台mysql都能互相远程登录对方的mysql数据库,方法如:mysql -uroot -p123123 -h 192.168.73.31 -P 3306(这是在32主机上去连接31主机上的mysql,31上的mysql的root密码是123123,31上的mysql端口是3306),再啰嗦,必须两台互相做一下mysql互通。

五、前言啰嗦

1.mycat官网http://www.mycat.io/
2.mycat下载地址http://dl.mycat.io/
3.schema.xml----->定义逻辑库,表,分片节点等内容
4.rule.xml----->定义分片规则
5.server.xml----->定义用户以及系统相关变量、端口等。
6.到mycat/bin目录下做控制台启动mycat-------> ./mycat console
7.到mycat/bin目录下做后台启动mycat-----------> ./mycat start
8.mycat的运行是依赖java的,所以事先需要在主机上安装jdk,关于jdk的安装略过了。使用命令java -version查本机是否安装了java环境,jdk至少需要1.8及以上的版本才可以。

六、下载并安装mycat

1.(mycat31上执行)下载并安装mycat

mkdir -p /opt/software/mycat
cd /opt/software/mycat
wget -P /opt/software/mycat/ http://dl.mycat.io/1.6.7.5/2020-3-3/Mycat-server-1.6.7.5-test-20200303154735-linux.tar.gz
tar -zxvf Mycat-server-1.6.7.5-test-20200303154735-linux.tar.gz
cp -r mycat/ /usr/local/

七、设定mycat配置文件,使其支持本次实验的垂直分库

1.(mycat31上执行)修改配置文件/usr/local/mycat/conf/server.xml中的默认启动账号从root改为为mycat
(这里的账号mycat是mycat的管理账号,而非linux系统上的账号。)

cp /usr/local/mycat/conf/server.xml{,.bak}
sed -i 's/name="root"/name="mycat"/g' /usr/local/mycat/conf/server.xml

MyCat-03之centos7上使用mycat部署垂直分库

注释:
<user name="mycat" ----->定义mycat的管理账号叫mycat(即登录mycat管理程序的账号,而非linux系统账号)
<property name="password">123456 ----->定义mycat的管理账号的密码
<property name="schemas">TESTDB ----->定义mycat的逻辑数据库名,这里需要和schema.xml中的<schema name="TESTDB"保持一致。

2-1.(mycat31上执行)修改配置文件/usr/local/mycat/conf/schema.xml

cp /usr/local/mycat/conf/schema.xml{,.bak}
cat > /usr/local/mycat/conf/schema.xml <<EOF
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">

        <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
           <table name="teacher" dataNode="dn2"></table>
           <table name="customer" dataNode="dn2"></table>
        </schema>
        <dataNode name="dn1" dataHost="host1" database="kahncool" />
        <dataNode name="dn2" dataHost="host2" database="kahncool" />
        <dataHost name="host1" maxCon="1000" minCon="10" balance="0"
                          writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <writeHost host="hostM1" url="192.168.73.31:3306" user="root"
                                   password="123123">
                </writeHost>
        </dataHost>
        <dataHost name="host2" maxCon="1000" minCon="10" balance="0"
                          writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <writeHost host="hostM2" url="192.168.73.32:3306" user="root"
                                   password="123123">
                </writeHost>
        </dataHost>
</mycat:schema>
EOF

注释:
<schema name="TESTDB"  ----->必须和server.xml中设置的property name="schemas"的值TESTDB保持一致
<schema dataNode="dn1"  ----->指的是默认的mysql服务器,注意这个值不能与table中的值一样。否则的话就说明只有一台物理mysql服务器了
<schema <table name="teacher" dataNode="dn2"></table>   --->指特定的表teacher会放在mysql主机dn2上
<schema <table name="customer" dataNode="dn2"></table>   --->指特定的表teacher会放在mysql主机dn2上
<dataNode name="dn1"   --->和上面的schema中的dataNode主机相对应
<dataNode dataHost="host1"------>  定义第一台mysql主机别名,下面会有参数 <dataHost name=必须也的指定一个host1做对应<dataNode database="kahncool"------> 定义在物理mysql服务器上有个数据库叫kahncool
<dataNode name="dn2" ------> 和上面的schema中的table标签的主机相对应
<dataNode dataHost="host2" ------>定义第二台mysql主机别名,下面会有参数 <dataHost name=必须也的指定一个host2做对应
<dataNode database="kahncool"-> 定义第二台物理mysql服务器上有数据库叫kahncool,必须和节点1的实际数据库名保持一致。
<dataHost name="host1" ------>和上面的<dataNode dataHost="host1" 必须保持一致
<dataHost balance="0"  ------>指的是mycat机制读写分离,0代表不做读写分离
<dataHost writeType="0" ---->这跟读写分离有关的参数,本次用不到
<dataHost dbType="mysql"  ------>指的是mycat本次做的是数据库类型是mysql
<dataHost switchType="1" ---->这跟读写分离有关的参数,本次用不到
<heartbeat>select user()  ------>指的是心跳检测的方法
<writeHost host="hostM1" ------>指的是mycat写主机的主机识别名(可随意写,,也可以与第二台主机的别名一样)
<writeHost  url="10.100.100.31:3306" ------>指的是mycat写主机的mysql地址和端口号
<writeHost  user="root" ------>指的是mycat执行写操作的mysql账号是root
<writeHost  password="123123"> ------>指的是mycat执行写操作的mysql账号是root的密码
<writeHost host="hostM2"指的是mycat写主机的主机识别名(可随意写,,也可以与第一台主机的别名一样)
剩余的就一样的道理了,这里就略过了。

MyCat-03之centos7上使用mycat部署垂直分库

八、在两台物理服务器上新建数据库

mysql -uroot -p'123123' -e "CREATE DATABASE IF NOT EXISTS kahncool DEFAULT CHARSET utf8 COLLATE utf8_general_ci;"
mysql -uroot -p'123123' -e "show databases;"

九、在mycat31上启动mycat

在mycat31上开一个新的终端窗口再执行

cd /usr/local/mycat/bin/
./mycat console

十、登录mycat的数据管理平台

1.在mycat31上开一个新的终端窗口再执行

mysql -umycat -p123456 -h 192.168.73.31 -P 8066
show databases;
use TESTDB;
show tables;

注释:
-umycat  指的是mycat配置文件中的账号名叫"mycat",
-h 192.168.73.31 指的是mycat服务器的ip
-P 8066  指的是mycat的数据管理平台的端口号
use TESTDB;  使用mycat的逻辑数据库TESTDB,它对应者物理实际数据库kahncool

MyCat-03之centos7上使用mycat部署垂直分库

在使用show tables;命令后,会看到schema.xml中定义的那两个特殊的表,在mycat里第一次就能看到这两张表customer和teacher,你看到的仅仅是个假象,这两个表在物理服务器中其实是不存在的,若要使用这两个表的话,第一次必须先把这两个表建一下,这一点你必须得清楚。

十一、在mycat中操作数据库(创建表、插入数据)

(mycat创建表到node2上,即创建表到mycat32上,为啥?因为schema中的table标签中定义了)
create table teacher(tid int(10) not null unique primary key,tname varchar(20) not null );
insert into teacher(tid,tname) VALUES (1,'liuduoyan');


(mycat创建表到node·上,即创建表到mycat31上)
create table student(num int(10) not null unique primary key,name varchar(20) not null,gender varchar(20) not null,birthday datetime,address varchar(50));
insert into student (num,name,gender,birthday,address) VALUES (1,'serena','women','2000-12-31','shanghai');

(mycat创建表到node2上,即创建表到mycat32上,为啥?因为schema中的table标签中定义了)
create table customer(cid int(10) not null unique primary key,cname varchar(20) not null );
insert into customer(cid,cname) VALUES (1,'cuiseqi');
insert into customer(cid,cname) VALUES (2,'songsuer');

(mycat创建表到node1上,即创建表到mycat31上)
create table product(pid int(10) not null unique primary key,pname varchar(20) not null );
insert into product(pid,pname) VALUES (1,'apple');
insert into product(pid,pname) VALUES (2,'orangen');

MyCat-03之centos7上使用mycat部署垂直分库

十二、在两台物理服务器上检验数据库表是否分开了

1.在mycat31上查询本地mysql的kahncool数据库

mysql -uroot -p'123123'
use kahncool;
show tables;
select * from product;
select * from student;

MyCat-03之centos7上使用mycat部署垂直分库

2.在mycat32上查询本地mysql的kahncool数据库

mysql -uroot -p'123123'
use kahncool;
show tables;
select * from product;
select * from student;

MyCat-03之centos7上使用mycat部署垂直分库

3.小结

发现两台物理数据库都已经有一些表和数据存在了。这已经说明我们不熟的mycat已经成功的把数据库的表分开了。
等等,是不是感觉有点乱?以后再创建表的话将被创建到哪台物理服务器呢?
捋一捋?
MyCat-03之centos7上使用mycat部署垂直分库

这下看懂了吗?图中说的很清楚了。默认的服务器就是dn1,dn1是啥?dn1就是dataNode中定义的name="dn1",,它又等价于dataHost,那dataHost的值又传给了host1,那host1又是谁?下面又有一一对应的关系,host1指的就是writeHost中的host:192.168.73.31。

够清楚吧老铁?给双击不?

十三、登录mycat使用select再检查一下是否好用

mysql -umycat -p123456 -h 192.168.73.31 -P 8066
use TESTDB;
show tables;
select * from cutomer;
select * from student;

MyCat-03之centos7上使用mycat部署垂直分库

完美,能看到所有表已存在,而且都有数据。

至此,mycat垂直分库就做完了。

----------------------------------END-----------------2020年3月20日17:58:08-------------------------

写博客累,写教程更累,花费了整整半天时间。

如果对你有帮助,希望支持一把。谢谢老铁!
MyCat-03之centos7上使用mycat部署垂直分库

相关标签: Mycat