docker 安裝 mysql

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

然後我加上了之後並不能解決我的問題,由於新手也不懂是為什麼報錯,按照網上的說法搞了個遍,還是解決不了,直接想放棄了;

參考文章:

//blog.csdn.net/john1337/article/details/96272398

//github.com/docker-library/mysql/issues/69#issuecomment-269537249

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

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

遠程訪問 mysql 時,提示:「plugin caching_sha2_password could not be loaded」

參考文章:

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