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

三、運行鏡像
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:指定宿主機端口與容器端口映射關(guān)系
--name mysql:創(chuàng)建的容器名稱
--restart=always:總是跟隨docker啟動
--privileged=true:獲取宿主機root權(quán)限
-v /usr/local/mysql/log:/var/log/mysql:映射日志目錄,宿主機:容器
-v /usr/local/mysql/data:/var/lib/mysql:映射數(shù)據(jù)目錄,宿主機:容器
-v /usr/local/mysql/conf:/etc/mysql:映射配置目錄,宿主機:容器
-v /etc/localtime:/etc/localtime:ro:讓容器的時鐘與宿主機時鐘同步,避免時區(qū)的問題,ro是read only的意思,就是只讀。
-e MYSQL_ROOT_PASSWORD=123456:指定mysql環(huán)境變量,root用戶的密碼為123456-d mysql:latest:后臺運行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
四、查看正在運行的容器
# 查看正在運行的容器 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í)行第五步也會報錯:
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è)置密碼驗證規(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,不然的話連接會報錯。因為在mysql8以后的默認(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)直接登陸的話會報錯的,如圖:

錯誤內(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ù)器是失敗的,因為默認(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搭建服務(wù)器監(jiān)控面板的實現(xiàn)示例
Docker服務(wù)器監(jiān)控面板是一種用于監(jiān)控容器運行情況的工具,本文主要介紹了Docker搭建服務(wù)器監(jiān)控面板的實現(xiàn)示例,具有一定的參考價值,感興趣的可以了解一下2024-01-01
idea?連接遠(yuǎn)程?docker?并部署項目到?docker的過程
這篇文章主要介紹了idea連接遠(yuǎn)程docker并部署項目到docker,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-10-10
Docker安裝MongoDB的過程(mongo.latest)
MongoDB是一種高性能、靈活的數(shù)據(jù)庫,特別適合處理大量非結(jié)構(gòu)化數(shù)據(jù),它采用文檔數(shù)據(jù)模型,支持復(fù)雜的數(shù)據(jù)結(jié)構(gòu),提供類似面向?qū)ο蟮牟樵冋Z言,本文給大家介紹Docker安裝MongoDB的過程(mongo.latest),感興趣的朋友一起看看吧2024-11-11
Docker?下MySQL數(shù)據(jù)庫的備份和恢復(fù)的操作方法
這篇文章主要介紹了Docker?下MySQL數(shù)據(jù)庫的備份和恢復(fù)操作方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-02-02
Docker安裝mysql主從復(fù)制的實現(xiàn)步驟
MySQL主從復(fù)制是指數(shù)據(jù)可以從一個MySQL數(shù)據(jù)庫服務(wù)器主節(jié)點復(fù)制到一個或多個從節(jié)點,本文主要介紹了Docker安裝mysql主從復(fù)制的實現(xiàn)步驟,感興趣的可以了解一下2024-03-03
打包docker鏡像推送到遠(yuǎn)程服務(wù)器并部署到k8s的方法步驟
本文主要介紹了打包docker鏡像推送到遠(yuǎn)程服務(wù)器并部署到k8s的方法步驟,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-11-11
Docker?compose一鍵安裝mirai搭建QQ機器人最快操作方法
這篇文章主要介紹了Docker?compose一鍵安裝mirai,搭建QQ機器人最快方法,詳細(xì)介紹了mirai基本操作,結(jié)合實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-04-04

