安裝oracle jdk失敗
阿新 • • 發佈:2020-12-21
下載映象
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
調整時區方法如下:
- 建立容器是新增-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
直接修改MySQL配置檔案即可,在[mysqld]下面新增如下配置即可
default-time-zone='+08:00'
好,至此連線成功