Docker安裝mysql教程以及解決mysqld: Can‘t read dir of ‘/etc/mysql/conf.d/‘問題
如果還沒在虛擬機(jī)/服務(wù)器中安裝docker,可以查閱相關(guān)文檔 先安裝docker。
一、下載MySQL的docker鏡像
拉取鏡像的命令為 docker pull 鏡像名:tag
或 docker pull 鏡像名
,前者拉取指定版本的鏡像、后者拉取最新版本的鏡像。
此處拉取mysql 5.7
docker pull mysql:5.7
- 如果提示權(quán)限不足的話,需要使用管理員的方式執(zhí)行:
sudo docker pull mysql:5.7
。 - 可通過
docker images
查看拉取成功的鏡像。
二、啟動(dòng)MySQL容器
2.1 命令
docker run -p 3306:3306 --name mysql \ -v /mydata/mysql/log:/var/log/mysql \ -v /mydata/mysql/data:/var/lib/mysql \ -v /mydata/mysql/conf:/etc/mysql \ -e MYSQL_ROOT_PASSWORD=123456 \ -d mysql:5.7
參數(shù)說明:
- -p 3306:3306:將容器的3306端口映射到主機(jī)的3306端口。如果本地已安裝mysql或其他應(yīng)該占用了3306端口,可使用其他端口 -p port1:3306,保證port1端口未被占用即可
- -v /mydata/mysql/conf:/etc/mysql:將配置文件夾掛在到主機(jī)
- -v /mydata/mysql/log:/var/log/mysql:將日志文件夾掛載到主機(jī)
- -v /mydata/mysql/data:/var/lib/mysql/:將數(shù)據(jù)文件夾掛載到主機(jī)
- -e MYSQL_ROOT_PASSWORD=root:初始化root用戶的密碼
或者直接在/mydata/mysql/conf/目錄下新建my.cnf文件,執(zhí)行如下命令:
docker run -p 3306:3306 --name mysql \ -v /mydata/mysql/log:/var/log/mysql \ -v /mydata/mysql/data:/var/lib/mysql \ -v /mydata/mysql/conf/my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=123456 \ -d mysql:5.7
2.2 報(bào)錯(cuò)mysqld: Can’t read dir of ‘/etc/mysql/conf.d/’ (Errcode: 2 - No such file or directory)
補(bǔ)充:在啟動(dòng)mysq容器、即執(zhí)行docker run -p xxx
時(shí),docker ps
看不到創(chuàng)建的mysql容器,使用docker logs mysql
發(fā)現(xiàn)報(bào)錯(cuò)
mysqld: Can't read dir of '/etc/mysql/conf.d/' (Errcode: 2 - No such file or directory)
原因:這意味著 MySQL 在啟動(dòng)時(shí)無法找到 /etc/mysql/conf.d/ 目錄,mysql容器的/etc/mysql目錄掛載到宿主機(jī)的 /mydata/mysql/conf目錄,這通常是因?yàn)檫@個(gè)目錄在你掛載的配置卷 /mydata/mysql/conf 中不存在或沒有正確創(chuàng)建,導(dǎo)致容器創(chuàng)建失敗。
解決方法:
檢查本地配置目錄:檢查宿主機(jī)的 /mydata/mysql/conf 目錄中是否存在 conf.d
和 mysql.conf.d
子目錄,如果不存在,創(chuàng)建這個(gè)子目錄。
# 創(chuàng)建子目錄 mkdir -p /mydata/mysql/conf/conf.d mkdir -p /mydata/mysql/conf/mysql.conf.d
此時(shí),可以通過命令進(jìn)入conf 檢查是否已經(jīng)存在子目錄
cd /mydata/mysql/conf ls
刪除或重命名舊容器:
# 刪除它,以釋放容器名稱(推薦) docker rm mysql # 重命名舊容器 docker rename mysql old_mysql
重啟容器:
docker run -p 3306:3306 --name mysql \ -v /mydata/mysql/log:/var/log/mysql \ -v /mydata/mysql/data:/var/lib/mysql \ -v /mydata/mysql/conf:/etc/mysql \ -e MYSQL_ROOT_PASSWORD=123456 \ -d mysql:5.7
此時(shí),通過命令可以查看是否可以已經(jīng)啟動(dòng)MySQL容器
docker ps
也可通過Navicat等工具遠(yuǎn)程連接mysql。
至此,mysql已安裝成功,接下來我們來修改配置。
三、進(jìn)入mysql容器
docker exec -it mysql /bin/bash
使用MySQL命令打開客戶端:
mysql -uroot -p mysql -uroot -p密碼 --default-character-set=utf8
四、修改mysql默認(rèn)配置
4.1 查看mysql掛載的文件夾
由于在創(chuàng)建實(shí)例的時(shí)候,已經(jīng)將部分文件夾掛載到Linux宿主機(jī)目錄下,所以當(dāng)我們修改一些mysql的配置文件時(shí),不需要再進(jìn)入docker環(huán)境下,直接在Linux環(huán)境下操作即可。
掛載的目錄為:
cd /mydata/mysql
4.2 mysql配置
Linux 操作系統(tǒng)中 MySQL 的配置文件是 my.cnf,一般會(huì)放在 /etc/my.cnf 或 /etc/mysql/my.cnf 目錄下。
內(nèi)容一般為:
[client] default-character-set=utf8 [mysql] default-character-set=utf8 [mysqld] init_connect='SET collation_connection = utf8_unicode_ci' init_connect='SET NAMES utf8' character-set-server=utf8 collation-server=utf8_unicode_ci skip-character-set-client-handshake skip-name-resolve
1)宿主機(jī)進(jìn)入mysql的conf目錄,新建my.conf文件,寫入內(nèi)容:
cd /mydata/mysql/conf ls vi my.cnf # 在my.cnf中插入上述my.cnf內(nèi)容,保存退出 #重啟mysql docker ps docker restart mysql
2)進(jìn)入mysql容器內(nèi)部,查看文件是否配置成功
docker exec -it mysql /bin/bash cd /etc/mysql ls cat my.cnf
五、補(bǔ)充
1)設(shè)置mysql每次開機(jī)隨docker自啟動(dòng)
可以使用docker run
命令時(shí)加上--restart
選項(xiàng),或者在容器創(chuàng)建后更改其重啟策略
docker run -d --restart=always --name yourContainerName yourImage
這里的--restart=always
選項(xiàng)確保無論退出代碼是什么,只要Docker守護(hù)程序啟動(dòng),容器都會(huì)自動(dòng)重啟。
如果容器已經(jīng)運(yùn)行,您可以使用docker update
命令更改重啟策略
docker update mysql-container --restart=always
2)如果想 設(shè)置docker服務(wù)開機(jī)自啟動(dòng),可使用如下命令:
systemctl enable docker
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
ElasticSearch+Kibana通過Docker部署到Linux服務(wù)器中操作方法
本文介紹了Elasticsearch的基本概念,包括文檔和字段、索引和映射,還詳細(xì)描述了如何通過Docker在Linux服務(wù)器上安裝Elasticsearch、Kibana和IK分詞器,并驗(yàn)證安裝,感興趣的朋友一起看看吧2025-02-02在Idea中使用Docker部署SpringBoot項(xiàng)目的詳細(xì)步驟
這篇文章主要介紹了在Idea中使用Docker部署SpringBoot項(xiàng)目的詳細(xì)教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09Docker啟動(dòng)容器報(bào)錯(cuò):Ports are not available的解決方案
這篇文章主要介紹了Docker啟動(dòng)容器報(bào)錯(cuò):Ports are not available的解決方案,Docker 將容器程序的端口號(hào)映射到宿主機(jī)的端口號(hào),是一個(gè) NAT 過程,這個(gè)過程可能會(huì)因?yàn)榕c Windows NAT 服務(wù)沖突而失效,文中有詳細(xì)的解決方案,需要的朋友可以參考下2024-03-03關(guān)于docker部署的jenkins跑git上的程序的問題
這篇文章主要介紹了docker部署的jenkins跑git上的程序的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11Docker鏡像構(gòu)建原理解析(不裝docker也能構(gòu)建鏡像)
這篇文章主要介紹了Docker鏡像構(gòu)建原理解析(不裝docker也能構(gòu)建鏡像),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03Docker網(wǎng)絡(luò)之自定義網(wǎng)絡(luò)方式
文章介紹了Docker的網(wǎng)絡(luò)模式,包括bridge、none、container、host和用戶自定義網(wǎng)絡(luò),并詳細(xì)說明了docker0網(wǎng)絡(luò)的特點(diǎn)和自定義網(wǎng)絡(luò)的創(chuàng)建2025-01-01