MySQL官方Docker鏡像安裝


title: 2018-7-1 MySQL官方Docker鏡像安裝
tags: MySQL,Docker


1. 創(chuàng)建mysql目錄,用于存放后面的相關(guān)文件。

mkdir -p ~/mysql/data ~/mysql/logs ~/mysql/conf

data目錄將映射為mysql容器配置的數(shù)據(jù)文件存放路徑

logs目錄將映射為mysql容器的日志目錄

conf目錄里的配置文件將映射為mysql容器的配置文件

2. 獲取MySQL鏡像

查找Docker Hub上的mysql鏡像,這里我拉取的是8.0.11

docker pull mysql:8.0.11

3. 使用MySQL鏡像

可以參照官方的說明來進(jìn)行啟動

docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag

這里的==some-mysql==是需要你給給容器起的名字,==my-secret-pw==是給MySQL的root用戶設(shè)置的密碼,==tag==就是你剛剛pull下的myslq的版本

直接參照官方啟動沒有辦法找到數(shù)據(jù)文件,所以最好還是不要使用官方這個命令直接啟動,可以使用如下方式啟動

docker run -p 3306:3306 --name mysql -v ~/mysql/conf:/etc/mysql/conf.d -v ~/mysql/logs:/logs -v ~/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -e TZ=Asia/Shanghai -d mysql:8.0.11

命令說明:

  • -p 3306:3306:將容器的 3306 端口映射到主機(jī)的 3306 端口
  • -v ~/mysql/conf:/etc/mysql/conf.d:將主機(jī)當(dāng)前目錄下的 conf/my.cnf 掛載到容器的 /etc/mysql/my.cnf
  • -v ~/mysql/logs:/logs:將主機(jī)當(dāng)前目錄下的 logs 目錄掛載到容器的 /logs
  • -v ~/mysql/data:/var/lib/mysql :將主機(jī)當(dāng)前目錄下的data目錄掛載到容器的 /var/lib/mysql
  • -e MYSQL_ROOT_PASSWORD=123456:初始化 root 用戶的密碼
  • -e TZ=Asia/Shanghai: 修改為中國時區(qū)

4. 連接MySQL數(shù)據(jù)庫

通過命令或者客戶端連接MySQL,我是使用的MySQL WorkBench 6.3客戶端進(jìn)行連接,這里遇到一個問題

ERROR 2059 (HY000): Authentication plugin 'caching_sha2_password' cannot be loaded

意思是認(rèn)證加密方式有問題,mysql8的認(rèn)證加密使用了==caching_sha2_password==方式對用戶密碼進(jìn)行加密,而我的客戶端版本較低,并不支持。
解決方法:

  1. 直接升級MySQL WorkBench到8。
  2. 通過在運(yùn)行的容器中執(zhí)行命令修改MySQL用戶密碼認(rèn)證方式
docker exec -it mysql bash
mysql > ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

上面的命令會將密碼加密方式有==caching_sha2_password==改為==mysql_native_password==,但新增的用戶還是會有問題,我們接下來需要修改~/mysql/conf下的my.cnf文件,如果沒有新增一個,并在my.cnf中添加如下配置

[mysqld]
default_authentication_plugin=mysql_native_password

再次連接數(shù)據(jù)庫,搞定。

5. MySQL容器自啟動

docker提供了重啟機(jī)制,詳細(xì)參考Docker容器自啟
restart policy在使用docker run啟動容器時通過--restart標(biāo)志指定,這個標(biāo)志有多個value可選,不同的value有不同的行為,如下表所列

Flag Description
no 不自動重啟容器 (默認(rèn)值)
on-failure 容器發(fā)生error而退出(容器退出狀態(tài)不為0)重啟容器
unless-stopped 在容器已經(jīng)stop掉或Docker stoped/restarted的時候才重啟容器
always 容器停止了就重新啟動
docker run --restart unless-stopped mysql

如果創(chuàng)建時未指定可以通過update命令設(shè)置,詳細(xì)參考Docker容器更新

docker container update --restart always mysql
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容