因爲公司業務上的需求,須要實時監控mysql數據庫的數據的增加,並將數據同步到另外一個平臺,因此就問老大使用什麼工具比較好,老大推薦使用StreamSets,還說在測試環境都已經部署好了StreamSets,因此就開始寫了第一個測試。html
數據庫版本:5.6.35 MySQL Community Server (GPL)java
jdbc版本:5.1.6mysql
StreamSets版本:3.3.0sql
因爲我要監控mysql,因此這裏選擇的ORIGINS是JDBC Query Consumer,接下來按照官網上的步驟:數據庫
1.配置環境變量 安全
2.安裝jdbcide
具體參考這篇博客:工具
https://blog.csdn.net/u012551524/article/details/78492939測試
3.配置參數ui
配置用戶名,密碼:
配置驅動類:
4.點擊preview,報以下錯誤:
com.zaxxer.hikari.pool.PoolInitializationException: Exception during pool initialization: Could not create connection to database server. Attempted reconnect 3 times. Giving up.
網上看到的解決方法:
http://www.javashuo.com/article/p-mdcgjmgd-nr.html
就是把JDBC Connection String改成:jdbc:mysql://192.168.5.22/test?autoReconnect=true&testOnBorrow=true&validationQuery=select 1,可是對我這個沒有幫助,可是報的錯誤卻變了,以下:
Exception during pool initialization: Communications link failure Last packe
覺得是數據庫鏈接池的問題,因而修改mysql的配置文件my.cnf中添加以下參數:
wait_timeout=31536000
interactive_timeout=31536000
依然沒什麼卵用。。。
最後仔細檢查了下日誌,發現日誌中最後有一個錯誤:
Caused by: java.net.SocketException: java.security.AccessControlException: access denied ("java.net.SocketPermission" "192.168.5.22:3306" "connect,resolve")
靠,mmp,原來是java安全策略的問題,查看官網中TROUBLESHOOTING的JDBC Origins中:
因而在/opt/jdk1.8.0_161/jre/lib/security/java.policy(這個根據本身的jdk位置肯定路徑)中添加以下內容:
// user-defined external directory
grant codebase "file:///opt/cloudera/parcels/STREAMSETS_DATACOLLECTOR/sdc-extras/-" {
permission java.security.AllPermission;
};(註釋:上面的file路徑要根據本身sdc-extras存放的路徑肯定)
添加完這個以後鏈接數據庫的問題算是解決了,可是又報了下面的錯誤,mmmmmmmmmmmp
Message: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version
for the right syntax to use near 'OPTION SQL_SELECT_LIMIT=1' at line 1
這個是緣由是mysql 5.6中已經再也不支持OPTION SQL_SELECT_LIMIT=1這個參數, 而我又使用了低版本的jdbc驅動,因此就報了這個錯誤,重新去mvn庫中下載mysql-connector-java-5.1.46.jar,成功解決
最後,總結一下:
其實最開始的兩個錯誤都不是本質錯誤,那個java安全策略的錯誤纔是緣由,看來之後報錯仍是要看日誌啊,並且要看最後一個錯誤,英語也不太好,
可是,硬着頭皮看了下官方文檔,差不讀能看懂70%,還不錯,但願之後更加細心