DataWorks添加数据源的典型问题包括连通性问题、参数问题和权限问题。
连通性问题
如果您使用的是RDS数据源,建议您首先为RDS添加白名单,详情请参见添加白名单。
如果您使用的是ECS上自建数据库,建议您首先为ECS添加安全组,详情请参见附录:ECS自建数据库的安全组配置。
连通性问题主要体现为测试连通性失败:
问题现象:添加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工作空间所处地域。使用阿里云MongoDB,需要确定网络类型是否为VPC。VPC环境下MongoDB不支持数据连通性测试(使用方案一可以避免该问题)。
VPC环境下阿里云MongoDB数据同步有以下两种方案:
方案一:通过公网进行数据同步
数据源配置时,数据源类型选择连接串模式。
VPC环境下,您的MongoDB需要开通公网访问。
在MongoDB上放行相关白名单IP,详情请参见添加白名单。
进行数据连通性测试。
方案二:配置自定义资源组,从内网进行数据同步
准备一台和MongoDB同区域、同网络的ECS作为调度资源,详情请参见新增和使用自定义数据集成资源组。
将这台ECS的IP加入MongoDB的白名单或者安全组。
数据源测试连通时直接确定保存(不支持测试连通性)。
修改资源组为自定义调度资源,测试运行。
说明请务必添加相应的白名单。
问题现象 :添加自建MongoDB数据源,测试数据源连通性失败。
解决方法:
数据源配置时,数据源类型选择连接串模式。
如果是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数据源开通公网访问能力。数据源配置时,选择连接串模式,通过公网连接。
问题现象:新增阿里云RDS数据源时,测试连通性不通。
解决方法:
当RDS数据源测试连通性不通时,需要到自己的RDS上添加数据同步机器IP白名单,详情请参见添加白名单。
说明如果使用自定义资源组调度RDS的数据同步任务,必须把自定义资源组的机器IP也加到RDS的白名单中 。
确保添加的信息正确:RDS实例ID和RDS实例主账号ID、用户名、密码数据库名必须确保正确。
问题现象:新增自建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默认数据源时,报测试连通性失败。
解决方法:数据源已改版,请手动创建MaxCompute数据源,详情请参见创建MaxCompute数据源。
问题现象:DataWorks的数据源支持HybridDB for PostgreSQL吗?
解决方法:支持,添加时选择关系型数据库PostgreSQL即可。
问题现象:没有外网地址的DRDS实例,配置数据源时,是否支持将实例的内网地址映射为自定义的域名?
解决方法:需要严格按照格式来,目前不支持域名映射的方式。
问题现象:添加RDS数据源时,为什么白名单已添加,依然报错提示
user not exist ip white list reference
。解决方法:出现这种情况通常是由于用户名输入错误,请检查输入的用户名是否正确。
权限问题
问题现象:添加AnalyticDB for MySQL数据源时,测试数据连通性报错如下。
连接数据库失败, 数据库连接串:${jdbcUrl}, 用户名:XXXXXX, 异常消息:You don't have privilege for connecting database 'dw', userId=RAM$XXX, schemaId=XX
解决方法:您需要检查在数据源中填写的子账号是否有AnalyticDB for MySQL的访问权限。
分析型数据库用户基于阿里云账号进行认证,用户建立的数据库属于该用户,且可以授权给其他用户访问其数据库下的表,所以连接的用户需要在AnalyticDB for MySQL上进行授权。
问题现象:子账号无权限查看数据源,无法创建数据源,提示您没有权限进行此操作。
解决方法:仅项目管理员权限的RAM子账号才可以增删改数据源。