DBA10 - 分库分表概述 配置mycat

本文介绍如何安装配置 Mycat 数据库中间件,并通过示例展示如何定义分片规则,实现数据水平拆分。文章详细解释了配置文件 server.xml 和 schema.xml 的设置方法,包括连接参数、数据节点分配及分片表定义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1  装包
]# rpm  -qa  | grep -i jdk
]# tar -zxvf Mycat-server-1.4-beta-20150604171601-linux.tar.gz
]# mv  mycat/   /usr/local/

2 工作目录说明
]# cd  /usr/local/mycat
]#ls  conf/
rule.xml
schema.xml
server.xml


ls /usr/local/mycat/conf
server.xml 设置连接mycat服务的账号 参数 等
schema.xml 配置mycat使用的真实数据库和表
rule.xml   定义mycat分片规则

配置文件标签说明:
<user>…….</user>  定义连接mycat服务时使用的用户和密码及逻辑库的名字
<datanode>……</datanode> 指定数据节点(物理库的主机名和存储分片数据的数据库名)
<datahost>……</datahost> 指定数据库服务器的IP地址 及连接数据库时使用的授权用户名及密码


名词解释:
逻辑库: 客户端连接mycat服务器后看到的库名
逻辑表: 客户端连接mycat服务器后看到表明,表明要与程序员存储数据用的表名相同。

编辑配置文件:

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

        <user name=”admin”>
                <property name=”password”>123456</property>
                <property name=”schemas”>TESTDB</property>
        </user>

        <user name=”webuser”>
                <property name=”password”>123456</property>
                <property name=”schemas”>TESTDB</property>
                <property name=”readOnly”>true</property>
        </user>
cat /usr/local/mycat/conf/schema.xml 

<?xml version=”1.0”?>
<!DOCTYPE mycat:schema SYSTEM “schema.dtd”>
<mycat:schema xmlns:mycat=”http://org.opencloudb/”>

          <schema name=”TESTDB” checkSQLschema=”false” sqlMaxLimit=”100”> #逻辑库名 要与server.xml定义的一样
                 <table name=”travelrecord” dataNode=”dn1,dn2” rule=”auto-sharding-long” />  #定义分片的表
                 <table name=”company” primaryKey=”ID” type=”global” dataNode=”dn1,dn2” />  #定义分片的表
                 <table name=”goods” primaryKey=”ID” type=”global” dataNode=”dn1,dn2” /> #定义分片的表   
                 <table name=”hotnews” primaryKey=”ID” dataNode=”dn1,dn2” rule=”mod-long” /> #定义分片的表
                 <table name=”employee” primaryKey=”ID” dataNode=”dn1,dn2” rule=”sharding-by-intfile” />   #定义分片的表
                 <table name=”customer” primaryKey=”ID” dataNode=”dn1,dn2” rule=”sharding-by-intfile” /> #定义分片的表
          </schema>
    
        <dataNode name=”dn1” dataHost=”c1” database=”db1” /> 
        #定义分片使用的库,所在的物理主机 ,真正存储数据的db1库在物理主机c1上
    
        <dataNode name=”dn2” dataHost=”c2” database=”db2” /> 
        #定义分片使用的库,所在的物理主机 ,真正存储数据的db2库在物理主机c2上
    
         #指定c1名称主机对应的ip地址
    <dataHost name=”c1” maxCon=”1000” minCon=”10” balance=”0”
        writeType=”0” dbType=”mysql” dbDriver=”native” > 
        <heartbeat>select user()</heartbeat>
                <writeHost host=”hostM1” url=”192.168.4.55:3306” user=”admin”    
            password=”123456”>   #访问数据时 mycat服务连接数据库服务器时使用的用户名和密码
        </writeHost>
    </dataHost>

         #指定c2名称主机对应的ip地址
    <dataHost name=”c2” maxCon=”1000” minCon=”10” balance=”0”
        writeType=”0” dbType=”mysql” dbDriver=”native” >
        <heartbeat>select user()</heartbeat>
                <writeHost host=”hostM2” url=”192.168.4.54:3306” user=”admin”
            password=”123456”>  #访问数据时 mycat服务连接数据库服务器时使用的用户名和密码
        </writeHost>
    </dataHost>
</mycat:schema>

++++++++++++++++++++启动服务
 [root@localhost ~]# sed -n  ‘4,5p’ /usr/local/mycat/conf/wrapper.conf 
  # Java Application
  wrapper.java.command=java
 [root@localhost ~]#
 [root@localhost ~]# which java
  /usr/bin/java

 [root@localhost ~]#echo  “export PATH=/usr/local/mycat/bin”  >> /etc/profile
 [root@localhost ~]#source  /etc/profile

 [root@localhost ~]# mycat  –help
 Usage: /usr/local/mycat/bin/mycat { console | start | stop | restart | status | dump }
 [root@localhost ~]#

 [root@localhost ~]# mycat  start
 Starting Mycat-server…
 [root@localhost ~]# 
 [root@localhost ~]# netstat -utnalp  | grep :8066
 tcp6       0      0 :::8066                 :::*                    LISTEN      4524/java           
 [root@localhost ~]#


++++++++++++++++++++++++测试MyCAT
[root@room9pc17 ~]# mysql -h192.168.4.56 -P8066 -utest -ptest  //客户端连接mycat服务器,存储数据
MySQL [(none)]> show databases;
+———-+
| DATABASE |
+———-+
| TESTDB   |
+———-+
1 row in set (0.00 sec)
MySQL [(none)]> use TESTDB;
MySQL [TESTDB]> show tables;
+——————+
| Tables in TESTDB |
+——————+
| company          |
| customer         |
| employee         |
| goods            |
| hotnews          |
| travelrecord     |
+——————+
6 rows in set (0.00 sec)

MySQL [TESTDB]> MySQL [TESTDB]> create table employee( id int not null primary key, name varchar(100), sharding_id int not null );

MySQL [TESTDB]> MySQL [TESTDB]> insert  into  employee(id,name,sharding_id)values(1,”bob”,10000),(2,”lucy”,10010),(3,”alice”,10000),(4,”jerry”,10010);

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
mysql> select  @@hostname;
+————+
| @@hostname |
+————+
| c1         |
+————+
1 row in set (0.00 sec)

mysql> select  * from employee;
Empty set (0.00 sec)

mysql> select  * from employee;
+—-+——-+————-+
| id | name  | sharding_id |
+—-+——-+————-+
|  1 | bob   |       10000 |
|  3 | alice |       10000 |
+—-+——-+————-+
2 rows in set (0.00 sec)

mysql> 
++++++++++++++++++++++++++++++++++++++++++++++
mysql> select @@hostname;
+————+
| @@hostname |
+————+
| c2         |
+————+
1 row in set (0.00 sec)

mysql> select * from employee;
Empty set (0.00 sec)

mysql> select * from employee;
+—-+——-+————-+
| id | name  | sharding_id |
+—-+——-+————-+
|  2 | lucy  |       10010 |
|  4 | jerry |       10010 |
+—-+——-+————-+
2 rows in set (0.00 sec)

mysql> 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值