docker部署mysql?9.0.1的實現(xiàn)
docker 如何部署 mysql 9 ,請看下面步驟:
1. 先看 mysql 官網(wǎng)
先點進去 8 版本的 Reference Manual 。
選擇 9.0 版本的。
點到這里來看, 這里有一些基礎的安裝步驟,可以看一下。 - Basic Steps for MySQL Server Deployment with Docker。
有關使用 Docker 部署 MySQL Server 的更多主題,例如 服務器配置, 持久保存數(shù)據(jù)和配置, 服務器 錯誤日志和容器環(huán)境變量,請參閱 第 2.5.6.2 節(jié) “有關使用 Docker 部署 MySQL 服務器的更多主題”。
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)的教程,接下來寫上我自己的實操。
1. 首先我們要做下載 mysql 9.0.1 的鏡像
docker pull mysql:9.0.1
2. 然后運行創(chuàng)建 mysql 容器
docker run -d \ --name mysql9 \ -p 3306:3306 \ -e MYSQL_ROOT_PASSWORD=root \ mysql:9.0.1
查看 mysql 是否正常啟動:
docker ps
可以看到已經(jīng)正常啟動了。
3. 但我們的目標是要實現(xiàn)掛載mysql的 配置文件 到宿主機以便于修改 和 持久化 mysql 的數(shù)據(jù)。所以我們要先將 mysql 的 配置文件從容器中拷貝出來。
那么, mysql 9 的配置文件在哪呢?
我們從 dockerhub 倉庫中可以看到 mysql 的配置文件在 /etc/mysql/my.cnf 。但是,你進去 mysql 9 的容器中會發(fā)現(xiàn) 這個路徑找不到 my.cnf 文件。
其實 mysql 官網(wǎng)已經(jīng)提到了, 在 /etc/my.cnf 。
OK,既然知道了配置文件的路徑,那就拷貝出來。
先在宿主機中創(chuàng)建下面文件夾用于存放 mysql 9 的配置文件 以及 將來要存儲 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 容器,并實現(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
你知道這兩種寫法有什么不同嗎?請參考這篇文章 - 《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)過我測試,這個密碼只能設置 root, 設置其他的登不進去。如果不想設置為 root 密碼,那么需要創(chuàng)建新用戶,往下看,后面教程有教怎么創(chuàng)建新用戶。
使用root以外的密碼進行登錄的時候會報如下錯誤:
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 了。
那下一步我們要做什么呢? 遠程連接 mysql 。 沒錯,所以繼續(xù)往下看。
6. 修改配置文件添加允許遠程訪問配置
編輯 /mydata/mysql/conf/my.cnf
在配置文件中找到 [mysqld] 部分,添加下面屬性
bind-address = 0.0.0.0
這會允許 MySQL 接受來自任何 IP 地址的連接。
修改完成后,需要重啟 mysql 容器。
docker restart mysql9
7. 登錄到 mysql 中賦予新用戶遠程訪問的權限
注意:下面這段是舊 mysql 的用法了。在 mysql 9 中不能使用這種用法了。
# 1. 如果已經(jīng)有現(xiàn)有用戶,修改權限: GRANT ALL PRIVILEGES ON database.* TO 'root'@'%' IDENTIFIED BY 'root'; FLUSH PRIVILEGES;
上面這種寫法在 mysql 9 中運行會報如下錯誤:
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)建和權限賦予的部分。特別地,MySQL 8.0+ 版本不允許在 GRANT 語句中直接使用 IDENTIFIED BY 來設置密碼,密碼設置應該通過 CREATE USER 或 ALTER USER 語句進行。
這個錯誤是因為在 MySQL 9.0.1 中,我們試圖在 GRANT 語句中使用 IDENTIFIED BY,而 MySQL 9.0.1 的語法不允許這樣做。
正確的做法:
# 1. 首先使用 CREATE USER 語句創(chuàng)建一個新用戶,并設置密碼: CREATE USER 'username'@'%' IDENTIFIED BY 'password'; # 2. 然后使用 GRANT 語句為該用戶授予權限: GRANT ALL PRIVILEGES ON mysql.* TO 'username'@'%'; # 3. 最后,執(zhí)行 FLUSH PRIVILEGES 使權限立即生效: FLUSH PRIVILEGES;
我們這里以 root 用戶舉例,在 mysql 庫 下的 user 表可以查看到已有用戶。
所以直接執(zhí)行下面語句就行:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'; FLUSH PRIVILEGES;
然后再用 Navicate 去連接,已經(jīng)可以正常連接上了。
到此這篇關于docker部署mysql 9.0.1的實現(xiàn)的文章就介紹到這了,更多相關docker部署mysql 9.0.1內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
解決docker安裝完成報:bridge-nf-call-iptables is disabled問題
這篇文章主要介紹了解決docker安裝完成報:bridge-nf-call-iptables is disabled問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11基于Docker的PHP調用基于Docker的Mysql數(shù)據(jù)庫
Docker 是一個開源的應用容器引擎,自從接觸docker以來,一直想建立基于Docker的PHP調用基于Docker的Mysql數(shù)據(jù)庫,下面通過本文給大家介紹下,感興趣的朋友參考下2016-11-11Docker?下MySQL數(shù)據(jù)庫的備份和恢復的操作方法
這篇文章主要介紹了Docker?下MySQL數(shù)據(jù)庫的備份和恢復操作方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-02-02