mycat安装:
mycat运行需要jdk的支持,首先下载安装jdk,采用rpm文件安装方式,注意匹配linux系统位数
上jdk官网下载jdk的rpm文件:
下载好上传到linux系统中,进行安装:
rpm -ivh jdk
采用rpm方式安装会把java的环境自动配置好
上mycat官网下载mycat:
下载好直接解压,然后移动到/usr/local下:
可以看到可执行文件夹bin和配置文件夹conf
进入bin:
可看到启动脚本mycat,我们直接启动:./mycat console
启动会报错:java.net.MalformedURLException: Local host name unknown: java.net.UnknownHostException
解决办法为:
在/etc/hosts 添加 主机名字映射到IP地址,编辑文件hosts添加一行:
192.168.199.166 mycat1
前面为本机ip,后为主机name
编辑完再次启动mycat:
启动成功
我们用mysql客户端或者mysql服务连接,ip为mycat主机ip,用户名root,密码123456,端口8066:
连接成功之后可看到唯一的数据库TESTDB,再看表:
上述登陆账号、数据库和表都是虚拟出来的,存在于mycat配置文件当中,并不是真正存在。
mycat连接真实mysql服务
编辑配置文件 /usr/local/mycat/conf/schema.xml
修改<writeHost host="hostM1" 节点:
<writeHost host="hostM1" url="192.168.11.10:3306” user="repl" password="repl" >
<readHost host="hostS2" url="192.168.11.10:3306" user="repl" password="repl" />
</writeHost>
配置好一个写节点和一个读节点
可以看到所依赖的三个数据库,分别是db1、db2、db3,我们需要在目标mysql上创建这三个库
然后我们再重启mycat服务
即可连上目标mysql
连接上就可以通过mycat创建表,插入数据,都将体现到目标数据库中,依据schema.xml来选择数据库和表,我们连接mycat创建表employee,插入数据:
再看目标数据库中数据:
发现只有db1的employee表中有数据,原因?
我们看 schema.xml中有:
datanode='dn1,dn2' rule="sharding-by-intfile"
sharding-by-intfile是一种mycat一种分片规则,具体存放在rule.xml配置文件中:
hash-int是什么?
PartitionByFileMap为mycat源码中的java类,注入了属性mapFile,值为partition-hash-int.txt,上述分片规则就是在这个txt文件中:
表示sharding_id值为10000时存放在第一个库,10010时存放在第二个库,规则可按实际业务需求手动配置。