Docker?中?MySQL?的部署與管理技巧
一、Docker 中部署 MySQL
1.1 部署 MySQL
首先,從 Docker Hub 下載
docker pull mysql:5.7.36
然后,在 Docker 容器中運(yùn)行:
# Linux 系統(tǒng) docker run --name mysql \ -p 3306:3306 \ -e MYSQL_ROOT_HOST='%' \ -e MYSQL_ROOT_PASSWORD=root \ -d mysql:5.7.36 # Windows 系統(tǒng) (cmd里面運(yùn)行,Windows PowerShell里面運(yùn)行不了) docker run --name mysql ^ -p 3306:3306 ^ -e MYSQL_ROOT_HOST='%' ^ -e MYSQL_ROOT_PASSWORD=root ^ -d mysql:5.7.36
這個(gè)命令的作用是在后臺運(yùn)行一個(gè) MySQL 5.7.36 版本的容器, 相關(guān)參數(shù)含義解釋:
參數(shù) | 含義 |
---|---|
docker run | 運(yùn)行容器命令 |
--name mysql | 指定容器的名稱為 mysql |
-p 3306:3306 | 將宿主機(jī)的 3306 端口映射到容器內(nèi)的 3306 端口 |
-e MYSQL_ROOT_HOST='%' | 設(shè)置環(huán)境變量 MYSQL_ROOT_HOST 為 ‘%’,允許 root 用戶從任何主機(jī)連接到 MySQL 服務(wù)。 |
-e MYSQL_ROOT_PASSWORD=root | 設(shè)置環(huán)境變量 MYSQL_ROOT_PASSWORD 為 ‘root’,設(shè)置 root 用戶的密碼為 ‘root’ |
-d | 在后臺運(yùn)行容器 |
mysql:5.7.36 | 指定要使用的 Docker 鏡像,即 MySQL 5.7.36 版本的鏡像 |
如果使用了
-e MYSQL_ROOT_HOST='%'
, 我們后續(xù)還需要按照 2.1 節(jié)中的教程修改 mysql數(shù)據(jù)庫里面的 user 表。否則,我們用 Navicat 連接數(shù)據(jù)庫會報(bào)錯(cuò) :1130 - Host ‘172.17.0.1‘ is not allowed to connect to this MySQL server當(dāng)我們只在本地上面跑時(shí),沒必要設(shè)置 MYSQL_ROOT_HOST
1.2 進(jìn)入容器并創(chuàng)建數(shù)據(jù)庫
(1) 進(jìn)入容器
在 mysql
容器里面進(jìn)行數(shù)據(jù)庫創(chuàng)建或者導(dǎo)入數(shù)據(jù)文件前,我們必須進(jìn)入容器:
docker exec -it mysql /bin/bash
這個(gè)命令的含義是在名為 mysql
的容器中打開一個(gè)交互式的 bash 終端,相關(guān)參數(shù)解析為:
docker exec
: 這個(gè)命令允許你在運(yùn)行的容器中執(zhí)行命令。-it
: 這兩個(gè)參數(shù)結(jié)合在一起表示要?jiǎng)?chuàng)建一個(gè)交互式的終端。-i
參數(shù)表示保持 STDIN 打開,即使沒有連接到它,-t
參數(shù)表示分配一個(gè)偽終端。mysql
: 這是要執(zhí)行命令的容器的名稱或 ID。/bin/bash
: 這是要執(zhí)行的命令,在這里是打開一個(gè) bash 終端。
(2)數(shù)據(jù)庫登錄和創(chuàng)建
# 登錄(密碼已經(jīng)在 docker run語句的參數(shù)里面設(shè)置) # 參數(shù) -u 和其后的用戶名通常之間不需要空格隔開;參數(shù) -p 和其后的密碼也可以直接連在一起寫 mysql -uroot -proot --default-character-set=utf8 # 創(chuàng)建數(shù)據(jù)庫 CREATE DATABASE mydatabase # 退出 MySQL 命令行客戶端 exit
(3)導(dǎo)入數(shù)據(jù)
在導(dǎo)入數(shù)據(jù)之前,我們首先確保 宿主機(jī)中指定路徑下sql 文件是否掛載到在容器里面(docker run 參數(shù)里面可以設(shè)置)。如果沒有掛載的話,我們可以使用 docker cp
命令:
# docker cp 語法 docker cp /本地/路徑/文件.sql 容器名稱或ID:/容器內(nèi)/路徑/ # 舉個(gè)例子 C:\Users\username>docker cp D:\Learning\project\12306\resources mysql:/resources/ Successfully copied 8.22MB to mysql:/resources/
然后,我們在創(chuàng)建的數(shù)據(jù)庫里面導(dǎo)入sql數(shù)據(jù)文件:
# 切換到指定的數(shù)據(jù)庫(在某些情況下,該語句可能以及寫到了sql數(shù)據(jù)文件里面) use 指定的數(shù)據(jù)庫名; -- 導(dǎo)入 SQL 文件 source /docker-entrypoint-initdb.d/mydata.sql;
(4)保存 mysql 容器
為了保存更新后的數(shù)據(jù)庫,我們應(yīng)該將容器保存為新的鏡像
注意:在 Docker 中,鏡像是不可更改的。一旦創(chuàng)建了一個(gè)鏡像,就無法直接修改它。因此,無法直接覆蓋原來的鏡像。
docker commit [CONTAINER ID] [IMAGE NAME] #容器ID 創(chuàng)建的鏡像名 docker images #可以看到該鏡像已經(jīng)創(chuàng)建成功,下次需要新建容器時(shí)可直接使用該鏡像
舉個(gè)例子,
C:\Users\username>docker commit mysql mysqlcloud sha256:6953caac5bffdea0a7a867dc5fb483702f8b291e00759940aae8275f28966391 C:\Users\username>docker images REPOSITORY TAG IMAGE ID CREATED SIZE mysqlcloud latest 6953caac5bff 11 seconds ago 457MB multi-container-app-todo-app latest 4ce52cba239f 2 months ago 226MB <none> <none> abc68feda784 2 months ago 226MB welcome-to-docker latest 391a7884fcf8 2 months ago 225MB mongo 6 6d5c2fe902ad 2 months ago 690MB docker/welcome-to-docker latest c1f619b6477e 4 months ago 18.6MB zdocker/welcome-to-docker latest c1f619b6477e 4 months ago 18.6MB nacos/nacos-server v2.1.2 a978644d9246 14 months ago 1.06GB redis latest 7614ae9453d1 2 years ago 113MB mysql 5.7.36 c20987f18b13 2 years ago 448MB pangliang/rocketmq-console-ng latest ce1afb55c045 4 years ago 118MB foxiswho/rocketmq broker-4.5.1 d45240b3173d 4 years ago 440MB foxiswho/rocketmq server-4.5.1 12d0d03473de 4 years ago 440MB
1.3 Navicat 可視化工具連接
在 docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_HOST='%' -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7.36
語句中,我們已經(jīng)設(shè)置好了端口號和密碼。因此,Navicat 可視化工具連接中,我們可以這樣填寫信息:
- 端口 填創(chuàng)建容器時(shí)
-p
后的第一個(gè)端口 - 密碼 填
-e
后寫的密碼
二、可能存在的問題
2.1 1130 - Host ‘172.17.0.1‘ is not allowed to connect to this MySQL server
Navicat連接報(bào)錯(cuò) ——1130 - Host ‘172.17.0.1‘ is not allowed to connect to this MySQL server
原因分析:
docker run --name mysql ^ -p 3306:3306 ^ -e MYSQL_ROOT_HOST='%' ^ -e MYSQL_ROOT_PASSWORD=root ^ -d mysql:5.7.36
在 docker run
語句里面,root 對應(yīng)的 Host 為 % 。但是 Mysql 數(shù)據(jù)庫里面沒有,我們重新修改即可。
Host
: 表示允許訪問 MySQL 服務(wù)器的主機(jī)名或 IP 地址。
User
: 表示用戶的用戶名。
mysql> select Host, User from user ; +-----------+---------------+ | Host | User | +-----------+---------------+ | localhost | mysql.session | | localhost | mysql.sys | | localhost | root | +-----------+---------------+ 3 rows in set (0.00 sec) mysql> update user set Host='%' where User='root' ; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> flush privileges ; Query OK, 0 rows affected (0.00 sec) mysql> select Host, User from user; +-----------+---------------+ | Host | User | +-----------+---------------+ | % | root | | localhost | mysql.session | | localhost | mysql.sys | +-----------+---------------+ 3 rows in set (0.00 sec)
實(shí)際操作:
-- 顯示所有數(shù)據(jù)庫 mysql> show databases ; -- 切換到 mysql 數(shù)據(jù)庫 use mysql; -- 顯示 mysql 數(shù)據(jù)庫中的所有表 show tables ; -- 查詢 user 表中的 Host 和 User 列 select Host, User from user ; -- 將 user 表中 User 為 'root' 的記錄的 Host 字段修改為 '%' update user set Host='%' where User='root' ; -- 刷新權(quán)限 flush privileges ;
參考資料
docker 安裝mysql,并創(chuàng)建數(shù)據(jù)庫_docker創(chuàng)建mysql數(shù)據(jù)庫
運(yùn)行在docker里面的mysql如何導(dǎo)入數(shù)據(jù)表
docker部署mysql,使用navicat可視化工具進(jìn)行連接
到此這篇關(guān)于Docker 中 MySQL 的部署與管理的文章就介紹到這了,更多相關(guān)MySQL 的部署與管理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決docker網(wǎng)絡(luò)錯(cuò)誤(network bridge not found)
這篇文章主要介紹了解決docker網(wǎng)絡(luò)錯(cuò)誤(network bridge not found)問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08Dockerfile 中 VOLUME 與 docker -v 的區(qū)別說明
這篇文章主要介紹了Dockerfile 中 VOLUME 與 docker -v 的區(qū)別說明,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03docker 移除掉運(yùn)行不正常的container操作
這篇文章主要介紹了docker 移除掉運(yùn)行不正常的container操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03docker安裝RabbitMq添加用戶實(shí)現(xiàn)方式
這篇文章主要介紹了docker安裝RabbitMq添加用戶實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07Docker學(xué)習(xí)筆記之Weave實(shí)現(xiàn)跨主機(jī)容器互聯(lián)
這篇文章主要介紹了Docker學(xué)習(xí)筆記之Weave實(shí)現(xiàn)跨主機(jī)容器互聯(lián),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-04-04Docker Machine創(chuàng)建Azure虛擬主機(jī)
這篇文章主要為大家詳細(xì)介紹了Docker Machine創(chuàng)建Azure虛擬主機(jī)的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06Windows10系統(tǒng)下Docker默認(rèn)存儲位置更改方案
這篇文章主要給大家介紹了關(guān)于Windows10系統(tǒng)下Docker默認(rèn)存儲位置更改方案的相關(guān)資料,在Docker中存儲路徑是一個(gè)重要的話題,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-08-08