概述

Mycat,是一个数据库中间件,使用java语言编写,在程序和数据库之间塞一个代理层。使得操作物理数据库对我们透明化,可以像操作mysql等数据库那样操作mycat。

特性:

  • 可以当做一个Mysql数据库来使用(使用方面)。
  • 支持 MySQL 之外的数据库,通过 JDBC 实现。
  • 支持 ZK 配置(外部配置),带监控 mycat-web。

背景:Mycat是开源社区在阿里cobar基础上进行二次开发,解决了cobar存在的问题,并且加入了许多新的功能在其中。青出于蓝而胜于蓝。

能干什么:
mycat主要的用途有:

  1. 实现数据库主从架构的读写分离。
  2. 解决数据库分库分表带来的诸多问题。
  3. 多数据源整合。
  4. 解决分库分表后带来的分布式事务问题。
  5. 解决分库分表后的全局唯一Id问题。

当然,上述的情况也可以在应用程序中通过逻辑代码实现,但是,这样会导致业务代码和这些逻辑代码耦合在一起,会导致应用程序跟数据库耦合在一起。并且我们还得写这些复杂的逻辑代码。

大概原理:
Mycat 的原理中最重要的一个动词是“拦截”,它拦截了用户发送过来的 SQL 语句,首先对 SQL语句做了一些特定的分析:如分片分析、路由分析、读写分离分析、缓存分析等,然后将此 SQL 发往后端的真实数据库, 并将返回的结果做适当的处理,最终再返回给用户。


这种方式把数据库的分布式从代码中解耦出来,程序员察觉不出来后台使用 Mycat 还是MySQL。

核心概念:
概念 含义
主机 物理主机,一个数据库服务
物理数据库 真实的数据库,比如主机的会员数据库、订单数据库
物理表 真实的数据库表,比如订单表、会员表
分片 将原来单数据库的数据按照一定规则切分后分散存储在不同数据库节点的操作
分片节点 分片以后数据存储的节点
分片键 分片依据的字段, 例如 order_info 表以 id 为依据分片,id 就是分片键, 通常是主键
分片算法 分片的规则, 例如随机、 取模、 范围、 哈希、 枚举以及各种组合算法
逻辑表 相对于物理表, 是分片表聚合后的结果, 对于客户端来说跟真实的表没有区别,就是对物理表的一层抽象封装,操作该逻辑表相当于操作物理表的多个分片节点,最后把结果聚合起来,客户端使用起来就察觉不到数据分片了
逻辑数据库 相对于物理数据库, 是数据节点聚合后的结果,比如会员库分成了三个物理库,里面的表都一样,然后逻辑库就是对物理库的抽象封装
安装

前提:需要配置好了JDK环境,因为Mycat是java写的。

  1. 下载:
    地址:http://www.mycat.org.cn/

  2. 解压到/usr/local目录下:

tar -zxvf Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz -C /usr/local


目录说明:
bin:启动目录。
catlet:空目录。
conf:配置文件目录。
logs:日志目录。
lib:依赖jar包目录。
version.txt:版本信息文件。

主要配置文件:
schema.xml: 定义逻辑库,表、分片节点等内容
rule.xml: 定义分片规则
server.xml: 定义用户以及系统相关变量,如端口等

  1. 启动:
    先修改server.xml,设置登录用户名及密码。

先别管配置是什么意思,先配启动起来先。

<!-- 可以设置多个用户 user 标签的name属性就是用户名--><user name="mycat"><!-- 设置密码--><property name="password">123456</property><!-- 设置数据库,可以设置多个,逗号隔开--><property name="schemas">testmycat</property><!-- 设置是否只读--><property name="readOnly">false</property><!-- 设置默认数据库--><property name="defaultSchema">testmycat</property></user>

然后修改schema.xml,配置相关逻辑表和数据库节点信息。
把原本的内容注释掉或者删掉,重新配置好自己的内容:

 <schema name="testmycat" checkSQLschema="false" sqlMaxLimit="100" randomDataNode="dn1"></schema><dataNode name="dn1" dataHost="localhost" database="testmycat" /><dataHost name="localhost" maxCon="1000" minCon="10" balance="0"writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100"><heartbeat>select user()</heartbeat><!-- can have multi write hosts --><writeHost host="hostM1" url="192.168.18.140:3306" user="root"password="123456"></writeHost></dataHost>

首先确定你的物理数据库是否支持远程登录,如果不行,要找相应方法解决。

启动:
有前台启动和后台启动:
到bin目录下:

./mycat console #前台启动./mycat start  #后台启动

第一次启动为了能够方便看到启动日志,就选择前台启动:

启动成功,日志信息记录在logs/mycat.log文件中。

  1. 登录:
    有两个端口:
    一个是后台管理端口(9066),负责元信息查看等操作。
    一个是数据端口(8066),也就是我们平常增删改查的端口。

首先mycat服务器防火墙要开放这两个端口。

我们登录数据端口:

mysql -h 192.168.18.140 -P 8066 -umycat -p123456

登录成功,可以像使用mysql那样使用mycat就好。

Mycat概述、核心概念及linux安装、运行、登录相关推荐

  1. 云计算概念及Linux系统详解

    云计算概念及linux系统详解 先来看一下维基百科上的定义: 云计算是一种按使用量付费的模式,这种模式提供可用的.便捷的.按需的网络访问,进入可配置的网络.服务器.存储.应用软件.服务等能够被快速提供 ...

  2. 时间基础概念及Linux中的时间函数

    时间基础概念及Linux中的时间函数 时间相关概念 GMT 时间 UTC 时间 时区 `Time Zone` 夏令时 `DST` 本地时间 `localtime` Linux 系统中的时间 时钟基础概 ...

  3. 2-RabbitMQ核心概念及AMQP协议

    RabbitMQ核心概念及AMQP协议 [root@Centos ~]# rabbitmq-plugins list Configured: E = explicitly enabled; e = i ...

  4. linux安装运行jmeter,Linux下安装运行Jmeter程序

    Jmeter在linux系统中运行需要安装jdk和Jmeter两个软件: 1.安装JDK 先检查系统是否有安装jdk,在linux中执行如下命令:java -version  如果返回版本信息,说明系 ...

  5. linux安装运行redis

    redis是一个非关系型数据库,是一个存储键值对的数据库,通常被称为数据结构服务器. 值(value)可以是字符串(String).哈希(Hash).列表(list).集合(sets)和有序集合(so ...

  6. Maven核心概念及Eclipse使用Maven

    Eclipse使用Maven 1).添加Maven 2).修改本地库 3).建立Maven项目 4).文件结构 5).关于web项目报错的解决 新建立的文件无web结构: 修改: 结果: Ps:此时还 ...

  7. linux挂载cifs磁盘_SMB、CIFS和NETBIOS协议概念及linux挂载远程文件系统

    一.SMB(Server Message Block)协议 SMB协议是基于TCP-NETBIOS下的,一般端口使用为139,445. 服务器信息块(SMB)是微软(Microsoft)和英特尔(In ...

  8. Redis Linux 安装运行实战全记录

    下载Redis 去Redis官网下载最新的Linux包,Redis官方没有Windows版的下载. https://redis.io/ 下载后把包上传到Linux服务器. 安装Redis 1.解压Re ...

  9. Rust P2P网络应用实战-1 P2P网络核心概念及Ping程序

    本系列文章首先研究P2P网络的核心概念,然后详细分析libp2p-rust库中的应用实例,为以后开发P2P网络应用程序打好基础. P2P网络 P2P(Peer-to-Peer)是一种网络技术,可以在网 ...

最新文章

  1. Windows Server2016 安装及配置DFS实现数据复制
  2. adsafe for linux,新闻|关于网站广告和过滤器的那些事
  3. 十六、深入Java的数组(下篇)
  4. java bip-39_Java中对XML的解析详解
  5. oracle中的日期查询在mybatis中写法
  6. 统计字符串中出现最多的单词和次多的单词
  7. 使用 C-JDBC 给 Mysql 集群
  8. SpringBoot : Spring Boot中使用数据缓存 spring-boot-starter-cache
  9. bootstrap 生日选择_bootstrap的datetimepicker只选择月份
  10. 每天学一点flash(70)弹出和关闭窗口
  11. Python多线程编程---(1)threading 模块 Thread 类
  12. (转)走出MFC子类化的迷宫:子类化,SUBCLASSWINDOW ,MFC消息机制 ---(摘自CSDN论坛)
  13. 使用C++进行SVG开发
  14. linux服务-mysql主从配置
  15. R语言ggplot2可视化条形图:通过双色渐变配色颜色主题可视化条形图
  16. Word导出PDF图片模糊、失真 解决办法
  17. 基于EasyX的推箱子游戏
  18. 2022年烷基化工艺模拟考试题及烷基化工艺模拟考试题库
  19. 通过 SQL Server 视图访问另一个IP地址数据库服务器表的方法
  20. ABAP 身份证校验的函数

热门文章

  1. 《天天数学》连载37:二月六日
  2. 如何才能CentOS终端输入中文
  3. Go程序:演示map用法
  4. fetch first mysql_MySQL多版本并发控制机制(MVCC)源码浅析
  5. 2017.10.5 最短母串 思考记录
  6. 2017.4.19 多项式输出 思考记录
  7. 【英语学习】【WOTD】commemorate 释义/词源/示例
  8. 【英语学习】【WOTD】ecstatic 释义/词源/示例
  9. Pentium奔腾架构/流水线及其优化
  10. C++Socket编程总结