mycat初次简单配置分库分表

先规划下数据库的基础架构,先来个最简单基础的。

三台虚机,各安装了mysql5.7
用mycat建立逻辑数据库,建立5个表格,其中一个表格分库,一个表格做全局表,剩余三个表格每个虚机的数据库各放一个。

统计信息:

三个虚机的IP分别为:
192.168.211.138
192.168.211.139
192.168.211.142

真实的dataNode就是这三个虚机啦。

mysql的登录用户就用[email protected]%,密码都是:[email protected]

mycat逻辑库的名字命名为:hello
五张表格:
t1,t2,t3,t4,t5
t1做分库,t2做全局,t3放到dn1,t4放到dn2,t5放到dn3

预先需要考虑的问题:

分库的规则是什么?

先开始做吧,到哪一步再来思考。

首先配置schema.xml文件

先把配置文件备份一下 
[[email protected] conf]# cp schema.xml schema.xml.bk2

清空配置文件
[[email protected] conf]# echo " " > schema.xml

开始配置:
[[email protected] conf]# vi schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">       这是定义文件头,xml格式默认必须有

<schema name="hello" checkSQLschema="false" sqlMaxLimit="100">    定义mycat逻辑库
        <!-- auto sharding by id (long) -->                               注释说明下面是分库表
        <table name="t1" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />    定义t1分库

<!-- global table is auto cloned to all defined data nodes ,so can join
with any table whose sharding node is in the same data node -->     注释说明是全局表
        <table name="t2" primaryKey="ID" type="global" dataNode="dn1,dn2,dn3" />       定义t2是全局表
<table name="t3" dataNode="dn1" />
<table name="t4" dataNode="dn2" />
<table name="t5" dataNode="dn3" />              这里还需要测试 定义各个分别存放在哪里

</schema>                                       结束标签

<!-- <dataNode name="dn1$0-743" dataHost="localhost1" database="db$0-743"
/> -->
<dataNode name="dn1" dataHost="mysql1" database="db1" />                  定义NODE
<dataNode name="dn2" dataHost="mysql2" database="db2" />
<dataNode name="dn3" dataHost="mysql3" database="db3" />
<dataHost name="mysql1" 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.211.138:3306" user="root"
   password="[email protected]">
<!-- can have multi read hosts -->
<readHost host="hostS2" url="192.168.211.138:3306" user="root" password="[email protected]"/>
</writeHost>
</dataHost>

<dataHost name="mysql2" 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.211.139:3306" user="root"
                                   password="[email protected]">
                 <!-- can have multi read hosts -->
<readHost host="hostS2" url="192.168.211.139:3306" user="root" password="[email protected]"/>
</writeHost>
</dataHost>
       
       <dataHost name="mysql3" 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.211.142:3306" user="root"
                                   password="[email protected]">
                 <!-- can have multi read hosts -->
<readHost host="hostS2" url="192.168.211.142:3306" user="root" password="[email protected]"/>
</writeHost>
</dataHost>

</mycat:schema>                 结束标签

配置server.xml

<user name="root">
                <property name="password">123456</property>
                <property name="schemas">TESTDB</property>            TESTDB改成自己的逻辑库,我的是hello

<!-- 表级 DML 权限设置 -->
                <!--
                <privileges check="false">
                        <schema name="TESTDB" dml="0110" >
                                <table name="tb01" dml="0000"></table>
                                <table name="tb02" dml="1111"></table>
                        </schema>
                </privileges>
                 -->
        </user>

<user name="user">
                <property name="password">user</property>
                <property name="schemas">TESTDB</property>
                <property name="readOnly">true</property>
        </user>

启动服务 [[email protected] conf]# ../bin/mycat start
   Starting Mycat-server...

登录看看   [[email protected] conf]# mysql -uroot -p123456 -P8066 -h 127.0.0.1

稍微等一下登录,我发现马上登录会报错,说登录不上去。可以执行:
  [[email protected] conf]# ps -ef |grep mycat
  看看进程启动没有

操作看看

我这边登录成功了,参考信息如下
登录有两个端口,9066是管理端口,可以查看监控信息,8066是普通数据库登录端口,下面我是用9066端口登录,检查信息

[[email protected] logs]# mysql -uroot -p123456 -P9066 -h 127.0.0.1
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.29-mycat-1.6-RELEASE-20161028204710 MyCat Server (OpenCloundDB)

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

mysql> show @@help;
+------------------------------------------+--------------------------------------------+
| STATEMENT                                | DESCRIPTION                                |
+------------------------------------------+--------------------------------------------+
| show @@time.current                      | Report current timestamp                   |
| show @@time.startup                      | Report startup timestamp                   |
| show @@version                           | Report Mycat Server version                |
| show @@server                            | Report server status                       |
| show @@threadpool                        | Report threadPool status                   |
| show @@database                          | Report databases                           |
| show @@datanode                          | Report dataNodes                           |
| show @@datanode where schema = ?         | Report dataNodes                           |
| show @@datasource                        | Report dataSources                         |
| show @@datasource where dataNode = ?     | Report dataSources                         |
| show @@datasource.synstatus              | Report datasource data synchronous         |
| show @@datasource.syndetail where name=? | Report datasource data synchronous detail  |
| show @@datasource.cluster                | Report datasource galary cluster variables |
| show @@processor                         | Report processor status                    |
| show @@command                           | Report commands status                     |
| show @@connection                        | Report connection status                   |
| show @@cache                             | Report system cache usage                  |
| show @@backend                           | Report backend connection status           |
| show @@session                           | Report front session details               |
| show @@connection.sql                    | Report connection sql                      |
| show @@sql.execute                       | Report execute status                      |
| show @@sql.detail where id = ?           | Report execute detail status               |
| show @@sql                               | Report SQL list                            |
| show @@sql.high                          | Report Hight Frequency SQL                 |
| show @@sql.slow                          | Report slow SQL                            |
| show @@sql.resultset                     | Report BIG RESULTSET SQL                   |
| show @@sql.sum                           | Report  User RW Stat                       |
| show @@sql.sum.user                      | Report  User RW Stat                       |
| show @@sql.sum.table                     | Report  Table RW Stat                      |
| show @@parser                            | Report parser status                       |
| show @@router                            | Report router status                       |
| show @@heartbeat                         | Report heartbeat status                    |
| show @@heartbeat.detail where name=?     | Report heartbeat current detail            |
| show @@slow where schema = ?             | Report schema slow sql                     |
| show @@slow where datanode = ?           | Report datanode slow sql                   |
| show @@sysparam                          | Report system param                        |
| show @@syslog limit=?                    | Report system mycat.log                    |
| show @@white                             | show mycat white host                      |
| show @@white.set=?,?                     | set mycat white host,[ip,user]             |
| show @@directmemory=1 or 2               | show mycat direct memory usage             |
| switch @@datasource name:index           | Switch dataSource                          |
| kill @@connection id1,id2,...            | Kill the specified connections             |
| stop @@heartbeat name:time               | Pause dataNode heartbeat                   |
| reload @@config                          | Reload basic config from file              |
| reload @@config_all                      | Reload all config from file                |
| reload @@route                           | Reload route config from file              |
| reload @@user                            | Reload user config from file               |
| reload @@sqlslow=                        | Set Slow SQL Time(ms)                      |
| reload @@user_stat                       | Reset show @@sql  @@sql.sum @@sql.slow     |
| rollback @@config                        | Rollback all config from memory            |
| rollback @@route                         | Rollback route config from memory          |
| rollback @@user                          | Rollback user config from memory           |
| reload @@sqlstat=open                    | Open real-time sql stat analyzer           |
| reload @@sqlstat=close                   | Close real-time sql stat analyzer          |
| offline                                  | Change MyCat status to OFF                 |
| online                                   | Change MyCat status to ON                  |
| clear @@slow where schema = ?            | Clear slow sql by schema                   |
| clear @@slow where datanode = ?          | Clear slow sql by datanode                 |
+------------------------------------------+--------------------------------------------+
58 rows in set (0.01 sec)

以上是可以使用的监控命令,下面操作几个看看

mysql> show @@datanode;          
+------+------------+-------+-------+--------+------+------+---------+------------+----------+---------+---------------+
| NAME | DATHOST    | INDEX | TYPE  | ACTIVE | IDLE | SIZE | EXECUTE | TOTAL_TIME | MAX_TIME | MAX_SQL | RECOVERY_TIME |
+------+------------+-------+-------+--------+------+------+---------+------------+----------+---------+---------------+
| dn1  | mysql1/db1 |     0 | mysql |      0 |   10 | 1000 |      94 |          0 |        0 |       0 |            -1 |
| dn2  | mysql2/db2 |     0 | mysql |      0 |   10 | 1000 |      92 |          0 |        0 |       0 |            -1 |
| dn3  | mysql3/db3 |     0 | mysql |      0 |   10 | 1000 |      94 |          0 |        0 |       0 |            -1 |
+------+------------+-------+-------+--------+------+------+---------+------------+----------+---------+---------------+
3 rows in set (0.01 sec)

三个datanode,正常。

[[email protected] logs]# mysql -uroot -p123456 -P8066 -h 127.0.0.1

普通口登录操作看看

mysql> show databases;
+----------+
| DATABASE |
+----------+
| hello    |
+----------+
1 row in set (0.00 sec)

mysql>

mysql> show tables;
+-----------------+
| Tables in hello |
+-----------------+
| t1              |
| t2              |
| t3              |
| t4              |
| t5              |
+-----------------+
5 rows in set (0.00 sec)

mysql> desc t1;
ERROR 1146 (42S02): Table 'db1.t1' doesn't exist
mysql> 
报错,因为实际我们还没有创建表格

mysql> create table t1(id int not null,name varchar(20));
Query OK, 0 rows affected (0.66 sec)

mysql> desc t1;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   |     | NULL    |       |
| name  | varchar(20) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.08 sec)

mysql>

mysql> explain create table t1(id int not null,name varchar(20));
+-----------+---------------------------------------------------+
| DATA_NODE | SQL                                               |
+-----------+---------------------------------------------------+
| dn1       | create table t1(id int not null,name varchar(20)) |
| dn2       | create table t1(id int not null,name varchar(20)) |
| dn3       | create table t1(id int not null,name varchar(20)) |
+-----------+---------------------------------------------------+
3 rows in set (0.04 sec)

注意t1分库,三个node都会生成

mysql> create table t2(id int not null,money varchar(100));
Query OK, 0 rows affected (0.12 sec)

mysql> desc t2;
+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id    | int(11)      | NO   |     | NULL    |       |
| money | varchar(100) | YES  |     | NULL    |       |
+-------+--------------+------+-----+---------+-------+
2 rows in set (0.08 sec)

mysql>

mysql> explain create table t2(id int not null,money varchar(100));
+-----------+-----------------------------------------------------+
| DATA_NODE | SQL                                                 |
+-----------+-----------------------------------------------------+
| dn1       | create table t2(id int not null,money varchar(100)) |
| dn2       | create table t2(id int not null,money varchar(100)) |
| dn3       | create table t2(id int not null,money varchar(100)) |
+-----------+-----------------------------------------------------+
3 rows in set (0.00 sec)

mysql>

注意t2全局表,三个node都会生成

mysql> create table t3(id int not null,bu varchar(20));
Query OK, 0 rows affected (0.04 sec)

mysql> desc t3;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   |     | NULL    |       |
| bu    | varchar(20) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.13 sec)

mysql>

mysql> explain create table t3(id int not null,bu varchar(20));
+-----------+-------------------------------------------------+
| DATA_NODE | SQL                                             |
+-----------+-------------------------------------------------+
| dn1       | create table t3(id int not null,bu varchar(20)) |
+-----------+-------------------------------------------------+
1 row in set (0.00 sec)

mysql>

t3,我们默认是设置放到node dn1上的,实现要求。

mysql> explain create table t4(id int not null,city varchar(10);
+-----------+--------------------------------------------------+
| DATA_NODE | SQL                                              |
+-----------+--------------------------------------------------+
| dn2       | create table t4(id int not null,city varchar(10) |
+-----------+--------------------------------------------------+
1 row in set (0.00 sec)

mysql> explain  create table t5(id int not null,company varchar(50));
+-----------+------------------------------------------------------+
| DATA_NODE | SQL                                                  |
+-----------+------------------------------------------------------+
| dn3       | create table t5(id int not null,company varchar(50)) |
+-----------+------------------------------------------------------+
1 row in set (0.00 sec)

mysql>

t4放到node  dn2
t5放到node  dn3

达到了我们设计的要求。

原文地址:http://blog.51cto.com/goome/2058960

时间: 2024-11-06 14:09:31

mycat初次简单配置分库分表的相关文章

Mycat读写分离和分库分表配置

Mycat是一个开源的分布式数据库系统,不同于oracle和mysql,Mycat并没有存储引擎,但是Mycat实现了mysql协议,前段用户可以把它当做一个Proxy.其核心功能是分表分库,即将一个大表水平分割为N个小表,存储在后端mysql存储引擎里面.最新版本的Mycat不仅支持mysql,还可以支持MS SqlServer,Oracle,DB2等关系型数据库,而且还支持MongoDB这种NoSQL.Mycat对调用者屏蔽了后端存储具体实现. Mycat的原理是先拦截用户的SQL语句并做分

MyCat实现读写分离+分库分表+全局表

前言 mycat功能强大,配置简单,作为数据库中间件,是一个非常优秀的开源产品,关于MyCat的部署安装,可以参考博文:MyCat部署安装. 本博文将展示mycat的如下功能: 读写分离: 分库分表: 全局表: 环境如下: 系统 IP 主机名 服务 Centos 7.5 192.168.20.2 mysql01 MySQL 5.7.24 Centos 7.5 192.168.20.3 mysql02 MySQL 5.7.24 Centos 7.5 192.168.20.3 mysql03 MyS

【MySQL】MySQL中针对大数据量常用技术_创建索引+缓存配置+分库分表+子查询优化(转载)

原文地址:http://blog.csdn.net/zwan0518/article/details/11972853 目录(?)[-] 一查询优化 1创建索引 2缓存的配置 3slow_query_log分析 4分库分表 5子查询优化 二数据转移 21插入数据 如今随着互联网的发展,数据的量级也是撑指数的增长,从GB到TB到PB.对数据的各种操作也是愈加的困难,传统的关系性数据库已经无法满足快速查询与插入数据的需求.这个时候NoSQL的出现暂时解决了这一危机.它通过降低数据的安全性,减少对事务

使用Mycat实现MySQL的分库分表、读写分离、主从切换

Mycat及MySQL实例部署情况:Mycat:IP:10.20.8.57,Port:3310/3311MySQL :db1-M1,IP:10.20.8.126,Port:3306db1-M2,IP:10.20.8.126,Port:3307db2-M1,IP:10.25.80.7,Port:3307架构图如下: 配置Mycatserver.xml: <!DOCTYPE mycat:server SYSTEM "server.dtd"> <mycat:server x

超简单理解分库分表

目录 一.为什么要做分库分表 二.如何进行数据分片 1.垂直切分 2.水平切分(重点) 三.数据切分后会出现的问题 数据源管理的问题 一.为什么要做分库分表 在数据爆炸的年代,单表数据达到千万级别,甚至过亿的量,都是很常见的情景.这时候再对数据库进行操作就是非常吃力的事情了,select个半天都出不来数据,这时候业务已经难以维系.不得已,分库分表提上日程,我们的目的很简单,减小数据库的压力,缩短表的操作时间. 二.如何进行数据分片 数据切分(Sharding),简单的来说,就是通过某种特定的条件

MyCat 读写分离 数据库分库分表 中间件 安装部署,及简单使用

MyCat是一个开源的分布式数据库系统,是一个实现了MySQL协议的服务器,前端用户可以把它看作是一个数据库代理,用MySQL客户端工具和命令行访问,而其后端可以用MySQL原生协议与多个MySQL服务器通信,也可以用JDBC协议与大多数主流数据库服务器通信,其核心功能是分表分库,即将一个大表水平分割为N个小表,存储在后端MySQL服务器里或者其他数据库里. MyCat发展到目前的版本,已经不是一个单纯的MySQL代理了,它的后端可以支持MySQL.SQL Server.Oracle.DB2.P

微服务、分库分表、分布式事务管理、APM链路跟踪性能分析演示项目

好多年没发博,最近有时间整理些东西,分享给大家. 所有内容都在github项目liuzhibin-cn/my-demo中,基于SpringBoot,演示Dubbo微服务 + Mycat, Sharding-Proxy分库分表 + Seata分布式事务管理 + ZipKin, SkyWalking, PinPoint性能分析链路跟踪APM工具,有详细文档,可以快速运行 演示项目架构 运行演示项目 package.sh为打包脚本: sh package.sh:最简单运行方式,使用单个MySQL数据库

SpringBoot使用sharding-jdbc分库分表

一.前言 一般来说,随着业务的发展数据库的数据量会越来越多,当单表数据超过上千万时执行一些查询sql语句就会遇到性能问题.一开始可以用主从复制读写分离来减轻db压力,但是后面还是要用分库分表把数据进行水平拆分和垂直拆分. 实现分库分表目前我知道的方式有两种,第一种是使用mycat中间件实现,第二种是使用sharding-jdbc实现.相比较而言,sharding-jdbc引入一个jar包即可使用更轻量级一些,它们之间的优缺点这里也不做比较,有兴趣的可以自己搜索相关资料. 不清楚分库分表原理的可以

MySQL 高可用:mysql+mycat实现数据库分片(分库分表)

本文引用于http://blog.csdn.net/kk185800961/article/details/51147029 MySQL 高可用:mysql+mycat实现数据库分片(分库分表) 什么是MYCAT: 一个彻底开源的,面向企业应用开发的大数据库集群 支持事务.ACID.可以替代MySQL的加强版数据库 一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群 一个融合内存缓存技术.NoSQL技术.HDFS大数据的新型SQL Server 结合传统数据库和新型分布式数