MyCAT上新增一个库及MyCAT报错1184的问题及解决
作者:世樹
背景介绍
前两天因业务需要,需在现有的一套MyCAT下新增一个业务系统节点,已知当前MyCAT上有库aaa,bbb,ccc,现要新增库iris,以便在mycat-admin上进行跨库查询业务。
步骤一
第一步,准备一台服务器,安装好新业务需要的数据库服务,新建一个db。
建好后,登录到db里,如下:
我的新业务所在服务器ip是 1.1.1.56, db是 iris :
第二步,在mycat服务器上conf目录上,修改配置文件内容,修改对象如下:
要把这个服务器加入到Mycat节点中,需要修改的地方有四个:
①schema.xml文件中,新增<schema>…</schema>内容
<schema name="iris" checkSQLschema="false" sqlMaxLimit="5000">
这里的”iris“,是自定义的逻辑库的名字,也就是在mycat上查询的时候,显示出来的库名,可以跟数据库节点里”create database iris“这里的db名不一样,create的db也就是图二的dataNode的库名。
②schema.xml文件中,新增<dataNode … />内容
<!-- iris_dataNode --> <dataNode name="iris_dn1" dataHost="iris_Host" database="iris" />
name是自定义的名称,datahost也自定义,只要下面的内容中保持一致就可以。
database=“iris",指的就是”create database iris“这里的db,保持一致即可,有的情况是分库表、有多个节点,每个节点上的db可能名字分别是iris_db1、iris_db2……iris_dbn,那么这里就分别是database=iris_db1、iris_db2。
③schema.xml文件中,新增<dataHost>……</dataHost>内容
<!-- iris_dataHost --> <dataHost name="iris_Host" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native"> <heartbeat>select user()</heartbeat> <writeHost host="iris-m1" url=“1.1.1.56:3307" user="mycat" password="123456"> </writeHost> </dataHost>
上面dataHost name="iris_Host"的iris_host对应步骤②中datahost的名称;
writeHost host="iris-m1”,自定义的主机名。
在节点db iris中授权mycat可以访问节点服务器的时候,新建用户mcyat,密码为12345 。
④修改文件server.xml,如下:
逻辑库aaa,bbb,ccc是原来mycat中已存在的库,iris为新增,直接添加在其后即可。
同时增加了如下内容:
表示额外新增两个mycat用户,用于从mycat服务器访问iris库时权限分配,一个只读用户(readOnly),一个是可读写。
不添加这段,也可以用上面mycatadmin和之前授权的mycat用户访问数据库iris。
步骤二
重启mycat服务,或者relaod MyCAT配置文件
这四个地方确保正确修改后,就可以在管理端口下 reload mycat的配置文件,或者重启服务。
重新登录mycat,就可以看到新增的库了。
问题
MyCAT重启后,可以正常看到库iris与aaa,bbb等库一起,但是无法访问,报错1184.
mycat重启后,正常看到新增的库iris了,但是需要进行查询时,发现报错如下:” 1184- “
原因主要有
- ①用户名/密码不对
- ②授权不对
- ③实际的库名和datanode不匹配
解决办法
- 问题一:
- 可尝试重新在节点db进行授权,确保密码正确,再试一次连接访问:
- 问题二:
- show grants查看实际授权情况,或者直接重新授权 all privileges确认访问状态;
- 问题三:
- 再一次详细检查各个修改的配置内容,
如、这里的database,是否与 在1.1.1.56服务器上数据库上创建的db名一样。
下图这里的database名称,是节点服务器上数据库里面实际的数据库名称:
其次,检查用户标签中的库名
下图中的库名是 mycat上逻辑库的名称,不是实际 create 的db的名字。
也就是下图中的schema
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。