docker 安裝 mysql

小葛師兄發表於2022-01-13

docker 環境安裝

本文演示的環境是騰訊雲的伺服器,Linux版本:centos7; 已經安裝了 docker 環境,版本:Docker version 20.10.12;

拉取映象

執行 docker 命令拉取 mysql 映象,預設拉取最新版本(mysql-8.0.27):

docker pull mysql

image-20220112232921559

執行容器

在執行容器前,我們需要設定一些對應的引數:

  • 啟動時對映對應埠到宿主機;
  • 啟動時需要設定登入密碼;
  • 啟動時需要把資料進行掛載到宿主機(包含配置檔案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                                           # 給容器起個名字

image-20220112233041250

執行成功後,我們可以進入容器進行登入:

docker exec -it mysql-test /bin/bash
# 在容器中登入 mysql
mysql -u root -p
# 輸入密碼 root 成功登入

image-20220113010434451

設定遠端訪問

mysql 容器啟動成功之後,我們在本地通過工具,進行遠端連線,我這裡使用 SQLyog;

image-20220113010623041

測試連線的時候,發現報錯了,如下圖:

image-20220113010556351

直接把報錯資訊貼到網上,大概意思是:在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';

修改完成後,再進行連線,就成功了:

image-20220113011302987

安裝時踩的坑

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 看到容器時已經退出的狀態

image-20220113004308783

docker logs -f mysql-test 檢視日誌發現啟動報錯了:

image-20220113003210945

我這裡主要的報錯資訊:

[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

https://www.cnblogs.com/fishsleep/p/13526402.html

後來想到在用 docker 安裝 jenkins 的時候,掛載 jenkins_home 的時候,是直接把宿主機的目前許可權全放開的,決定也試一試:chmod -R 777 mysql 然後在執行,果不其然,直接就啟動成功了;淚目啊!!!!!!

遠端訪問 mysql 時,提示:“plugin caching_sha2_password could not be loaded”

參考文章:

https://www.cnblogs.com/likeyou99315/p/14940273.html

相關文章