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)行加密,而我的客戶端版本較低,并不支持。
解決方法:
- 直接升級MySQL WorkBench到8。
- 通過在運(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