docker部署mysql?9.0.1的實(shí)現(xiàn)
docker 如何部署 mysql 9 ,請(qǐng)看下面步驟:
1. 先看 mysql 官網(wǎng)

先點(diǎn)進(jìn)去 8 版本的 Reference Manual 。

選擇 9.0 版本的。

點(diǎn)到這里來看, 這里有一些基礎(chǔ)的安裝步驟,可以看一下。 - Basic Steps for MySQL Server Deployment with Docker。

有關(guān)使用 Docker 部署 MySQL Server 的更多主題,例如 服務(wù)器配置, 持久保存數(shù)據(jù)和配置, 服務(wù)器 錯(cuò)誤日志和容器環(huán)境變量,請(qǐng)參閱 第 2.5.6.2 節(jié) “有關(guān)使用 Docker 部署 MySQL 服務(wù)器的更多主題”。

docker run --name=mysql1 \ --mount type=bind,src=/path-on-host-machine/my.cnf,dst=/etc/my.cnf \ --mount type=bind,src=/path-on-host-machine/datadir,dst=/var/lib/mysql \ -d container-registry.oracle.com/mysql/community-server:tag
OK, 上面是官網(wǎng)的教程,接下來寫上我自己的實(shí)操。
1. 首先我們要做下載 mysql 9.0.1 的鏡像
docker pull mysql:9.0.1
2. 然后運(yùn)行創(chuàng)建 mysql 容器
docker run -d \ --name mysql9 \ -p 3306:3306 \ -e MYSQL_ROOT_PASSWORD=root \ mysql:9.0.1
查看 mysql 是否正常啟動(dòng):
docker ps
可以看到已經(jīng)正常啟動(dòng)了。

3. 但我們的目標(biāo)是要實(shí)現(xiàn)掛載mysql的 配置文件 到宿主機(jī)以便于修改 和 持久化 mysql 的數(shù)據(jù)。所以我們要先將 mysql 的 配置文件從容器中拷貝出來。
那么, mysql 9 的配置文件在哪呢?
我們從 dockerhub 倉(cāng)庫(kù)中可以看到 mysql 的配置文件在 /etc/mysql/my.cnf 。但是,你進(jìn)去 mysql 9 的容器中會(huì)發(fā)現(xiàn) 這個(gè)路徑找不到 my.cnf 文件。

其實(shí) mysql 官網(wǎng)已經(jīng)提到了, 在 /etc/my.cnf 。

OK,既然知道了配置文件的路徑,那就拷貝出來。
先在宿主機(jī)中創(chuàng)建下面文件夾用于存放 mysql 9 的配置文件 以及 將來要存儲(chǔ) mysql 的數(shù)據(jù)目錄。
mkdir -p /mydata/mysql/conf /mydata/mysql/data
從 mysql 9 容器中拷貝配置文件出來:
docker cp mysql9:/etc/my.cnf /mydata/mysql/conf
4. 刪除 mysql 9 容器
docker stop mysql9 docker rm mysql9
5. 重新創(chuàng)建 mysql9 容器,并實(shí)現(xiàn)目錄掛在。
docker run --name=mysql9 --mount type=bind,src=/mydata/mysql/conf/my.cnf,dst=/etc/my.cnf --mount type=bind,src=/mydata/mysql/data,dst=/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 -d mysql:9.0.1
你知道這兩種寫法有什么不同嗎?請(qǐng)參考這篇文章 - 《docker 的目錄掛載的新語(yǔ)法》
–mount type=bind,src=/path-on-host-machine/my.cnf,dst=/etc/my.cnf -v /path-on-host-machine/my.cnf:/etc/my.cnf
注意: -e MYSQL_ROOT_PASSWORD=root, 經(jīng)過我測(cè)試,這個(gè)密碼只能設(shè)置 root, 設(shè)置其他的登不進(jìn)去。如果不想設(shè)置為 root 密碼,那么需要?jiǎng)?chuàng)建新用戶,往下看,后面教程有教怎么創(chuàng)建新用戶。
使用root以外的密碼進(jìn)行登錄的時(shí)候會(huì)報(bào)如下錯(cuò)誤:
mysql: [Warning] Using a password on the command line interface can be insecure. ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
到此 docker 就成功安裝了 mysql 9 了。
那下一步我們要做什么呢? 遠(yuǎn)程連接 mysql 。 沒錯(cuò),所以繼續(xù)往下看。
6. 修改配置文件添加允許遠(yuǎn)程訪問配置
編輯 /mydata/mysql/conf/my.cnf
在配置文件中找到 [mysqld] 部分,添加下面屬性
bind-address = 0.0.0.0
這會(huì)允許 MySQL 接受來自任何 IP 地址的連接。
修改完成后,需要重啟 mysql 容器。
docker restart mysql9
7. 登錄到 mysql 中賦予新用戶遠(yuǎn)程訪問的權(quán)限
注意:下面這段是舊 mysql 的用法了。在 mysql 9 中不能使用這種用法了。
# 1. 如果已經(jīng)有現(xiàn)有用戶,修改權(quán)限: GRANT ALL PRIVILEGES ON database.* TO 'root'@'%' IDENTIFIED BY 'root'; FLUSH PRIVILEGES;
上面這種寫法在 mysql 9 中運(yùn)行會(huì)報(bào)如下錯(cuò)誤:
mysql> GRANT ALL PRIVILEGES ON mysql.* TO 'root'@'%' IDENTIFIED BY 'root'; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IDENTIFIED BY 'root'' at line 1
在 MySQL 8.0 和 9.0 版本中,GRANT 語(yǔ)句的語(yǔ)法發(fā)生了一些變化,尤其是涉及到用戶創(chuàng)建和權(quán)限賦予的部分。特別地,MySQL 8.0+ 版本不允許在 GRANT 語(yǔ)句中直接使用 IDENTIFIED BY 來設(shè)置密碼,密碼設(shè)置應(yīng)該通過 CREATE USER 或 ALTER USER 語(yǔ)句進(jìn)行。
這個(gè)錯(cuò)誤是因?yàn)樵?MySQL 9.0.1 中,我們?cè)噲D在 GRANT 語(yǔ)句中使用 IDENTIFIED BY,而 MySQL 9.0.1 的語(yǔ)法不允許這樣做。
正確的做法:
# 1. 首先使用 CREATE USER 語(yǔ)句創(chuàng)建一個(gè)新用戶,并設(shè)置密碼: CREATE USER 'username'@'%' IDENTIFIED BY 'password'; # 2. 然后使用 GRANT 語(yǔ)句為該用戶授予權(quán)限: GRANT ALL PRIVILEGES ON mysql.* TO 'username'@'%'; # 3. 最后,執(zhí)行 FLUSH PRIVILEGES 使權(quán)限立即生效: FLUSH PRIVILEGES;
我們這里以 root 用戶舉例,在 mysql 庫(kù) 下的 user 表可以查看到已有用戶。
所以直接執(zhí)行下面語(yǔ)句就行:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'; FLUSH PRIVILEGES;
然后再用 Navicate 去連接,已經(jīng)可以正常連接上了。

到此這篇關(guān)于docker部署mysql 9.0.1的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)docker部署mysql 9.0.1內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MinIO在 Docker中修改登錄賬號(hào)和密碼的步驟
本文介紹了如何在Docker容器中運(yùn)行的MinIO修改登錄賬號(hào)和密碼,包括備份數(shù)據(jù)、停止容器、刪除舊容器、啟動(dòng)新容器并設(shè)置新的賬號(hào)和密碼以及驗(yàn)證修改結(jié)果的步驟,感興趣的朋友一起2025-03-03
Docker+Jenkins實(shí)現(xiàn)一鍵自動(dòng)化部署項(xiàng)目的圖文教學(xué)
Jenkins是一個(gè)廣泛使用的開源持續(xù)集成工具,它能自動(dòng)化構(gòu)建,測(cè)試和部署軟件項(xiàng)目,本文主要介紹了關(guān)于docker搭建Jenkins實(shí)現(xiàn)一鍵自動(dòng)化部署項(xiàng)目,需要的朋友可以參考下2025-05-05
使用Docker部署Jenkins并實(shí)現(xiàn)自動(dòng)化部署的全流程
本文介紹了使用Docker部署Jenkins并實(shí)現(xiàn)自動(dòng)化部署的完整路徑,涵蓋Docker環(huán)境準(zhǔn)備與選擇、Jenkins容器部署與權(quán)限設(shè)置、DockerSocket與Docker-in-Docker兩種方案對(duì)比、Jenkins初始化與插件配置、憑證管理、Jenkinsfile自動(dòng)化部署流水線、多分支流水線配置等等內(nèi)容2026-05-05
詳解Docker 下開發(fā) hyperf 完整使用示例
這篇文章主要介紹了詳解Docker 下開發(fā) hyperf 完整使用示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01
用docker一鍵部署前后端分離項(xiàng)目的詳細(xì)流程
這篇文章主要介紹了如何用docker一鍵部署前后端分離項(xiàng)目的詳細(xì)流程,通過圖文結(jié)合的方式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-03-03
如何將Docker的構(gòu)建時(shí)間減少40%(推薦)
這篇文章主要介紹了如何將Docker的構(gòu)建時(shí)間減少40%,本文描述了我們?cè)趦?yōu)化CI管道后獲得的一些新見解,需要的朋友可以參考下2023-11-11

