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)庫中可以看到 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 的目錄掛載的新語法》
–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 語句的語法發(fā)生了一些變化,尤其是涉及到用戶創(chuàng)建和權(quán)限賦予的部分。特別地,MySQL 8.0+ 版本不允許在 GRANT 語句中直接使用 IDENTIFIED BY 來設(shè)置密碼,密碼設(shè)置應(yīng)該通過 CREATE USER 或 ALTER USER 語句進(jìn)行。
這個(gè)錯(cuò)誤是因?yàn)樵?MySQL 9.0.1 中,我們?cè)噲D在 GRANT 語句中使用 IDENTIFIED BY,而 MySQL 9.0.1 的語法不允許這樣做。
正確的做法:
# 1. 首先使用 CREATE USER 語句創(chuàng)建一個(gè)新用戶,并設(shè)置密碼: CREATE USER 'username'@'%' IDENTIFIED BY 'password'; # 2. 然后使用 GRANT 語句為該用戶授予權(quán)限: GRANT ALL PRIVILEGES ON mysql.* TO 'username'@'%'; # 3. 最后,執(zhí)行 FLUSH PRIVILEGES 使權(quán)限立即生效: FLUSH PRIVILEGES;
我們這里以 root 用戶舉例,在 mysql 庫 下的 user 表可以查看到已有用戶。
所以直接執(zhí)行下面語句就行:
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)文章
查看docker是否處于啟動(dòng)狀態(tài)的方法詳解
Docker 是一個(gè)開源的應(yīng)用容器引擎,讓開發(fā)者可以打包他們的應(yīng)用以及依賴包到一個(gè)可移植的容器中,本文主要給大家介紹了查看docker是否處于啟動(dòng)狀態(tài)的方法,需要的朋友可以參考下2024-06-06解決docker安裝完成報(bào):bridge-nf-call-iptables is disabled問題
這篇文章主要介紹了解決docker安裝完成報(bào):bridge-nf-call-iptables is disabled問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-11-11Docker 跨主機(jī)容器間相互訪問的實(shí)現(xiàn)
本文主要介紹了Docker 跨主機(jī)容器間相互訪問的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01基于Docker的PHP調(diào)用基于Docker的Mysql數(shù)據(jù)庫
Docker 是一個(gè)開源的應(yīng)用容器引擎,自從接觸docker以來,一直想建立基于Docker的PHP調(diào)用基于Docker的Mysql數(shù)據(jù)庫,下面通過本文給大家介紹下,感興趣的朋友參考下2016-11-11Docker?下MySQL數(shù)據(jù)庫的備份和恢復(fù)的操作方法
這篇文章主要介紹了Docker?下MySQL數(shù)據(jù)庫的備份和恢復(fù)操作方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-02-02