[Flink] Flink(CDC/SQL)Job在启动时,报“ConnectException: Error reading MySQL variables: Access denied for user 'xxxx '@'xxxx' (using password: YES)”(1个空格引发的"乌龙")
1 問題描述
1.1 基本信息
所屬環境:CN-PT
問題時間:2023-11-21
所屬程序: Flink Job(XXXPT_dimDeviceLogEventRi)
- 作業類型: Flink SQL Job
- 數據流 : 業務MySQL ==> Flink Job( Flink Cdc Connector(mysql) + Flink SQL) ==> Bigdata Kafka ==> Bigdata OLAP ==> 業務系統
- 作業備注: 關鍵技術---- 利用 Flink Cdc Connector(mysql) 監聽業務庫表進行實時數據同步業務維度數據至kafka
1.2 問題日志
Flink Job(XXXPT_dimDeviceLogEventRi) 運行過程中,出現錯誤:
…
2023-11-21 15:25:28,263 INFO org.apache.flink.streaming.connectors.kafka.FlinkKafkaProducer [] - Starting FlinkKafkaInternalProducer (1/1) to produce into default topic dim_device_log_event_ri
2023-11-21 15:25:28,266 INFO org.apache.flink.runtime.io.network.partition.consumer.SingleInputGate [] - Converting recovered input channels (1 channels)
2023-11-21 15:25:28,325 INFO io.debezium.connector.common.BaseSourceTask [] - Stopping down connector
2023-11-21 15:25:28,325 INFO io.debezium.connector.mysql.MySqlConnectorTask [] - Stopping MySQL connector task
2023-11-21 15:25:28,326 ERROR com.alibaba.ververica.cdc.debezium.DebeziumSourceFunction [] - Reporting error:
org.apache.kafka.connect.errors.ConnectException: Error reading MySQL variables: Access denied for user 'root '@'123.45.67.89' (using password: YES)
at io.debezium.connector.mysql.MySqlJdbcContext.querySystemVariables(MySqlJdbcContext.java:342) ~[blob_p-b4fb1883b8b45408debf574a19853181362f64e4-1be92b6c42d0969e1e10ed136b1c5fc9:?]
at io.debezium.connector.mysql.MySqlJdbcContext.readMySqlSystemVariables(MySqlJdbcContext.java:321) ~[blob_p-b4fb1883b8b45408debf574a19853181362f64e4-1be92b6c42d0969e1e10ed136b1c5fc9:?]
at io.debezium.connector.mysql.MySqlTaskContext.<init>(MySqlTaskContext.java:79) ~[blob_p-b4fb1883b8b45408debf574a19853181362f64e4-1be92b6c42d0969e1e10ed136b1c5fc9:?]
at io.debezium.connector.mysql.MySqlTaskContext.<init>(MySqlTaskContext.java:52) ~[blob_p-b4fb1883b8b45408debf574a19853181362f64e4-1be92b6c42d0969e1e10ed136b1c5fc9:?]
at io.debezium.connector.mysql.MySqlConnectorTask.createAndStartTaskContext(MySqlConnectorTask.java:350) ~[blob_p-b4fb1883b8b45408debf574a19853181362f64e4-1be92b6c42d0969e1e10ed136b1c5fc9:?]
at io.debezium.connector.mysql.MySqlConnectorTask.start(MySqlConnectorTask.java:143) ~[blob_p-b4fb1883b8b45408debf574a19853181362f64e4-1be92b6c42d0969e1e10ed136b1c5fc9:?]
at io.debezium.connector.common.BaseSourceTask.start(BaseSourceTask.java:106) ~[blob_p-b4fb1883b8b45408debf574a19853181362f64e4-1be92b6c42d0969e1e10ed136b1c5fc9:?]
at io.debezium.embedded.EmbeddedEngine.run(EmbeddedEngine.java:758) [blob_p-b4fb1883b8b45408debf574a19853181362f64e4-1be92b6c42d0969e1e10ed136b1c5fc9:?]
at io.debezium.embedded.ConvertingEngineBuilder$2.run(ConvertingEngineBuilder.java:171) [blob_p-b4fb1883b8b45408debf574a19853181362f64e4-1be92b6c42d0969e1e10ed136b1c5fc9:?]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_362]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_362]
at java.lang.Thread.run(Thread.java:750) [?:1.8.0_362]
Caused by: java.sql.SQLException: Access denied for user 'root '@'123.45.67.89' (using password: YES)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129) ~[blob_p-
...
2 問題分析
2.1 Flink SQL Job
這是1個 Flink SQL Job:
其僅使用了8(5+3)個外部變量(放在NACOS配置文件中的):
經檢查,無誤。
那么,咱們來看看啟動參數是否有錯誤:
2.2 作業啟動參數
啟動參數(nacos地址等)均無誤。
再看看NACOS的配置:
果然有問題!
2.3 再細究日志
再仔細看看日志:赫然發現了這個空格!
2.X 問題結論
- 本次問題出在 MYSQL數據庫用戶名中含【空格】;
- 針對Flink CDC錯誤"ConnectException: Error reading MySQL variables: Access denied for user 'root '@'123.45.67.89' (using password: YES)"共有如下情況,做以小結:
| 結論1 |
數據庫鏈接(HOST/PORT/USER/PASSWORD)【配置錯誤】,包括可能意想不到的【空格】;
| 結論2 |
當出現 Access denied for user 'xx'@'xxxx' (using password: YES),只且僅有2類原因:
1)數據庫【用戶不存在】、或【密碼錯誤】;
注:用戶不存在,自然也包括了上面說的配置錯誤(比如空格)的情況;
2)【無操作權限】;
注1:通過 show grants for {user}@'{host}' 查看用戶的權限授予情況;
注2:在使用 grant 授權用戶后,應使用 flush privileges 刷新權限;否則,有最新權限尚未生效的小概率事件發生。
3 解決方法
- 本問題:去除 root 用戶后面的空格符!
- 本錯誤的全部情況,參見:2.X 章節 問題結論
X 推薦與參考文獻
[1] Custom Payload in Debezium - copyprogramming.com 【推薦】
[2] Multiple debezium connector for same MySql database not working - stackoom
[3] 大數據-業務數據采集-FlinkCDC DebeziumSourceFunction via the 'serverTimezone' configuration property - 51CTO
[4] 報錯:Access denied for user 'xxx'@'localhost' - segementfault
[5] [數據庫] MYSQL之授予/查驗binlog權限 - 博客園/千千寰宇 【推薦】
[6] 一文看盡MySQL用戶權限管理,真香 - Zhihu 【推薦】
總結
以上是生活随笔為你收集整理的[Flink] Flink(CDC/SQL)Job在启动时,报“ConnectException: Error reading MySQL variables: Access denied for user 'xxxx '@'xxxx' (using password: YES)”(1个空格引发的"乌龙")的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 字节跳动获美私募股权基金500亿美元估值
- 下一篇: mysql8下载安装及配置