mysql 高级 10-Mycat 安装

2021年02月06日 12:38 · 阅读(192) ·

参考

Mycat → 实现数据库的读写分离与高可用

开发环境

名称 版本
VMware® Workstation 12 Pro 12.0.0 build-2985596
CentOS7 CentOS-7-x86_64-DVD-2003.iso
Linux 3.10.0-1127.el7.x86_64
mysql 5.7.16
mycat 1.6
Navicat Premium 12.1.16

测试用数据库

名称 描述
IP 192.168.114.128
数据库 luoma_test_1
表名 t1
用户名 root
密码 123456

安装 JDK1.8

Mycat 依赖 jdk,我们需要先安装 jdk,必须是 JDK7 或更高版本

安装 JDK1.8

Mycat 介绍

Mycat 是什么?是数据库中间件,介于数据库与应用之间,进行数据处理与交互的中间件服务,可以简单的理解成数据库代理,我们的应用只需要与数据库中间件交互,而无需关注复杂的数据库部署。

如上图所示,数据被分到多个分片数据库后,应用如果需要读取数据,就需要处理多个数据源的数据。如果没有数据库中间件,那么应用将直接面对分片集群,数据源切换、事务处理、数据聚合都需要在应用层直接处理,原本该是专注于业务的应用,将会花大量的工作来处理分片后的问题,最重要的是每个应用处理将是完全的重复造轮子。所以有了数据库中间件,应用只需要关注业务处理,大量的通用的数据聚合、事务、数据源切换都由数据库中间件来处理。

Mycat 可以做什么?
1.读写分离
2.数据分片
(1)垂直拆分
(2)水平拆分
(3)垂直+水平拆分
3.多数据源整合

Mycat 原理——“拦截”

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

Mycat 下载

http://www.mycat.org.cn/

Mycat 安装

1.拷贝文件并解压

(1)把文件 Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz 拷贝到 Linux 下 /usr/local/ 目录

(2)解压 tar -zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz

2.三个配置文件介绍

进入 cd /usr/local/mycat/conf 目录,可以看到三个文件

名称 描述
schema.xml 定义逻辑库,表、分片节点等内容
rule.xml 定义分片规则
server.xml 定义用户以及系统相关变量,如端口等

3.修改 schema.xml

vim /usr/local/mycat/conf/schema.xml

主要修改三个节点

  1. <schema>
  2. <dataNode>
  3. <dataHost>
  1. <?xml version="1.0"?>
  2. <!DOCTYPE mycat:schema SYSTEM "schema.dtd">
  3. <mycat:schema xmlns:mycat="http://io.mycat/">
  4. <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
  5. </schema>
  6. <dataNode name="dn1" dataHost="localhost1" database="luoma_test_1" />
  7. <dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
  8. writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
  9. <heartbeat>select user()</heartbeat>
  10. <writeHost host="hostM1" url="192.168.114.128:3306" user="root"
  11. password="123456">
  12. </writeHost>
  13. </dataHost>
  14. </mycat:schema>

4.修改 server.xml

vim /usr/local/mycat/conf/server.xml

  1. <user name="root">
  2. <property name="password">123456</property>
  3. <property name="schemas">TESTDB</property>
  4. </user>

5.修改 mycat 内存配置

vi /usr/local/mycat/conf/wrapper.conf

  1. wrapper.java.additional.10=-Xmx4G
  2. wrapper.java.additional.11=-Xms1G

6.配置 hostname(若已配置则忽略)

(1)查看主机名 hostname

  1. [root@luoma conf]# hostname
  2. luoma.centos

(2)配置 vi /etc/sysconfig/network

  1. HOSTNAME=luoma.centos

(3)配置 vi /etc/hosts

127.0.0.1::1 末尾追加你的主机名

  1. 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 luoma.centos
  2. ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 luoma.centos

7.将 MyCat 配置到环境变量中

vi /etc/profile

增加如下内容

  1. MYCAT_HOME=/usr/local/mycat
  2. PATH=$MYCAT_HOME/bin:$PATH

执行 source 命令使配置生效

  1. source /etc/profile

8.启动 Macat

(1)控制台启动 :去 /usr/local/mycat/bin 目录下 mycat console

(2)后台启动 :去 /usr/local/mycat/bin 目录下 mycat start

  1. [root@luoma sysconfig]# mycat start
  2. Starting Mycat-server...

Mycat 启动相关命令

命令 描述
mycat start 启动 MyCat
mycat status 查看启动状态
mycat stop 停止
mycat restart 重启

连接测试

1.后台管理窗口

  1. mysql -uroot -p123456 -P9066 -h192.168.114.128

显示数据库

  1. show database;
  1. mysql> show database;
  2. +----------+
  3. | DATABASE |
  4. +----------+
  5. | TESTDB |
  6. +----------+
  7. 1 row in set (0.00 sec)

显示帮助 show @@help;

2.数据窗口

(1)进入数据窗口

  1. mysql -uroot -p123456 -P8066 -h192.168.114.128

ERROR 3009 (HY000): java.lang.IllegalArgumentException: Invalid DataSource:0

查询数据报错

  1. mysql> select * from t1;
  2. ERROR 3009 (HY000): java.lang.IllegalArgumentException: Invalid DataSource:0

原因

通过 Navicat Premium 12 访问数据库,可以看到通过 root 用户无法访问

修改数据库 root 用户访问权限

  1. mysql -uroot -p123456
  1. -- 修改 root 用户所有主机可以访问
  2. update user set host = '%' where user='root';
  3. -- 立即生效
  4. flush privileges;

(2)查询

  1. mysql> select *from t1;
  2. +------+----------+
  3. | id | content |
  4. +------+----------+
  5. | 1 | luoma1.1 |
  6. | 2 | luoma1.2 |
  7. +------+----------+
  8. 2 rows in set (0.15 sec)

(3)创建表和数据

  1. create table t2(id int,content varchar(100));
  2. insert into t2 values(1,'mycat1');
  3. insert into t2 values(2,'mycat2');

在 luoma_test_1 中查看创建的表和数据