文档首页 > > 移植指南> 其他> 安装MyCat

安装MyCat

分享
更新时间:2020/08/06 GMT+08:00

介绍

简要介绍

MyCat是基于mysql数据库的分布式中间件,支持MySQL数据库分库分表,读写分离等。

语言:Java

一句话描述:分布式数据库中间件

建议的版本

建议使用1.6-release版本。

环境要求

云服务器要求

本文以云服务器KC1实例测试,云服务器配置如表1所示。

表1 云服务器配置

项目

说明

规格

kc1.xlarge.2 | 4vCPUs | 8GB

磁盘

系统盘:高IO(40GB)

操作系统要求

操作系统要求如表2所示。

表2 操作系统要求

项目

版本

下载地址

Euler OS

2.8

在公共镜像中已提供。

Kernel

4.19.36

在公共镜像中已提供。

配置编译环境

  • Java版本需要在“1.8.0”及上版本。

    您可以通过执行下面命令,安装“java 1.8.0”

    sudo yum install java-1.8.0-openjdk

  • 环境中已运行mysql服务,并且要预先创建好相应的库和表。
    表3 MySQL库表说明

    库名称

    说明

    db01

    只有一个user表

    db02

    item表

    db03

    item表

    db02和db03上的item根据id%2取模保存数据,也就是进行数据分片。

    执行下面命令,生成上面的库表:

    1. 连接MySQL数据库。

      mysql -uroot -p[PASSWORD]

    2. 执行以下SQL语句,创建db01库及其下的user表。
      create database db01;
      use db01
      CREATE TABLE `users` ( 
      `id` int(11) NOT NULL AUTO_INCREMENT, 
      `name` varchar(50) NOT NULL DEFAULT '', 
      `indate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', 
      PRIMARY KEY (`id`) 
      ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
    3. 执行以下SQL语句,创建db02及其下的item表。
      create database db02;
      use db02;
      CREATE TABLE `item` ( 
      `id` int(11) NOT NULL AUTO_INCREMENT, 
      `value` int(11) NOT NULL DEFAULT '0', 
      `indate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', 
      PRIMARY KEY (`id`) 
      ) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;
    4. 执行以下sql语句,创建db03及其下的item表。
      create database db03;
      use db03;
      CREATE TABLE `item` ( 
      `id` int(11) NOT NULL AUTO_INCREMENT, 
      `value` int(11) NOT NULL DEFAULT '0', 
      `indate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', 
      PRIMARY KEY (`id`) 
      ) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;

安装

本文采用“mycat-1.6”版本为例。

  1. 执行如下命令,下载软件包。

    wget https://github.com/MyCATApache/Mycat-download/raw/master/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz

  2. 执行如下命令,解压软件包。

    tar -zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C /usr/local/

  3. 执行如下命令,进入MyCat配置目录。

    cd /usr/local/mycat/conf

  4. 修改MyCat配置文件。

    下述配置文件的内容,可以直接替换配置文件原有的内容,也可根据实际情况修改。

    “server.xml”“schema.xml”中的[password]必须根据实际情况配置。

    • 配置“server.xml”,修改内容如下:
      <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE mycat:server SYSTEM "server.dtd">
      <mycat:server xmlns:mycat="http://io.mycat/">        
          <system>        
              <property name="useSqlStat">0</property>  <!-- 1为开启实时统计、0为关闭 -->        
              <property name="useGlobleTableCheck">0</property>  <!-- 1为开启全局一致性检测、0为关闭 -->                
              <property name="sequnceHandlerType">1</property>                
              <property name="processorBufferPoolType">0</property>                                              
              <property name="serverPort">8066</property>      <!-- 8066 为连接mycat的端口-->                                         
              <property name="managerPort">9066</property>       <!-- 9066 为连接mycat管理地址的端口-->                 
              <property name="idleTimeout">300000</property> 
              <property name="bindIp">0.0.0.0</property>                        
              <property name="frontWriteQueueSize">4096</property> 
              <property name="processors">32</property>                
              <property name="handleDistributedTransactions">0</property>                
              <property name="useOffHeapForMerge">1</property>                
              <property name="memoryPageSize">1m</property>                
              <property name="spillsFileBufferSize">1k</property>                
              <property name="useStreamOutput">0</property>                
              <property name="systemReserveMemorySize">384m</property>                
              <property name="useZKSwitch">true</property>        
          </system>        
          <!-- 配置连接mycat的账号密码, 和逻辑库名称, 可以设置多个-->        
          <user name="root">                
              <property name="password">[password]</property>                
              <property name="schemas">TESTDB</property>        
          </user>        
          <user name="user">                
              <property name="password">[password]</property>                
              <property name="schemas">TESTDB</property>                
              <property name="readOnly">true</property>        
          </user>
      </mycat:server>
    • 配置“rule.xml”,修改内容如下:
      <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE mycat:rule SYSTEM "rule.dtd">
      <mycat:rule xmlns:mycat="http://io.mycat/">        
          <!-- 指定表规则的名称, 以及分片的function-->        
          <tableRule name="mod-long">                
              <rule>                        
                  <columns>id</columns>                        
                  <algorithm>mod-long</algorithm>                
              </rule>        
          </tableRule>        
          <!-- 分片名称为mod-long, 为tableRule标签提供-->        
          <function name="mod-long" class="io.mycat.route.function.PartitionByMod">                
              <!-- 指定有几个节点,咱们有两个db02和db03,所以写2, 取模就是id%2 -->                
              <property name="count">2</property>                
              <property name="virtualBucketTimes">160</property>        
          </function>
      </mycat:rule>
    • 配置“schema.xml”,修改内容如下:
      <?xml version="1.0"?>
      <!DOCTYPE mycat:schema SYSTEM "schema.dtd">
      <mycat:schema xmlns:mycat="http://io.mycat/">        
          <!-- 声明一个逻辑表, 表名为TESTDB, 和server.xml中的对应 -->        
          <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">                
              <!-- 指定实际表名为users, 是在node_db01节点上-->                
              <table name="users" primaryKey="id" autoIncrement="true" dataNode="node_db01" />                
              <!-- 实际表名为item, 在node_db02和node_db03节点上-->                
              <table name="item" primaryKey="id" autoIncrement="true"  dataNode="node_db02,node_db03" rule="mod-long" />        
          </schema>
          <dataNode name="node_db01" dataHost="dataHost01" database="db01" />        
          <dataNode name="node_db02" dataHost="dataHost01" database="db02" />        
          <dataNode name="node_db03" dataHost="dataHost01" database="db03" />         
          <!-- 声明数据库的连接地址, 名称为dataHost01, 为dataNode节点提供-->        
          <dataHost name="dataHost01" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native">                         
              <heartbeat>select user()</heartbeat>                
              <!-- 数据库的连接地址,账号和密码-->                
              <writeHost host="server1" url="127.0.0.1:3306" user="root" password="[password]" />        
          </dataHost>
      </mycat:schema>

  5. 修改MyCat执行“startup_nowrap.sh”脚本,在脚本文件开头添加如下内容:

    vim /usr/local/mycat/bin/startup_nowrap.sh
    JAVA_HOME=/usr/lib/jvm/jre

运行和验证

  1. 执行以下命令,启动MyCat。

    /usr/local/mycat/bin/startup_nowrap.sh

  2. 执行以下命令,连接MyCat。

    [password]为“server.xml”中配置的用户密码。

    mysql -uroot -p[password] -h127.0.0.1 -P8066

  3. 执行以下命令,查看MyCat的库信息。

    show databases;

  4. 系统如下,表示MyCat拥有TESTDB库。

    +----------+
    | DATABASE |
    +----------+
    | TESTDB   |
    +----------+
    1 row in set (0.00 sec)

  5. 执行以下命令,进入“TESTDB”库。

    use TESTDB;

  6. 执行以下命令,查看“TESTDB”下的表信息。

    show tables;

    +------------------+
    | Tables in TESTDB |
    +------------------+
    | item             |
    | users            |
    +------------------+
    2 rows in set (0.00 sec)

  7. 执行以下SQL语句:

    insert into users(id,name,indate) values(1,'hello',now());

    insert into users(id,name,indate) values(2,'world',now());

    insert into item(id,value,indate) values(1,100,now());

    insert into item(id,value,indate) values(2,100,now());

    系统回显如下,表示能够正常使用MyCat。

    Query OK, 1 row affected (0.02 sec)

分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!非常感谢您的反馈,我们会继续努力做到更好!
反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

智能客服提问云社区提问