Docker部署MySQL鏡像的保姆級(jí)教程
1、安裝Docker
Docker的安裝可參考:如何在Ubuntu安裝docker以及一些常見(jiàn)報(bào)錯(cuò)
2、創(chuàng)建掛載目錄
# 創(chuàng)建宿主機(jī)mysql掛載目錄 sudo mkdir -p /data/docker/mysql/config
?3、準(zhǔn)備配置文件
# 1.創(chuàng)建配置文件 sudo touch /data/docker/mysql/config/my.cnf
配置文件的內(nèi)容如下:
[mysqld] # 設(shè)置3306端口 port=3306 # 允許最大連接數(shù) max_connections=1000 # 允許連接失敗的次數(shù)。這是為了防止有人從該主機(jī)試圖攻擊數(shù)據(jù)庫(kù)系統(tǒng) max_connect_errors=100 # 服務(wù)端使用的字符集默認(rèn)為UTF8 character-set-server=utf8mb4 # 創(chuàng)建新表時(shí)將使用的默認(rèn)存儲(chǔ)引擎 default-storage-engine=INNODB #是否對(duì)sql語(yǔ)句大小寫敏感,1表示不敏感 lower_case_table_names = 1 #MySQL連接閑置超過(guò)一定時(shí)間后(單位:秒)將會(huì)被強(qiáng)行關(guān)閉 #MySQL默認(rèn)的wait_timeout 值為8個(gè)小時(shí), interactive_timeout參數(shù)需要同時(shí)配置才能生效 interactive_timeout = 1800 wait_timeout = 1800 #Metadata Lock最大時(shí)長(zhǎng)(秒), 一般用于控制 alter操作的最大時(shí)長(zhǎng)sine mysql5.6 #執(zhí)行 DML操作時(shí)除了增加innodb事務(wù)鎖外還增加Metadata Lock,其他alter(DDL)session將阻塞 lock_wait_timeout = 3600 #內(nèi)部?jī)?nèi)存臨時(shí)表的最大值。 #比如大數(shù)據(jù)量的group by ,order by時(shí)可能用到臨時(shí)表, #超過(guò)了這個(gè)值將寫入磁盤,系統(tǒng)IO壓力增大 tmp_table_size = 64M max_heap_table_size = 64M # === 日志相關(guān) === ## >>> 錯(cuò)誤日志 # 錯(cuò)誤日志存放文件,默認(rèn) datadir 目錄下 log_error=/var/log/mysql/log-error.log # 開(kāi)啟事務(wù)中所有死鎖的InnoDB信息記錄在錯(cuò)誤日志中 innodb_print_all_deadlocks=ON ## >>> 二進(jìn)制日志 # 二進(jìn)制日志文件基礎(chǔ)名稱以及路徑,默認(rèn) datadir 目錄下 log_bin=/var/log/mysql/log-bin ## >>> 慢查詢?nèi)罩? # 開(kāi)啟慢查詢?nèi)罩?,默認(rèn)OFF,建議開(kāi)發(fā)和測(cè)試環(huán)境開(kāi)啟 slow_query_log=ON # 慢查詢?nèi)罩疚募恢? slow_query_log_file=/var/log/mysql/log-slow.log # 慢查詢時(shí)間閾值,默認(rèn)10,單位:秒 long_query_time=10 [mysql] # 設(shè)置mysql客戶端默認(rèn)字符集 default-character-set=utf8mb4 [client] # 設(shè)置mysql客戶端連接服務(wù)端時(shí)默認(rèn)使用的端口 port=3306 default-character-set=utf8mb4
4、運(yùn)行MySQL容器
# 1.拉取鏡像 sudo docker pull mysql:8.0.40 # 2.啟動(dòng)鏡像 sudo docker run --privileged=true --net=bridge \ -p 3306:3306 \ --name mysql \ -v /data/docker/mysql/data:/var/lib/mysql \ -v /data/docker/mysql/config:/etc/mysql/conf.d \ -v /data/docker/mysql/log:/var/log/mysql \ -e MYSQL_ROOT_PASSWORD=root@123 \ -e TZ=Asia/Shanghai \ -d mysql:8.0.40
參數(shù)解析如下:
| 參數(shù) | 參數(shù)說(shuō)明 |
| docker run | 運(yùn)行 Docker 容器 |
| --name mysql | 設(shè)置容器的名稱為mysql |
| -d mysql:8.0.40 | 后臺(tái)運(yùn)行mysql容器 |
| --privileged=true | Docker會(huì)賦予容器幾乎與宿主機(jī)相同的權(quán)限 |
| --net=bridge | 網(wǎng)絡(luò)模式配置,默認(rèn)是bridge,bridge表示使用容器內(nèi)部配置網(wǎng)絡(luò) |
| -p 3306:3306 | 將主機(jī)的 3306 端口映射到容器的 3306 端口 |
| -e MYSQL_ROOT_PASSWORD=root@123 | 設(shè)置 mysql 的管理員賬號(hào)密碼為 root@123 |
| -e TZ=Asia/Shanghai | 設(shè)置容器的時(shí)區(qū)為上海時(shí)間,便于處理時(shí)間相關(guān)的數(shù)據(jù) |
| -v /data/docker/mysql/data:/var/lib/mysql | 將主機(jī)data目錄掛載到容器內(nèi),用于數(shù)據(jù)持久化 |
| -v /data/docker/mysql/log:/var/log/mysql | 將主機(jī)log目錄掛載到容器內(nèi),用于日志文件持久化 |
| -v /data/docker/mysql/config:/etc/mysql/conf.d | 將主機(jī)中 /data/docker/mysql/config 目錄映射到容器內(nèi)的 /etc/mysql/conf.d 目錄,這樣可以提供自定義的 mysql 配置文件 |
5、Compose運(yùn)行MySQL容器
創(chuàng)建docker-compose.yml文件
sudo touch /data/docker/mysql/docker-compose.yml
文件內(nèi)容如下:
version: '3'
services:
mysql:
image: mysql:8.0.40
container_name: mysql
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: root@123
TZ: Asia/Shanghai
volumes:
- /data/docker/mysql/data:/var/lib/mysql
- /data/docker/mysql/config:/etc/mysql/conf.d
- /data/docker/mysql/log:/var/log/mysql
privileged: true
network_mode: "bridge"運(yùn)行容器
#-f:調(diào)用文件,-d:開(kāi)啟守護(hù)進(jìn)程 sudo docker compose -f /data/docker/mysql/docker-compose.yml up -d
6、查看MySQL運(yùn)行狀態(tài)


7、常見(jiàn)問(wèn)題
?7.1、用DBeaver 連接數(shù)據(jù)庫(kù)的時(shí)候出現(xiàn)Public Key Retrieval is not allowed
解決方案:連接設(shè)置 - 驅(qū)動(dòng)屬性 ,找到allowPublicKeyRetrieval,把a(bǔ)llowPublicKeyRetrieval的值設(shè)為 切換為 true 即可。

以上就是Docker部署MySQL鏡像的保姆級(jí)教程的詳細(xì)內(nèi)容,更多關(guān)于Docker部署MySQL鏡像的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Jenkins Pipeline中Docker鏡像構(gòu)建與推送的常見(jiàn)問(wèn)題及解決方案
在現(xiàn)代 DevOps 實(shí)踐中,Jenkins 作為一款流行的持續(xù)集成和持續(xù)交付(CI/CD)工具,被廣泛應(yīng)用于自動(dòng)化構(gòu)建、測(cè)試和部署流程,然而,在實(shí)際使用 Jenkins Pipeline 進(jìn)行 Docker 鏡像構(gòu)建和推送的過(guò)程中,可能會(huì)遇到各種問(wèn)題,本文將通過(guò)一個(gè)具體的案例給大家詳細(xì)的介紹一下2025-01-01
docker部署redis報(bào)錯(cuò)內(nèi)存分配過(guò)度解決辦法
Docker很適合用于測(cè)試發(fā)布,將Docker封裝后可以直接提供給測(cè)試人員進(jìn)行運(yùn)行,不再需要測(cè)試人員與運(yùn)維、開(kāi)發(fā)進(jìn)行配合,進(jìn)行環(huán)境搭建與部署,這篇文章主要給大家介紹了關(guān)于docker部署redis報(bào)錯(cuò)內(nèi)存分配過(guò)度的解決辦法,需要的朋友可以參考下2023-11-11
容器搭建nextcloud+onlyoffice+https實(shí)踐
本文介紹了在CentOS8.5上使用Docker搭建個(gè)人網(wǎng)盤應(yīng)用Nextcloud和OnlyOffice的詳細(xì)步驟,包括容器準(zhǔn)備、啟動(dòng)、SSL配置以及在Nextcloud中集成OnlyOffice2026-01-01
Docker搭建一個(gè)nginx服務(wù)的實(shí)現(xiàn)
Nginx是一個(gè)高性能的HTTP和反向代理web服務(wù)器,同時(shí)也提供了IMAP/POP3/SMTP服務(wù),本文主要介紹了Docker搭建一個(gè)nginx服務(wù)的實(shí)現(xiàn),感興趣的可以了解一下2024-08-08
Docker安裝MySQL集群全過(guò)程(主從復(fù)制)
本文介紹通過(guò)Docker實(shí)現(xiàn)數(shù)據(jù)庫(kù)主從集群部署,涵蓋網(wǎng)絡(luò)創(chuàng)建、my.cnf配置、復(fù)制設(shè)置及測(cè)試,解決防火墻等常見(jiàn)問(wèn)題,確保數(shù)據(jù)同步可靠2025-07-07
docker安裝RabbitMq添加用戶實(shí)現(xiàn)方式
這篇文章主要介紹了docker安裝RabbitMq添加用戶實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07
如何在Docker容器內(nèi)外互相拷貝數(shù)據(jù)
本篇文章主要介紹了如何在Docker容器內(nèi)外互相拷貝數(shù)據(jù),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-12-12
Windows Docker部署Jenkins的實(shí)現(xiàn)步驟
Jenkins是一款開(kāi)源的持續(xù)集成工具,廣泛用于項(xiàng)目開(kāi)發(fā),能提供自動(dòng)構(gòu)建測(cè)試部署等功能,本文主要介紹了Windows Docker部署Jenkins的實(shí)現(xiàn)步驟,感興趣的可以了解一下2024-03-03

