假设有192.168.0.190和192.168.0.191两台服务器

mycat部署在191

190服务器mysql中有shop_db库

image.png

191服务器mysql中有user_db库

image.png

可以看到两个库中都有user表,我们假设user为全局表


1、为mycat配置权限用户,分别在两个mysql服务器上执行

create user mycat@'%' identified by '123456';
grant all on *.* to mycat@'%';


2、配置server.xml

<user name="root" defaultAccount="true">
    <property name="usingDecrypt">1</property>
    <property name="password">CcpBZb0rdy7uISSTqMsJeNfhSB8qrBF/WrE//mLF8dYuMLA5GaMbKdeHaA0TKEPQ+wHwzQ2xH/wmDEzbsfw48g==</property>

    <!--<property name="password">woaini8619</property>-->
    <property name="schemas">mydb</property>
</user>

以上配置mycat登录账户,以及逻辑库(虚拟)名称


password一行,可以使用明文,也可以使用加密的字符,如果要隐藏明文,则

cd /usr/local/Mycat/lib
java -cp Mycat-server-1.6.5-release.jar io.mycat.util.DecryptUtil 0:root:123456

使用加密字符还必须配置usingDecrypt为true


3、配置schema.xml

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">

        <schema name="mydb" checkSQLschema="false" sqlMaxLimit="1000">
                <table name="user" primaryKey="user_id" dataNode="udb,pdb" type="global" />
                <table name="user_detail" primaryKey="detail_id" dataNode="udb" />
                <table name="product" primaryKey="product_id" dataNode="pdb" />
        </schema>

        <dataNode name="udb" dataHost="mysqldb01" database="user_db" />
        <dataNode name="pdb" dataHost="mysqldb02" database="shop_db" />

        <dataHost name="mysqldb01" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1">
                <heartbeat>select user()</heartbeat>
                <writeHost host="192.168.0.191" url="192.168.0.191:3306" user="mycat" password="123456" />
        </dataHost>

        <dataHost name="mysqldb02" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1">
                <heartbeat>select user()</heartbeat>
                <writeHost host="192.168.0.190" url="192.168.0.190:3306" user="mycat" password="123456" />
        </dataHost>
</mycat:schema>

注意这里的user全局表配置,必须指定type="global"属性


最后进入 mycat/bin目录

./mycat start

测试

mysql -uroot -p -P8066 -h127.0.0.1

image.png

可以看到通过连接mycat两台服务器上的分表合并到这个虚拟数据库上来了