一、什么是mycat

简单直接点就是,MyCat其实就是一个数据库的中间件!一般我们都是app直接到数据库!有了MyCat以后,就是app到MyCat然后再访问数据库。

mycat是个中间件,它负责连接管理mysql,应用程序连接mycat,把mycat当作mysql服务那样连接操作。

linux系统的搭建

简介:

MyCat是java开发的,所以安装前要在你的系统的先安装jdk1.7以上的版本才可以。

一、JDK安装

安装步骤:

1、wget安装方式

起步搭建jdk1.7以上版本的java环境!然后下载mycat并且安装,修改配置然后启动mycat。

wget http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.tar.gz

 ls查看下载压缩包名并解压 (1、pwd 可查看当前下载目录和解压目录在root   2、yum install tar )

tar -zxvf jdk-8u131-linux-x64.tar.gz

2、yum 安装方式

1、搜索JDK安装包

 yum search java|grep jdk

  

2、安装

 yum install java-1.8.0-openjdk-src.x86_64

3、测试安装结果

java -version       通过yum默认安装的路径为  /usr/lib/jvm  可以通过cd  /usr/lib/jvm   命令 查看

二、MyCat安装

官网:http://www.mycat.io/

  

2、wget获取(使用pwd命令查看下载到当前的路径)

wget http://dl.mycat.io/1.6.6.1/Mycat-server-1.6.6.1-release-20181031195535-linux.tar.gz

3、解压

tar -zxvf Mycat-server-1.6.6.1-release-20181031195535-linux.tar.gz

4、环境变量配置

vi /etc/profile 添加
export MYCAT_HOME=/home/mycat
使环境变量生效source /etc/profile

5、启动mycat

进入mycat/bin目录,执行./mycat start    用ps -ef|grep mycat查看下进程
暂时先不管,mysql的监听端口是3306,mycat的监听端口是8066,检查下8066是不是在监听中

  

6、进程已启动端口被监听,接下来查看mycat的默认账号和密码以及配置server.xml

cd /home/mycat
cat conf/server.xml

  

配置了2个用户,一个是root,一个是user,接下来使用navicat连接

  

7、配置 server.xml   vim conf/server.xml 无权限

授权chmod -R 777 mycat

  

8、MyCat配置文件介绍

conf/rule.xml 定义分片规则
conf/schema.xml 定义逻辑库、表以及分片节点等内容
conf/server.xml 定义用户授权及服务器参数相关配置

  8.1配置schema

<?xml version="1.0"?>  #第一行必须是XML文件的第一个元素且前面不能空格。 否则报错"[xX][mM][lL]" 的处理指令目标
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://org.opencloudb/"> <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
#TESTDB 是MyCat默认的一个测试逻辑数据库,需要在此节点下定义逻辑表,但在这里只是指定表的名称,并不对表进行详细的定义。
#下面这条语句就是指逻辑表tb_user_info将在dn1,dn2,dn3上创建 使用的分片规则是 auto-sharding-long
<table name="travelrecord" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />
</schema>
<dataNode name="dn1" dataHost="192.168.2.130" database="db1" />
<dataNode name="dn2" dataHost="192.168.2.130" database="db2" />
<dataNode name="dn3" dataHost="192.168.2.130" database="db3" />
<dataHost name="192.168.2.130" 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.2.130:3306" user="root"
password="root123">
</writeHost>
</dataHost>
</mycat:schema>

  此时在schema.xml中配置好的表名,实际上只是一个逻辑的表,这个表在物理数据库中并不存在,需要在MyCat通过Create Table 来创建这个表,执行Create语句以后,MyCat会在真实MySql配置的数据库中创建表。

  8.2auto-sharding-long分片规则的实现原理

    <tableRule name="auto-sharding-long">
<rule>
<columns>id</columns>
<algorithm>rang-long</algorithm>
</rule>
</tableRule> <function name="rang-long" class="org.opencloudb.route.function.AutoPartitionByLong">
<property name="mapFile">autopartition-long.txt</property>
</function>

  可见这个TableRule是通过id 来进行分片的,分片的算法是rang-long,算法中使用了autopartition-long.txt

查看文本命令 cat autopartition-long.txt

  

# range start-end ,data node index
# K=1000,M=10000.
0-500M=0
500M-1000M=1
1000M-1500M=2

  K表示1000条记录,M表示10000条记录,上面的三个配置就是0~500万的记录会存在数据库db1的表中,500万~1000万会存在db2的表中,1000万~1500万会存在db3的表中。

9、TESTDB 是MyCat默认的一个测试逻辑数据库,需要在此节点下定义逻辑表,但在这里只是指定表的名称,并不对表进行详细的定义。

三、Mysql安装

1、参考安装即可

https://www.cnblogs.com/huiyi0521/p/10113280.html

2、解决支持远程连接mysql 

mysql> use mysql
mysql> select t.host from user t where t.user='root';
+--------------+
| host |
+--------------+
| localhost |
+--------------+

 这个返回结果说明现在 root 用户只允许在服务器的本地登录。 
执行如下命令: 

mysql>update user set host='%' where user='root';

然后重启 MySQL 服务就可以了。

四、实践

1、登录物理数据库,创建db1、db2、db3

create database db1;
create database db2;
create database db3;

2、客户端连接mycat,注意连接的是mycat而不是物理数据库,mycat默认端口号8066

mysql -uroot -p123456 -h127.0.0.1 -P8066 -DTESTDB

注意-P、-D需要大写,-h 后面必须是ip,使用localhost会出错

3、查看表,默认显示schema.xml中配置的表,实际上此时物理数据库没有表,所以查询employee会出错

 show databases;

4、修改mycat_home\conf\schema.xml中的url、user、password ,然后重新启动

./mycat restart 重启服务

5、表分片-mycat中,创建employee表,插入数据

create table employee (id int not null primary key,name varchar(100),sharding_id int not null);
insert into employee(id,name,sharding_id) values(1,'leader us',10000);
insert into employee(id,name,sharding_id) values(2, 'me',10010);
insert into employee(id,name,sharding_id) values(3, 'mycat',10000);
insert into employee(id,name,sharding_id) values(4, 'mydog',10010);

  mycat中,执行计划显示来自两个数据节点,与schema.xml中配置的一致

explain select * from employee;

物理数据库中,mycat创建了employee表,查看数据,可以发现数据实现了分片

注意:

schema.xml 配置schema、datanode、datahost
schema就是逻辑数据库,它包含table(逻辑表),表中有对应的datanode、分片规则
datanode,就是逻辑数据库,含有物理数据库名字
datahost,就是物理数据库的ip地址,用户名、密码等
server.xml 配置连接mycat的用户名、密码、数据库名
rule.xml 分片规则

 

 将物理数据库的某个数据库作为一个节点,与mycat逻辑数据表关联,操作mycat某个逻辑表即操作在该多个节点的某个表对应,实现将逻辑表在多个节点进行数据切片(切片规则根据id)

MyCAT 定义了一种特殊的表逻辑表也称全局表:

  1、全局表的插入、更新操作会实时在所有节点上执行,保持各个分片的数据一致性

  2、全局表的查询操作,只从一个节点获取

  3、全局表可以跟任何一个表进行 JOIN 操作

6、查询数据

6.1读的配置

读写配置一样

select * from  employee;
或者 select * from employee where id=3;

 对我来说就是查询操作就是查询mycat的逻辑表跟普通表操作一样

 

7、节点扩展-分片迁移

  7.1 配置文件修改以及分片节点的位置(切片节点位置就是更改物理库节点名不变)

7.2业务切换-表进行加锁 注意:在业务量小的时候,比如凌晨,进行切换

   先在db5、db6之上做flush table命令将dn2.employee内存中数据刷到磁盘中,并重新加载mycat:

7.2.1  先在dh1上127.0.0.1刷磁盘

mysql> flush table dn2.employee with read lock;      //或者两个切片 flush table dn2.employee,dn3.employee with read lock;
Query OK, 0 rows affected (0.00 sec)

7.2  解锁表

mysql> unlock tables;
Query OK, 0 rows affected (0.00 sec)

  

7.3 然后重新加载mycat,使改动的新配置的分片到新实例上生效

mysql> reload @@config;
Query OK, 1 row affected (0.08 sec)
Reload config success

  

7.4查看切片是否完整

mysql> explain select * from travelrecord;  

 7.2和7.3 都失败了 我直接    ./mycat restart 重启服务   (缺少平滑启动和锁定)

 那是因为7.2命令是在mysql里面执行的,

7.3是在 mycat 9066管理端口里执行   mysql -uroot -p123456 -h127.0.0.1 -P9066

插入测试

insert into employee(id,name,sharding_id) values(5, 'mycat',10000);
insert into employee(id,name,sharding_id) values(6, 'mydog',10010);

  

8切片规则- 三个节点 n1 、n2、n3 ,n1 满了新增n4 替换n1来插入,然后n1节点保留且切片规则只允许只读不允许插入即可解决。

一、MyCat的搭建的更多相关文章

  1. mycat快速搭建入门

    mycat是一个数据库中间件,在此不做多介绍,今天我们直接上入门级的搭建demo. 本例子用的是两台mysql数据库 搭建mycat环境之前确保自己的机器上已经安装了djk1.7及以上虚拟机,因为my ...

  2. mycat环境搭建

    最近工作中突然让搞mycat,特意私下在家先搞一套练个手: 1.先下载一个CentOS7 mini版本就可以(本人机器性能有限): 2.使用VMware创建虚拟机,过程百度下一大堆,这里不做详细介绍. ...

  3. Mycat基本搭建

    1.Java环境检查与安装(略) [检查] [root@mysqldb tmp]# java -verson -bash: java: command not found [直接解压安装] [root ...

  4. MyCAT+MySQL 搭建高可用企业级数据库集群——第2章 MyCat入门

    2-1 章节综述 2-2 什么是MyCat 2-3 什么是数据库中间层 2-4 MyCat的主要作用 2-5 MyCat基本元素 2-6 MyCat的安装 2-1 章节综述 1.掌握Mycat的基础概 ...

  5. MyCAT+MySQL 搭建高可用企业级数据库集群——第3章 MyCat核心配置讲解

    3-1 章节综述 3-2 常用配置文件间的关系 3-3 server.xml配置详解 3-4 log4j2.xml配置文件 3-5 rule.xml 3-6 常用分片算法(上) 3-7 常用分片算法( ...

  6. mycat+mysql搭建高可用集群1--垂直分库

    mycat垂直分库 本文主要介绍了如何使用mycat对mysql数据库进行垂直分库,包括: 垂直分库的步骤 垂直分库的环境准备 配置mycat垂直分库 1. 垂直分库的步骤 收集分析业务模块间的关系 ...

  7. MyCAT+MySQL搭建高可用企业级数据库集群视频课程

    原文地址:https://www.guangboyuan.cn/mycatmysql%E6%90%AD%E5%BB%BA%E9%AB%98%E5%8F%AF%E7%94%A8%E4%BC%81%E4% ...

  8. Mycat环境搭建教程收集(待实践)

    先收集,后续再实践. http://blog.csdn.net/dreamcode/article/details/44307377 http://blog.csdn.net/lanonola/art ...

  9. Mycat - 实现数据库的读写分离与高可用

    前言 开心一刻 上语文课,不小心睡着了,坐在边上的同桌突然叫醒了我,并小声说道:“读课文第三段”.我立马起身大声读了起来.正在黑板写字的老师吓了一跳,老师郁闷的看着我,问道:“同学有什么问题吗?”,我 ...

随机推荐

  1. switch and checkbox

    import 'package:flutter/material.dart'; void main()=>runApp(MyApp()); class MyApp extends Statele ...

  2. 利用世界杯,读懂 Python 装饰器

    Python 装饰器是在面试过程高频被问到的问题,装饰器也是一个非常好用的特性, 熟练掌握装饰器会让你的编程思路更加宽广,程序也更加 pythonic. 今天就结合最近的世界杯带大家理解下装饰器. 德 ...

  3. 对Android系统权限的认识

    Android系统是运行在Linux内核上的,Android与Linux分别有自己的一套严格的安全及权限机制 Android系统权限相关的内容 (一)linux文件系统上的权限 -rwxr-x--x ...

  4. Linux Namespace : Network

    Network namespace 在逻辑上是网络堆栈的一个副本,它有自己的路由.防火墙规则和网络设备.默认情况下,子进程继承其父进程的 network namespace.也就是说,如果不显式创建新 ...

  5. 微软Azure AspNetCore微服务实战第1期【补充2017-09-09活动】

    2017年09月09日,冒着酷暑,我们在(上海徐汇)虹桥路3号港汇中心2座10层组织了一次微软Azure AspNetCore微服务实战活动. 由于前期工作繁忙,活动完成之后,没能及时发布相关信息,特 ...

  6. JWT认证原理及使用

    一.JWT原理: 参考文章:https://www.jianshu.com/p/180a870a308a 1.传统的登录方式: 浏览器输入用户名密码,服务端校验通过,根据用户信息生成一个token,将 ...

  7. Jenkins - 构建Allure Report

    前言 本文为Pytest+Allure定制报告进阶篇,集成Jenkins,在Jenkins中直接生成报告,更方便测试人员查看. 一.安装插件allure-jenkins-plugin 1.进入系统管理 ...

  8. 学习yii2.0——行为

    学习yii框架的行为之前,需要先了解yii的事件,可以参考这篇博客: 怎么理解行为 yii框架的行为有点类似于trait,可以有个大体的概念: 1.有一个类A,包含一些属性和方法,很普通的一个类A. ...

  9. 我的第一个Go web程序 纪念一下

    参考Go web编程,很简单的程序: 大致的步骤: 绑定ip和端口 绑定对应的处理器或者处理器函数,有下面两种选择,选择一种即可监听ip及端口 处理器: 定义一个struct结构体 然后让这个结构体实 ...

  10. 【问题解决方案】之 cmd 窗口问题汇总

    cmd窗口C盘切不到其他盘的解决方案: 1.切换盘符,直接键入其他盘,如:>>D: (回车) 2.强行切换>>cd /d D: 或者 >>pushd C: