Date:2025/06/18
你好!
今天,分享一個工作中遇到的一個 MySQL 問題。在這之前都不知道是 MySQL 的問題,特離譜!
昨天和今天大多數時間都用來處理了這一個問題:《MySQL進行了數據庫初始化之后,Nacos無法連接》。
介紹說明
任務是通過 K8s 私有化部署一套服務,其中依賴 MySQL 和 Nacos 中間件服務。由于是私有化部署,需要對 MySQL 中的數據進行初始化操作,就是 MySQL 啟動后有我所有服務需要的數據。
MySQL 初始化的 Dockerfile 如下:
[root@host mysql-priavte-8.1.0]# cat Dockerfile
# 基礎鏡像:應該就是Docker Hub倉庫中的MySQL-8.1.0鏡像
FROM xxx.com/privatization/mysql-private:8.1.0
MAINTAINER zhencyw# 把sql文件拷貝到/docker-entrypoint-initdb.d/目錄下,以便啟動時自動執行這個sql
COPY ./sql/*.sql /docker-entrypoint-initdb.d# 拷貝mysql配置文件
COPY ./config/ /etc/mysql/# Mysql密碼
ENV MYSQL_ROOT_PASSWORD root# 數據持久化目錄
VOLUME [ "/var/lib/mysql" ]# 端口
EXPOSE 3306
問題現象
1)使用了初始化的 MySQL 數據庫之后(未進行初始化的 MySQL 未測試過),Nacos 無法連接。
從上圖中,可以看到 Nacos 在啟動時無法獲取的數據源,這里就是連不上 MySQL。所以我通過 Navicat 進行查看我的 MySQL 中數據庫和數據是否正常,結果也都是有的。這里奇怪的一點是,Navicat 能連接上我的 MySQL 為啥 Nacos 就連不上呢?(到現在也不知原因)
就因為這一點我對 MySQL 未有絲毫的懷疑是它的問題,誰知道結果壓根就是 MySQL 的問題。基于前者,導致我對 Naocs 進行各種測試驗證,Nacos 啟動時行時不行,也切換了3個 Naocs 版本與部署方式(helm、operator)進行測試,都報 Nacos 未進行設置數據源。測試無果。
2)內部項目的微服務進行連接這個初始化的 MySQL 也是連接不上。。這里就能看出是 MySQL 的問題了,不過我是在偶然間發現是 MySQL 問題時才去進行這個測試的。。
MySQL 進行遠程連接后這個數據庫身份驗證方式還是caching_sha2_password
這個。但是服務未報錯,服務登錄成功了。
處理方法
1)通過 Navicat 連接工具,進行重新創建導入 nacos 庫和數據,重啟 Nacos 后能啟動。但由于不滿足我腳本一鍵啟動的條件,所以還得找找其他原因。
2)最終處理方法:MySQL 首次啟動后需要進行遠程連接一次 MySQL,否則 Naocs 與微服務連不上 MySQL,原因不知。。。不知道是不是MySQL配置問題了。
最后:處理方法很簡單,發現這個問題真不容易。。。
關注我的gzh,獲取更多運維經驗!!