1.0 Mycat实现MySQL的分库分表

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011418530/article/details/88224285

Mycat及MySQL实例部署情况:

Mycat(版本:5.6.29):

IP:192.168.227.6,Port:3310/3311

MySQL(版本:5.6.29) :注意MySQL版本最好5,6以上,刚开始yum安装默认版本5.1.73版本总报错

userHost1,IP:192.168.227.3,Port:3306

userHost2,IP:192.168.227.4,Port:3306

架构图:

数据字典为全局表,2个库表数据一样

用户表按UID%2来分库表

用户地址表按userID跟随用户表

1,首先安装mysql:

安装节点:(192.168.227.3,192.168.227.4)

yum安装MySQL,一定要注意安装的版本,要是版本太低推荐源码安装

mysql安装:

yum -y install mysql-server yum安装MySQL

service mysqld start 启动MySQL

chkconfig mysqld on 添加到开机启动项

mysql 进入mysql客户端

use mysql 切换库

delete from user; 删除默认权限表

重新创建权限用户

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;

flush privileges; 刷新权限

quit 退出

mysql -u root -p 登陆(带用户)

如果是centos7,直接安装MySQL会报错:

原因是:

CentOS7带有MariaDB而不是MySQL,MariaDB和MySQL一样也是开元的数据库

解决方案:

如果必须要安装MySQL,首先必须添加mysql社区repo通过输入命令:sudo rpm -Uvh http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm,最后使用像安装MySQL的常规方法一样安装mysql: yum install mysql mysql-server mysql-libs mysql-server

2,安装Mycat

去Mycat官网下载安装包:http://www.mycat.io/ 选择自己需要的版本

上传到192.168.227.6服务器上

tar -zxvf Mycat-server-1.6.6.1-release-20181031195535-linux.tar.gz #解压

3,配置Mycat

server.xml:

<!DOCTYPE mycat:server SYSTEM "server.dtd">

<mycat:server xmlns:mycat="http://io.mycat/">

    <system>

        <property name="useSqlStat">1</property>

        <property name="useGlobleTableCheck">0</property>

        <property name="defaultSqlParser">druidparser</property>

        <property name="sequnceHandlerType">2</property>

        <property name="processorBufferPoolType">0</property>

        <property name="serverPort">3310</property> <!-- mycat的使用端口 -->

        <property name="managerPort">3311</property> <!-- mycat的管理端口 -->

        <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">389m</property>

    </system>

    <user name="root"><!--登陆mycat用户名-->

        <property name="password">123456</property><!--登陆mycat密码-->

        <!--数据库名,这里会和schema.xml中的配置关联,多个用逗号分开,例如需要这个用户需要管理两个数据库db1,db2,则配置db1,dbs-->

        <property name="schemas">db_user</property>

        <property name="readOnly">false</property>

    </user>

</mycat:server>

schema.xml:

<?xml version="1.0"?>

<!DOCTYPE mycat:schema SYSTEM "schema.dtd">

<mycat:schema xmlns:mycat="http://io.mycat/">

    <!-- 数据库配置,与server.xml中的数据库对应 -->

    <schema name="db_user" checkSQLschema="false" sqlMaxLimit="100">

        <table name="data_dictionary" type="global" dataNode="db_user_dataNode1,db_user_dataNode2" primaryKey="dataDictionaryID"/>

        <table name="users" dataNode="db_user_dataNode$1-2" rule="mod-userID-long" primaryKey="userID"> <!-- 对2取模,详见rule.xml -->

            <childTable name="user_address" joinKey="userID" parentKey="userID" primaryKey="addressID"/>

        </table>

    </schema>

    <!-- 分片配置 -->

    <!-- db_user -->

    <dataNode name="db_user_dataNode1" dataHost="db_userHOST1" database="db_user" />

    <dataNode name="db_user_dataNode2" dataHost="db_userHOST2" database="db_user" /> <!-- 配置db_user的节点主机 -->

    <dataHost name="db_userHOST1" maxCon="1000" minCon="10" balance="0"

        writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">

        <heartbeat>select user()</heartbeat>

        <writeHost host="userHost1" url="192.168.227.3:3306" user="root" password="password">

        </writeHost>

    </dataHost>

    <dataHost name="db_userHOST2" 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="userHost2" url="192.168.227.4:3306" user="root" password="password">

        </writeHost>

    </dataHost>

</mycat:schema>

修改rule.xml中下列配置项:

<tableRule name="mod-userID-long">

    <rule>

        <columns>userID</columns> <!-- t1的分片列 -->

        <algorithm>mod-long</algorithm>

    </rule>

</tableRule>

<function name="mod-long" class="io.mycat.route.function.PartitionByMod">

    <!-- how many data nodes -->

    <property name="count">2</property> <!-- count值与分片个数相同 -->

</function>

保存 启动mycat ./mycat start


db_user建表语句:

DROP TABLE IF EXISTS `data_dictionary`;

CREATE TABLE `data_dictionary` (

`dataDictionaryID` int(11) NOT NULL COMMENT '数据字典ID',

`displayName` varchar(32) COLLATE utf8_bin DEFAULT NULL COMMENT '显示名称',

`value` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '数据字典取值',

`createTime` datetime DEFAULT NULL COMMENT '创建时间',

`lastUpdate` datetime DEFAULT NULL COMMENT '最后更新时间',

PRIMARY KEY (`dataDictionaryID`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

-- ----------------------------

-- Table structure for user_address

-- ----------------------------

DROP TABLE IF EXISTS `user_address`;

CREATE TABLE `user_address` (

`addressID` int(11) NOT NULL COMMENT '地址ID',

`receiver` varchar(16) COLLATE utf8_bin DEFAULT NULL COMMENT '收货人',

`addressDetail` varchar(32) COLLATE utf8_bin DEFAULT NULL COMMENT '地址详细',

`userID` int(11) NOT NULL COMMENT '用户ID',

`createTime` datetime DEFAULT NULL COMMENT '创建时间',

`lastUpdate` datetime DEFAULT NULL COMMENT '最后更新时间',

PRIMARY KEY (`addressID`,`userID`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

-- ----------------------------

-- Table structure for users

-- ----------------------------

DROP TABLE IF EXISTS `users`;

CREATE TABLE `users` (

`userID` int(11) NOT NULL COMMENT '用户ID',

`username` varchar(16) COLLATE utf8_bin DEFAULT NULL COMMENT '用户名',

`phoneNum` varchar(32) COLLATE utf8_bin DEFAULT NULL COMMENT '手机号码',

`age` int(11) DEFAULT NULL COMMENT '年龄',

`ddID` int(11) DEFAULT NULL COMMENT '所属会员类型',

`createTime` datetime DEFAULT NULL COMMENT '注册时间',

`lastUpdate` datetime DEFAULT NULL COMMENT '最后更新时间',

PRIMARY KEY (`userID`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

猜你喜欢

转载自blog.csdn.net/u011418530/article/details/88224285