Docker安裝MySQL及授權(quán)遠(yuǎn)程訪問的詳細(xì)教程
前言
雖然 docker 安裝 mysql 不是一個很好的方案,但是為了個人使用方便,使用 docker 安裝 mysql 還是沒什么問題的。
本文為了方便,我們直接通過yum方式安裝。所以,我們在安裝之前需要電腦可以聯(lián)網(wǎng),不然我們這種方式是安裝不了的。
當(dāng)然,你也可以自行下載mysql鏡像,然后再通過 docker 安裝,不過這不在本文的討論范圍。
一、拉取鏡像
# 拉取鏡像 docker pull mysql # 或者 docker pull mysql:latest # 以上兩個命令是一致的,默認(rèn)拉取的就是 latest 版本的 # 我們還可以用下面的命令來查看可用版本: docker search mysql
二、查看鏡像
使用以下命令來查看是否已安裝了 mysql鏡像
docker images
三、運(yùn)行鏡像
docker run -p 3306:3306 --name mysql --restart=always --privileged=true \ -v /usr/local/mysql/log:/var/log/mysql \ -v /usr/local/mysql/data:/var/lib/mysql \ -v /usr/local/mysql/conf:/etc/mysql \ -v /etc/localtime:/etc/localtime:ro \ -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest
命令解決:
-p 3306:3306:指定宿主機(jī)端口與容器端口映射關(guān)系
--name mysql:創(chuàng)建的容器名稱
--restart=always:總是跟隨docker啟動
--privileged=true:獲取宿主機(jī)root權(quán)限
-v /usr/local/mysql/log:/var/log/mysql:映射日志目錄,宿主機(jī):容器
-v /usr/local/mysql/data:/var/lib/mysql:映射數(shù)據(jù)目錄,宿主機(jī):容器
-v /usr/local/mysql/conf:/etc/mysql:映射配置目錄,宿主機(jī):容器
-v /etc/localtime:/etc/localtime:ro:讓容器的時鐘與宿主機(jī)時鐘同步,避免時區(qū)的問題,ro是read only的意思,就是只讀。
-e MYSQL_ROOT_PASSWORD=123456:指定mysql環(huán)境變量,root用戶的密碼為123456-d mysql:latest:后臺運(yùn)行mysql容器,版本是latest。
或者使用下面的命令:
docker run --name mysql --restart=always --privileged=true \ -v /usr/local/mysql/data:/var/lib/mysql \ -v /usr/local/mysql/conf.d:/etc/mysql/conf.d \ -v /etc/localtime:/etc/localtime:ro \ -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql:latest
四、查看正在運(yùn)行的容器
# 查看正在運(yùn)行的容器 docker ps # 查看所有的docker容器 docker ps -a
這個時候如果顯示的是up狀態(tài),那就是啟動成功了。如果是restarting,說明是有問題的。我們可以查看日志:
docker logs -f mysql
可能會發(fā)現(xiàn):
Failed to access directory for --secure-file-priv. Please make sure that dir
此時如果我們執(zhí)行第五步也會報(bào)錯:
Error response from daemon: Container xxx is restarting, wait until the cont。。。
此時我們需要執(zhí)行第六步。
五、查看容器內(nèi)部
docker exec -it mysql /bin/bash
六、修改mysql配置
創(chuàng)建mysql配置文件:my.cnf
cd /usr/local/mysql ll cd conf vi my.cnf
在 my.cnf 文件中 寫入如下內(nèi)容:
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
# 設(shè)置東八區(qū)時區(qū)
default-time_zone = '+8:00'# 設(shè)置密碼驗(yàn)證規(guī)則,default_authentication_plugin參數(shù)已被廢棄
# 改為authentication_policy
#default_authentication_plugin=mysql_native_password
authentication_policy=mysql_native_password# 限制導(dǎo)入和導(dǎo)出的數(shù)據(jù)目錄
# 為空,不限制導(dǎo)入到處的數(shù)據(jù)目錄;
# 指定目錄,必須從該目錄導(dǎo)入到處,且MySQL不會自動創(chuàng)建該目錄;
# 為NULL,禁止導(dǎo)入與導(dǎo)出功能
#secure_file_priv=/var/lib/mysql
secure_file_priv=init_connect='SET collation_connection = utf8mb4_0900_ai_ci'
init_connect='SET NAMES utf8mb4'
character-set-server=utf8mb4
collation-server=utf8mb4_0900_ai_ci
skip-character-set-client-handshake
skip-name-resolve
默認(rèn)的鑒權(quán)方式,我們修改為mysql_native_password,不然的話連接會報(bào)錯。因?yàn)樵趍ysql8以后的默認(rèn)加密方式改變了,由 mysql_native_password 改為了caching_sha2_password。這種加密凡是在客戶端無法訪問,客戶端支持的是mysql_native_password 。我們先進(jìn)行第七步。
七、重啟mysql服務(wù),使其配置生效
docker restart mysql
八、設(shè)置docker啟動時啟動mysql
docker update mysql --restart=always
九、重啟mysql
docker restart mysql
十、授權(quán)遠(yuǎn)程訪問
不進(jìn)行授權(quán)直接登陸的話會報(bào)錯的,如圖:
錯誤內(nèi)容:
Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
Connection refused: connect
Connection refused: connect
10.1 進(jìn)入容器內(nèi)部
docker exec -it mysql /bin/bash
10.2 登陸mysql
mysql -u root -p
此時我們使用mysql客戶端連接服務(wù)器是失敗的,因?yàn)槟J(rèn)的root不具有遠(yuǎn)程連接的權(quán)限。
上面的密碼不要輸入,直接回車進(jìn)入。
10.3 選擇數(shù)據(jù)庫
show databases; use mysql;
不要忘記最后的分號。
10.4 查看用戶連接情況
select host, user, plugin, authentication_string, password_expired from user;
我們看到root用戶只有l(wèi)ocalhost的連接權(quán)限。
10.5 修改密碼認(rèn)證方式
ALTER USER root@'%' IDENTIFIED WITH mysql_native_password BY '123456'; ALTER USER root@'localhost' IDENTIFIED WITH mysql_native_password BY '123456'; -- 刷新權(quán)限 FLUSH PRIVILEGES;
10.6 退出容器
exit
先輸入exit退出mysql,再輸入exit退出容器。
此時,我們通過客戶端工具就可以連接mysql了。
總結(jié)
到此這篇關(guān)于Docker安裝MySQL及授權(quán)遠(yuǎn)程訪問的文章就介紹到這了,更多相關(guān)Docker安裝MySQL內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
docker部署管理工具portainer-ce的實(shí)現(xiàn)
Portainer是一個可視化的容器鏡像的圖形管理工具,利用Portainer可以輕松構(gòu)建,管理和維護(hù)Docker環(huán)境,本文主要介紹了docker部署管理工具portainer-ce的實(shí)現(xiàn),感興趣的可以了解一下2023-08-08docker倉庫數(shù)據(jù)傳輸加密的問題小結(jié)
這篇文章主要介紹了docker倉庫數(shù)據(jù)傳輸加密的問題小結(jié),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2024-12-12使用Jenkins+docker打包部署后端服務(wù)的實(shí)現(xiàn)
本文主要介紹了使用Jenkins+docker打包部署后端服務(wù)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08docker中搭建overlay 網(wǎng)絡(luò)實(shí)驗(yàn)環(huán)境
這篇文章主要介紹了docker中搭建overlay 網(wǎng)絡(luò)實(shí)驗(yàn)環(huán)境的相關(guān)資料,需要的朋友可以參考下2017-08-08