作者:海螺里的秘密_471 | 来源:互联网 | 2023-05-19 15:55
今天实施现场的同事反馈了一个问题,说用sqoop1连接mysql时总是连不上,帮忙研究了半天,发现sqoop1的一个隐藏问题,之前在google上也没找到相关方案,这里整理记录一下sqo
今天实施现场的同事反馈了一个问题, 说用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的源码了