- 连接mycat时,将原先连接mysql的端口和数据库改为mycat的端口8066,和mycat的逻辑数据库TESTDB,用户名和密码为server.xml表里设定的user。
- jdbc.url=jdbc:mysql://127.0.0.1:8066/TESTDB?characterEncoding=utf-8
- jdbc.driver=com.mysql.jdbc.Driver
- jdbc.username=user
- jdbc.password=user
本人遇到一件特郁闷的事,配置看着是好的就是报Access denied for user'root';解决了一下午,什么
mysql>GRANT FILE ON *.* TO 'backup'@'%' IDENTIFIED BY '123456';
mysql>GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* to 'backup'@'%' identified by '123456';
- 1
这些方法都用上了,还是不行。但是在本机cmd命令就可以;第二天终于看出了为什么。
请看图:
账号密码带了空格。。。。。无语死。mybatis居然没有trim。。。。。
另:
如果数据库为5.8,pom就要改为:最新的,而且driver:com.mysql.cj.jdbc.Driver;如果是旧版本就不需要。
确保新旧数据库与connect.jar的对应。不然会报CLIENT_PLUGIN_AUTH is required
- server.xml:设置连接的用户,例如连接mysql数据库时所需的用户名、密码和连接哪个数据库;通过该xml可以配置连接用户的权限。在实验中,测试了user用户,由于设置了只读,所以在插入数据时抛了异常。
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE mycat:server SYSTEM "server.dtd">
- <mycat:server xmlns:mycat="http://io.mycat/">
- <system>
- <property name="defaultSqlParser">druidparser</property>
- <property name="mutiNodeLimitType">1</property>
- <property name="serverPort">8066</property> #连接端口,替换连接mysql时的3306端口
- <property name="managerPort">9066</property>
- </system>
- <!-- 任意设置登陆 mycat 的用户名,密码,数据库 -->
- <user name="test">
- <property name="password">test</property>
- <property name="schemas">TESTDB</property> #该用户能够连接的逻辑数据库
- </user>
- <user name="user">
- <property name="password">user</property>
- <property name="schemas">TESTDB</property>
- <property name="readOnly">true</property>
- </user>
- <!--
- <quarantine>
- <whitehost>
- <host host="127.0.0.1" user="mycat"/>
- <host host="127.0.0.2" user="mycat"/>
- </whitehost>
- <blacklist check="false"></blacklist>
- </quarantine>
- -->
- </mycat:server>
- schema.xml:设置TESTDB逻辑数据库对应哪些表,哪些表在哪些节点,节点的地址,
- <?xml version="1.0"?>
- <!DOCTYPE mycat:schema SYSTEM "schema.dtd">
- <mycat:schema xmlns:mycat="http://io.mycat/">
- <!-- 设置表的存储方式.schema name="TESTDB" 与 server.xml中的 TESTDB 设置一致 -->
- <!-- 设置这个TESTDB逻辑数据库对应哪些表,item表的rule=role1是该表的分库规则,在rule.xml里设定了规则 -->
- <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
- <table name="users" primaryKey="id" dataNode="node_db01" />
- <table name="item" primaryKey="id" dataNode="node_db02,node_db03" rule="role1" />
- </schema>
- <!-- 设置dataNode 对应的数据库,及 mycat 连接的地址dataHost -->
- <dataNode name="node_db01" dataHost="dataHost01" database="db01" />
- <dataNode name="node_db02" dataHost="dataHost01" database="db02" />
- <dataNode name="node_db03" dataHost="dataHost01" database="db03" />
- <!-- mycat 逻辑主机dataHost对应的物理主机.其中也设置对应的mysql登陆信息 -->
- <dataHost name="dataHost01" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native">
- <heartbeat>select user()</heartbeat>
- <writeHost host="server1" url="127.0.0.1:3306" user="root" password="root"/>
- </dataHost>
- </mycat:schema>
- rule.xml:该路由表表明采用mod2的方式进行路由。通过下面可知是对item表的id键进行取模分表的,取模分到db02和db03,而users表直接路由到db01中。
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE mycat:rule SYSTEM "rule.dtd">
- <mycat:rule xmlns:mycat="http://io.mycat/">
- <tableRule name="role1"> #创建角色,用于给哪张表分配角色
- <rule>
- <columns>id</columns>#根据id进行分割
- <algorithm>mod-long</algorithm>
- </rule>
- </tableRule>
- #分库规则,上面设定了id作为分割条件,条件为 id % 2
- <function name="mod-long" class="io.mycat.route.function.PartitionByMod">
- <!-- how many data nodes -->
- <property name="count">2</property>
- </function>
- </mycat:rule>