DataWorks添加数据源典型问题可分为连通性问题、参数问题、权限问题三类。
连通性问题
连通性问题主要体现为测试连通性失败。
- 问题现象:添加MySQL数据源时,网络类型选择为经典网络,点击测试连通性时失败报错:
测试连接失败,测试数据源联通性失败,连接数据库失败,数据库连接串…异常消息:Communications link failure. The last packet sent successfully to the server was 0 milliseconds ago.The dirver has not received any packets from the server.
解决方案:出现上述报错通常都是网络连通性问题导致。可检查您的网络是否可达,以及防火墙对这个IP/端口是否有相关限制,安全组是否已配置对IP/端口放通。
- 问题现象:添加阿里云MongoDB数据源,测试数据源连通性失败,报错:
error message: Timed out after 5000 ms while waiting for a server that matches ReadPreferenceServerSelector{readPreference=primary}. Client view of cluster state is {type=UNKNOWN, servers=[..] error with code: PROJECT_DATASOURCE_CONN_ERROR.
问题解法:处理此类问题时首先需要确定您的DataWorks项目处于哪个region。使用阿里云MongoDB,需要确定网络类型是否为VPC,VPC环境下MongoDB不支持数据连通性测试(使用方案一可规避此问题)。
VPC环境下阿里云MongoDB数据同步有两种方案:
- 方案一:通过公网进行数据同步
- 数据源配置时,数据源类型选择有公网IP。
- VPC环境下,您的MongoDB需要开通公网访问。
- 在MongoDB上放行相关白名单IP,参考添加白名单。
- 进行数据连通性测试。
- 方案二:配置自定义资源组,从内网进行数据同步
- 准备一台和MongoDB同区域、同网络的ECS作为调度资源,参见新增调度资源。
- 将这台ECS的IP加入MongoDB的白名单或者安全组。
- 数据源测试连通时直接确定保存(不支持测试连通性)。
- 修改资源组为自定义调度资源,测试运行。
说明 请务必添加相应的白名单。 - 方案一:通过公网进行数据同步
- 问题现象:添加自建MongoDB数据源,测试数据源连通性失败。
问题解法:
- 数据源配置时,数据源类型选择有公网IP。
- 如果是VPC环境下ECS上自建的MongoDB,需开通公网访问。
- 确保网络和端口之间是否能连通,检查 ECS 的防火墙以及安全组设置
- 确保自建的数据库涉及的安全访问限制,权限的限制和能否远程登录的情况。
- 确认访问地址
host:port
填写正确,数据库名和用户名填写正确。说明添加MongoDB数据源时,使用的用户名必须是用户需要同步的这张表所在的数据库创建的用户名,不能用root。
例如需要导入name表,name表在test库,则此处数据库名称填写为test。
用户名为指定数据库中创建的用户名,不要使用root。例如之前指定的是test库,则用户名需使用test数据库中创建的账户。
- 问题现象:VPC环境下添加Redis数据源,测试数据源连通性失败,报错如下。
问题解法:Redis添加数据源时如果没有公网IP,需要保证数据源和DataWorks项目区域一致,通过新增调度资源完成数据源的打通。
- 问题现象:添加MongoDB数据源,已经配置白名单,测试数据源连通性仍然失败,报错:
error message: Timed out after 5000 ms while waiting for a server that matches ReadPreferenceServerSelector{readPreference=primary}
。问题解法:VPC网络的MongoDB数据源和Dataworks的默认资源组在内网上是不通的,所以无法直接进行同步任务,需要通过公网或者自定义资源组的方式进行连通。
- 问题现象:Docker中安装的MySQL如何添加到数据源?
问题解法:Docker中安装的MySQL直接用服务器的公网IP组成的JDBC地址是无法连接的,连通性测试无法通过。您需要将MySQl的端口映射到宿主机上,使用映射出的端口链接。
- 问题现象:配置Redis数据源失败,测试数据源连通性失败报错:
error message: java.net.SocketTimeoutException: connect timed out.
问题解法:目前DataWorks不支持Redis通过内网添加数据源。建议您为Redis数据源开通公网访问能力。数据源配置时,选择“有公网 IP”,通过公网连接。
- 问题现象新增阿里云RDS数据源时,测试连通性不通。:
问题解法:
- 当 RDS 数据源测试连通性不通时,需要到自己的 RDS 上添加数据同步机器 IP 白名单,参考添加白名单。
说明 注意:若使用自定义资源组调度 RDS 的数据同步任务,必须把自定义资源组的机器 IP 也加到 RDS 的白名单中 。
- 确保添加的信息正确:RDS实例ID和RDS实例主帐号ID、用户名、密码数据库名必须确保正确。
- 当 RDS 数据源测试连通性不通时,需要到自己的 RDS 上添加数据同步机器 IP 白名单,参考添加白名单。
- 问题现象:新增自建ECS中的MySQL数据源时,数据源测试连通性不通。
问题解法:
- 确保网络和端口之间是否能连通,检查 ECS 的防火墙以及安全组设置。
- 确保自建的数据库涉及的安全访问限制,权限的限制和能否远程登录的情况。
- 确保添加的信息正确:用户名、密码、JDBC URL中的 IP 地址和端口必须确保正确。
- 在 VPC 的环境下购买的 ECS 只能用脚本模式运行任务,在添加数据源时测试连通性不能成功 。购买 ECS 后,您可以添加自定义资源,将同步任务下发到相应的资源组运行。
参数问题
- 问题现象:添加MySQL类型数据源时,点击测试连通性报错:
测试连接失败,测试数据源连通性失败,连接数据库失败…异常消息:No suitable direver found for...
。问题解法:出现上述情况可能是JDBC URL格式填写错误导致,JDBC URL在填写时,请不要在URL中添加空格或任何特殊字符。正确格式为:
jdbc:mysql://ServerIP:Port/Database
。 - 问题现象:使用用户名root添加MongoDB数据源时报错。
问题解法:添加MongoDB数据源时,使用的用户名必须是用户需要同步的这张表所在的数据库创建的用户名,不能用root。例如需要导入name表,name表在test库,则此处数据库名称填写为test。用户名为指定数据库中创建的用户名,不要使用root。例如之前指定的是test库,则用户名需使用test数据库中创建的账户。
- 问题现象:添加RDS数据源失败,数据库连接不上,报错如下。
问题解法:需要检查填写的UID是否为是子账号的UID,这里要填写RDS所属主账号的UID才可以成功添加数据源。
- 问题现象:加ODPS默认数据源时报测试连通性失败。
问题解法:ODPS默认数据源无需添加,默认为odps_fisrt。
- 问题现象:DataWorks的数据源支持HybridDB for PostgreSQL吗?
问题解法:支持,添加时选择关系型数据库PostgreSQL即可。
- 问题现象:没有外网地址的DRDS实例,配置数据源的时候,能否支持将实例的内网地址,映射为自定义的域名?
问题解法:需要严格按照格式来,目前不支持域名映射的方式。
- 问题现象:添加RDS数据源时为什么白名单已添加,依然报错提示
user not exist ip white list reference
。问题解法:出现这种情况通常是由于用户名输入错误。您可以参考创建账号和数据库检查自己输入的用户名是否正确。
权限问题
- 问题现象:添加ADS数据源时,测试数据连通性报错:
连接数据库失败, 数据库连接串:${jdbcUrl}, 用户名:XXXXXX, 异常消息:You don't have privilege for connecting database 'dw', userId=RAM$XXX, schemaId=XX
。问题解法:首先,您需要检查在数据源中填写的子账号是否有ADS的访问权限。分析型数据库用户基于阿里云帐号进行认证,用户建立的数据库属于该用户,用户也可以授权给其他用户访问其数据库下的表,所以连接的用户是需要在ADS上进行授权的,具体的说明参见用户账号类型与用户管理。
- 问题现象:子帐户无权限查看数据源,无法创建数据源,提示您没有权限进行此操作。
问题解法:只有项目管理员权限的RAM子账户才可以增删改数据源。