Docker搭建MySQL數(shù)據(jù)庫(kù)的完整步驟及報(bào)錯(cuò)解決
前言
在本篇文章中,我們將詳細(xì)介紹如何通過(guò) Docker 快速搭建一個(gè) MySQL 數(shù)據(jù)庫(kù)環(huán)境,并通過(guò)一些簡(jiǎn)單的配置來(lái)實(shí)現(xiàn)數(shù)據(jù)持久化、日志管理和定制化的配置文件。
一、準(zhǔn)備工作
首先,確保你的系統(tǒng)上已經(jīng)安裝了 Docker。
Linux上進(jìn)行Docker安裝有兩種方式:
- Docker自動(dòng)化安裝
- Docker手動(dòng)安裝
可以根據(jù)該文章的步驟進(jìn)行安裝:https://blog.csdn.net/weixin_44876263/article/details/136714078?spm=1001.2014.3001.5502
二、設(shè)置 MySQL 容器的目錄結(jié)構(gòu)
為了確保容器中的 MySQL 數(shù)據(jù)持久化并且能夠方便地訪(fǎng)問(wèn),我們需要在宿主機(jī)上創(chuàng)建一些本地目錄來(lái)掛載到 Docker 容器中。這里我們?cè)?/opt/docker/demo 路徑下創(chuàng)建 MySQL 相關(guān)的目錄,包括日志、數(shù)據(jù)和配置文件目錄。
# 安裝路徑 DIR="/opt/docker/demo" DOCKER_NAME="docker-mysql" # 創(chuàng)建目錄結(jié)構(gòu) mkdir -p "$DIR/mysql/log" mkdir -p "$DIR/mysql/data" mkdir -p "$DIR/mysql/conf"
這里我們創(chuàng)建了以下幾個(gè)目錄:
log:存放 MySQL 容器的日志文件。data:存放 MySQL 容器的數(shù)據(jù)文件。conf:存放 MySQL 配置文件。
三、配置 MySQL 容器
接下來(lái),我們將使用 Docker 運(yùn)行一個(gè) MySQL 容器。Docker 提供了一個(gè)官方的 mysql:8.0 鏡像,我們將基于該鏡像來(lái)創(chuàng)建容器。
以下是啟動(dòng) MySQL 容器的命令:
docker run -d \ --restart=always \ --name "$DOCKER_NAME" \ --network host \ -v "$DIR/mysql/log:/var/log/mysql" \ -v "$DIR/mysql/data:/var/lib/mysql" \ -v "$DIR/mysql/conf:/etc/mysql/conf.d" \ -e MYSQL_ROOT_PASSWORD=root \ mysql:8.0
解釋各個(gè)參數(shù):
-d:后臺(tái)運(yùn)行容器。--restart=always:容器在崩潰或機(jī)器重啟后會(huì)自動(dòng)重啟。--name "$DOCKER_NAME":指定容器名稱(chēng)為docker-mysql。--network host:將容器連接到宿主機(jī)的網(wǎng)絡(luò),以便外部可以訪(fǎng)問(wèn) MySQL 服務(wù)。-v "$DIR/mysql/log:/var/log/mysql":將宿主機(jī)的日志目錄掛載到容器內(nèi)的日志目錄。-v "$DIR/mysql/data:/var/lib/mysql":將宿主機(jī)的數(shù)據(jù)目錄掛載到容器的數(shù)據(jù)目錄,確保數(shù)據(jù)持久化。-v "$DIR/mysql/conf:/etc/mysql/conf.d":將宿主機(jī)的配置文件目錄掛載到容器內(nèi)的配置目錄。-e MYSQL_ROOT_PASSWORD=root:設(shè)置 MySQL 根用戶(hù)的密碼為root。mysql:8.0:使用官方的 MySQL 8.0 鏡像
四、自定義 MySQL 配置
MySQL 的配置文件可以通過(guò)掛載宿主機(jī)的配置目錄到容器內(nèi)進(jìn)行自定義。你可以在 conf 目錄下創(chuàng)建一個(gè) custom.cnf 文件,配置 MySQL 的監(jiān)聽(tīng)端口等參數(shù)。
例如,我們可以設(shè)置 MySQL 監(jiān)聽(tīng)的端口為 3307,而不是默認(rèn)的 3306,或設(shè)置時(shí)區(qū) +08:00。只需要在 custom.cnf 中添加如下配置:
[mysqld] port = 3307 default-time-zone = '+08:00'
然后,確保該文件掛載到容器內(nèi)的正確位置(/etc/mysql/conf.d/)。
五、端口配置:Host 網(wǎng)絡(luò)模式 vs Port 映射模式
在 Docker 中,容器的網(wǎng)絡(luò)配置和端口管理是非常重要的。對(duì)于 MySQL 容器,有兩種常見(jiàn)的端口配置方式:
Host 網(wǎng)絡(luò)模式
在 Docker 中使用
--network host選項(xiàng)時(shí),容器會(huì)直接使用宿主機(jī)的網(wǎng)絡(luò)棧,這意味著容器將使用宿主機(jī)的 IP 地址和端口。當(dāng)你使用 Host 網(wǎng)絡(luò)模式時(shí),容器中的 MySQL 服務(wù)將直接暴露在宿主機(jī)的默認(rèn)端口(如
3306)。無(wú)需進(jìn)行端口映射,MySQL 容器將與宿主機(jī)共享網(wǎng)絡(luò)接口。配置命令:
docker run -d \ --restart=always \ --name "$DOCKER_NAME" \ --network host \ -v "$DIR/mysql/log:/var/log/mysql" \ -v "$DIR/mysql/data:/var/lib/mysql" \ -v "$DIR/mysql/conf:/etc/mysql/conf.d" \ -e MYSQL_ROOT_PASSWORD=root \ mysql:8.0
- 優(yōu)點(diǎn)
- 容器共享宿主機(jī)的網(wǎng)絡(luò),性能較高。
- 無(wú)需顯式端口映射,容器與宿主機(jī)共享相同的網(wǎng)絡(luò)。
- 缺點(diǎn)
- 容器與宿主機(jī)的網(wǎng)絡(luò)完全共享,可能會(huì)有端口沖突,尤其是多個(gè)容器或服務(wù)同時(shí)運(yùn)行時(shí)。
- 容器的端口與宿主機(jī)端口相同,可能存在安全隱患。
- 優(yōu)點(diǎn)
Port 映射模式
如果你希望對(duì)容器的端口進(jìn)行靈活配置,可以使用
-p參數(shù)將容器的端口映射到宿主機(jī)的特定端口。通過(guò)這種方式,你可以將容器內(nèi)的 MySQL 端口(默認(rèn)為3306)映射到宿主機(jī)上的另一個(gè)端口。例如,將容器內(nèi)的
3306端口映射到宿主機(jī)的3307端口:配置命令:
docker run -d \ --restart=always \ --name "$DOCKER_NAME" \ -p 3307:3306 \ -v "$DIR/mysql/log:/var/log/mysql" \ -v "$DIR/mysql/data:/var/lib/mysql" \ -v "$DIR/mysql/conf:/etc/mysql/conf.d" \ -e MYSQL_ROOT_PASSWORD=root \ mysql:8.0
- 優(yōu)點(diǎn)
- 容器端口與宿主機(jī)端口不同,可以避免端口沖突。
- 容器與宿主機(jī)之間有更好的網(wǎng)絡(luò)隔離性。
- 支持多個(gè)容器映射到宿主機(jī)不同的端口,適合多容器環(huán)境。
- 缺點(diǎn)
- 可能會(huì)導(dǎo)致稍微的性能損失,因?yàn)樾枰M(jìn)行額外的端口映射。
- 需要手動(dòng)管理和指定端口映射。
- 優(yōu)點(diǎn)
六、檢查 MySQL 容器狀態(tài)
容器啟動(dòng)后,你可以通過(guò)以下命令檢查容器是否正常運(yùn)行:
docker ps
該命令會(huì)列出所有正在運(yùn)行的容器。如果你的 MySQL 容器沒(méi)有出現(xiàn)在列表中,可以通過(guò)查看容器日志來(lái)排查問(wèn)題:
docker logs docker-mysql
七、連接到 MySQL 容器
如果你需要連接到容器內(nèi)的 MySQL 數(shù)據(jù)庫(kù),可以使用 docker exec 命令進(jìn)入容器并使用 mysql 客戶(hù)端進(jìn)行連接:
docker exec -it docker-mysql mysql -u root -p
輸入密碼后,你將進(jìn)入 MySQL 提示符,可以執(zhí)行 SQL 查詢(xún)等操作。
八、備份與恢復(fù)
為了確保數(shù)據(jù)的安全性,你可以定期備份 MySQL 數(shù)據(jù)。因?yàn)閿?shù)據(jù)已經(jīng)掛載到宿主機(jī)目錄 $DIR/mysql/data,所以你可以直接備份該目錄中的數(shù)據(jù)文件。
例如,你可以使用 tar 命令將數(shù)據(jù)目錄打包備份:
tar -czvf mysql_backup.tar.gz -C "$DIR/mysql" data
恢復(fù)時(shí),只需要將備份文件解壓到相應(yīng)的目錄即可。
九、報(bào)錯(cuò)問(wèn)題
在使用 Docker 安裝 MySQL 后,容器啟動(dòng)失敗。查看日志后發(fā)現(xiàn)如下錯(cuò)誤信息:

Fatal glibc error: CPU does not support x86-64-v2
經(jīng)過(guò)排查,這是由于所使用的 MySQL 鏡像(如 mysql:8.0)基于較新的 glibc 編譯,要求宿主機(jī) CPU 支持 x86-64-v2 指令集。而一些老舊物理機(jī)或低配置云主機(jī)并不具備這些新指令集,導(dǎo)致容器無(wú)法啟動(dòng)并反復(fù)重啟。
解決方案:
更換為兼容舊 CPU 架構(gòu)的 MySQL 鏡像版本。例如使用下列鏡像即可成功運(yùn)行:
mysql:8.4.0-oraclelinux8
該鏡像基于 Oracle Linux 構(gòu)建,對(duì)老舊 CPU 有更好的兼容性。替換后容器可正常啟動(dòng),問(wèn)題順利解決。
總結(jié)
通過(guò) Docker 搭建 MySQL 數(shù)據(jù)庫(kù)環(huán)境非常簡(jiǎn)單,并且能夠通過(guò)掛載宿主機(jī)目錄的方式實(shí)現(xiàn)數(shù)據(jù)持久化和日志管理。通過(guò)修改容器內(nèi)的配置文件,你還可以自定義 MySQL 的參數(shù),例如監(jiān)聽(tīng)端口等。
Docker 提供了兩種常見(jiàn)的端口配置方式:Host 網(wǎng)絡(luò)模式和Port 映射模式。選擇哪種方式取決于你的需求:
- Host 網(wǎng)絡(luò)模式:適用于需要高性能、直接使用宿主機(jī)網(wǎng)絡(luò)的場(chǎng)景。
- Port 映射模式:適用于需要靈活配置端口、避免端口沖突或需要更好網(wǎng)絡(luò)隔離的場(chǎng)景。
無(wú)論選擇哪種方式,Docker 都能夠通過(guò)簡(jiǎn)單的配置幫助你快速搭建 MySQL 數(shù)據(jù)庫(kù),并且根據(jù)你的需求進(jìn)行靈活的端口管理。
到此這篇關(guān)于Docker搭建MySQL數(shù)據(jù)庫(kù)的文章就介紹到這了,更多相關(guān)Docker搭建MySQL數(shù)據(jù)庫(kù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- docker中使用mysql數(shù)據(jù)庫(kù)詳解(在局域網(wǎng)訪(fǎng)問(wèn))
- Docker容器啟動(dòng)時(shí)初始化Mysql數(shù)據(jù)庫(kù)的方法
- Docker部署Mysql數(shù)據(jù)庫(kù)步驟詳解
- 使用Docker部署MySQL數(shù)據(jù)庫(kù)的兩種方法
- docker中mysql數(shù)據(jù)庫(kù)密碼修改方法
- 使用Docker搭建MySQL數(shù)據(jù)庫(kù)服務(wù)的方法詳解
- MacOS使用Docker創(chuàng)建MySQL主從數(shù)據(jù)庫(kù)的方法
相關(guān)文章
教會(huì)你完全搞定MySQL數(shù)據(jù)庫(kù) 輕松八句話(huà)
只要掌握下面的方法,就基本上能搞定mysql數(shù)據(jù)庫(kù)。2010-09-09
在MySQL中創(chuàng)建實(shí)現(xiàn)自增的序列(Sequence)的教程
這篇文章主要介紹了在MySQL中創(chuàng)建實(shí)現(xiàn)自增的序列(Sequence)的教程,分別列舉了兩個(gè)實(shí)例并簡(jiǎn)單討論了一些限制因素,需要的朋友可以參考下2015-12-12
mysql “ Every derived table must have its own alias”出現(xiàn)錯(cuò)誤解決辦法
這篇文章主要介紹了mysql “ Every derived table must have its own alias”出現(xiàn)錯(cuò)誤解決辦法的相關(guān)資料,需要的朋友可以參考下2017-01-01
Centos?7.9安裝MySQL8.0.32的詳細(xì)教程
這篇文章主要介紹了Centos7.9安裝MySQL8.0.32的詳細(xì)教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-03-03
可視化工具navicat怎么連接到mysql數(shù)據(jù)庫(kù)的教程(圖文)
Navicat是一款強(qiáng)大的數(shù)據(jù)庫(kù)管理工具,支持多種數(shù)據(jù)庫(kù)系統(tǒng)如MySQL、Oracle等,通過(guò)簡(jiǎn)單的操作步驟,用戶(hù)可以輕松連接數(shù)據(jù)庫(kù):選擇數(shù)據(jù)庫(kù)類(lèi)型,填寫(xiě)連接名和密碼,測(cè)試連接,新建數(shù)據(jù)庫(kù)并設(shè)定相關(guān)連接信息,該教程詳細(xì)介紹了使用Navicat連接和新建數(shù)據(jù)庫(kù)的過(guò)程,2026-01-01
mysql8.0.20下載安裝及遇到的問(wèn)題(圖文詳解)
這篇文章主要介紹了mysql8.0.20下載安裝及遇到的問(wèn)題,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05
MySQL不可忽視的數(shù)據(jù)庫(kù)約束(維護(hù)數(shù)據(jù)秩序)
數(shù)據(jù)庫(kù)約束是數(shù)據(jù)庫(kù)管理中不可或缺的一部分,它們?cè)诰S護(hù)數(shù)據(jù)秩序、保證數(shù)據(jù)完整性和一致性方面發(fā)揮著重要作用,本文給大家介紹MySQL不可忽視的數(shù)據(jù)庫(kù)約束,感興趣的朋友一起看看吧2025-05-05

