论sqoop1连接数据库的血坑


今天实施现场的同事反馈了一个问题, 说用sqoop1连接mysql时总是连不上, 帮忙研究了半天, 发现sqoop1的一个隐藏问题, 之前在google上也没找到相关方案,这里整理记录一下

sqoop1连接mysql测试脚本: 

sqoop list-databases --connect jdbc:mysql://IP:3306/database --username user --password pswd

 在之前项目的测试环境都是OK的, 但是客户现场运行时报错: 

17/08/17 19:54:24 ERROR manager.CatalogQueryManager: Failed to list databases
java.sql.SQLException: Access denied for user 'user'@'IP' (using password: YES)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:963)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3966)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3902)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:875)
	at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1712)

按着以往的思路, 先检查数据库的用户, 刷新数据库权限, 在客户端控制台运行 mysql -h ip -u user -p 可以登录, 一切似乎很顺利, 用sqoop 测试时, 依旧报以上错误, 一头黑线...

然后自己写了一个测试jdbc的工具jar, 丢在客户端运行,更换了sqoop下面驱动jar, 测试了下, 依旧可以读取mysql的数据, 然而sqoop依然不给面子...

然后开始google, 翻了N页, 基本都是用户权限的问题, 依然没有头绪, 一度怀疑是sqoop1安装的问题 ...

继续尝试, 换了数据库连接, sqoop连了一下, 居然成功了, 有点小激动. 接下来就很简单了, 既然不是sqoop的问题, 又不是mysql的问题, 就是自己的问题了, 同事提供的数据库连接密码中包含一个特殊符号'$', 果断换掉, 再用sqoop连接, 一切OK   


结论: sqoop1的命令行参数应该是对特殊符号做了处理, 通过sqoop操作数据库时尽量不要包括特殊符号, 至于详细的原因, 就只能扒一扒sqoop的源码了

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值