1. 程式人生 > 其它 >mysql-connector-java-8.0.22連線驅動中出現的問題

mysql-connector-java-8.0.22連線驅動中出現的問題

下載映象

docker pull mysql:5.7

建立例項

docker run -p 3307:3306 --name mysql \
            -v /usr/local/localVolumes/mysql/log:/var/log/mysql \
            -v /usr/local/localVolumes/mysql/data:/var/lib/mysql \
            -v /usr/local/localVolumes/mysql/conf:/etc/mysql \
            -e MYSQL_ROOT_PASSWORD=root \
            -d mysql:5.7

引數說明:

  • -p 3307:3306 將容器的3306埠對映到主機的3307埠
  • -v /usr/local/localVolumes/mysql/log:/var/log/mysql 將日誌資料夾掛載到主機
    -v /usr/local/localVolumes/mysql/data:/var/lib/mysql 將資料資料夾掛載到主機
    -v /usr/local/localVolumes/mysql/conf:/etc/mysql 將配置資料夾掛載到主機
  • -e MYSQL_ROOT_PASSWORD=root 初始化root使用者密碼
  • -d mysql:5.7 指定啟動容器的映象

目錄掛載以後,就可以在主機上直接檢視或者修改容器內部對應的檔案,方便快捷

修改MySQL配置檔案

可以直接修改主機上的檔案,會自動同步到容器中,因為我們剛才做了目錄掛載

vi /usr/local/localVolumes/mysql/conf/my.cnf
[client]
default-character-set=utf8

[mysqld]
init_connect = 'SET collation_connection = utf8_unicode_ci'
init_connect = 'SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve

注意:解決MySQL連線慢的問題

在配置檔案中加入如下,並重啟MySQL

[mysqld]
skip-name-resolve

解釋:

skip-name-resolve:跳過域名解析

至此,利用docker start mysql就可以啟動一個mysql容器了,然後測試連線。理論上應該可以正常訪問,可實際上並非如此。

我用datagrip 2020.2連線,驅動版本5.1.47,本機Mac上裝的Docker容器

報錯如下:

[08S01] Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
java.net.ConnectException: Connection refused (Connection refused).

問題排查

第一想到的是可能賬戶密碼不對,然後登入docker容器中直接訪問mysql,發現是可以訪問的,賬號和密碼是沒問題的。

然後就百度,百度了下,說是時間不對,果然,發現docker中的主機時間和mysql的時間差了8個小時,看來應該是時區設定的不對,應該設定成東8區,即GMT+8

image-20201223110922156

調整時區方法如下:

  1. 建立容器是新增-e TZ=Asia/Shanghai引數即可,如下
docker run -p 3307:3306 --name mysql \
            -v /usr/local/localVolumes/mysql/log:/var/log/mysql \
            -v /usr/local/localVolumes/mysql/data:/var/lib/mysql \
            -v /usr/local/localVolumes/mysql/conf:/etc/mysql \
            -e MYSQL_ROOT_PASSWORD=root \
            -e TZ=Asia/Shanghai \
            -d mysql:5.7
  1. 直接修改MySQL配置檔案即可,在[mysqld]下面新增如下配置即可

    default-time-zone='+08:00'
    

好,至此連線成功