docker 環境安裝
本文演示的環境是騰訊雲的伺服器,Linux版本:centos7; 已經安裝了 docker 環境,版本:Docker version 20.10.12;
拉取映象
執行 docker 命令拉取 mysql 映象,預設拉取最新版本(mysql-8.0.27):
docker pull mysql
執行容器
在執行容器前,我們需要設定一些對應的引數:
- 啟動時對映對應埠到宿主機;
- 啟動時需要設定登入密碼;
- 啟動時需要把資料進行掛載到宿主機(包含配置檔案conf 和資料檔案);
docker run -d -p 3306:3306 -v /opt/software/mysql/conf:/etc/mysql/conf.d -v /opt/software/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD='root' --name=mysql-test mysql
-d 後臺啟動
-p 埠對映
-v 資料卷掛載
-v /opt/software/mysql/conf:/etc/mysql/conf.d # 掛載 mysql 配置檔案
-v/opt/software/mysql/data:/var/lib/mysql # 掛載 mysql 資料檔案
-e MYSQL_ROOT_PASSWORD='root' # 設定 mysql 的登入密碼,不設定啟動容器失敗
--name # 給容器起個名字
執行成功後,我們可以進入容器進行登入:
docker exec -it mysql-test /bin/bash
# 在容器中登入 mysql
mysql -u root -p
# 輸入密碼 root 成功登入
設定遠端訪問
mysql 容器啟動成功之後,我們在本地通過工具,進行遠端連線,我這裡使用 SQLyog;
測試連線的時候,發現報錯了,如下圖:
直接把報錯資訊貼到網上,大概意思是:在MySQL 8.0中,caching_sha2_password是預設的身份驗證外掛,而不是mysql_native_password,有以下解決方案:
- 升級 SQLyog
- SQLyog-13.1.6-0.x64是預設支援 mysql8.0 以上身份驗證,把低版本的sqlyog升級到13.1.6就可以解決。
- 修改 mysql 的認證方式
選用第二種,直接在容器中登入 mysql 然後執行以下命令:
# 修改加密規則(非必須)
ALTER USER 'root'@'%' IDENTIFIED BY 'root' PASSWORD EXPIRE NEVER;
# 更新使用者的密碼
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
# 重新整理許可權
FLUSH PRIVILEGES;
# 重置密碼(==非必須==)
ALTER USER 'root'@'%' IDENTIFIED BY 'root';
修改完成後,再進行連線,就成功了:
安裝時踩的坑
mysql 容器掛載 /var/lib/mysql
之後,啟動失敗了
執行容器命令:
docker run -d -p 3306:3306 -v /opt/software/mysql/conf:/etc/mysql/conf.d -v /opt/software/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD='root' --name=mysql-test mysql
我掛載了 -v /opt/software/mysql/data:/var/lib/mysql
表面看著成功了,實際上 mysql 啟動失敗了
docker ps -a
看到容器時已經退出的狀態
docker logs -f mysql-test
檢視日誌發現啟動報錯了:
我這裡主要的報錯資訊:
[ERROR] --initialize specified but the data directory has files in it. Aborting.
[ERROR] [MY-013236] [Server] The designated data directory /var/lib/mysql/ is unusable. You can remove all files that the server added to it.
網上找了很久的資料,大多數都說是許可權之類的問題,直接在啟動的時候加多一個引數: --privileged=true
然後我加上了之後並不能解決我的問題,由於新手也不懂是為什麼報錯,按照網上的說法搞了個遍,還是解決不了,直接想放棄了;
參考文章:
https://blog.csdn.net/john1337/article/details/96272398
https://github.com/docker-library/mysql/issues/69#issuecomment-269537249
後來想到在用 docker 安裝 jenkins 的時候,掛載 jenkins_home 的時候,是直接把宿主機的目前許可權全放開的,決定也試一試:chmod -R 777 mysql
然後在執行,果不其然,直接就啟動成功了;淚目啊!!!!!!
遠端訪問 mysql 時,提示:“plugin caching_sha2_password could not be loaded”
參考文章: