docker 安裝 mysql
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
然後我加上了之後並不能解決我的問題,由於新手也不懂是為什麼報錯,按照網上的說法搞了個遍,還是解決不了,直接想放棄了;
參考文章:
//blog.csdn.net/john1337/article/details/96272398
//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」
參考文章: