日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

docker mysql数据库初始化_如何在Mysql的Docker容器启动时初始化数据库

發布時間:2025/3/15 数据库 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 docker mysql数据库初始化_如何在Mysql的Docker容器启动时初始化数据库 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.前言

Docker在開發中使用的越來越多了,最近搞了一個Spring Boot應用,為了方便部署將Mysql也放在Docker中運行。那么怎么初始化?SQL腳本以及數據呢?

我這里有兩個傳統方案。第一種方案是在容器啟動后手動導入,太 low 了不行。第二種在Spring Boot客戶端連接Mysql容器時初始化數據庫,你可以參考使用 flyway 進行數據庫版本控制一文,但是這依賴客戶端的能力。能不能做到Mysql容器啟動時就自己初始化數據庫呢?當然可以!今天就來演示一下。全部代碼見文末。

2.原理

當Mysql容器首次啟動時,會在?/docker-entrypoint-initdb.d目錄下掃描?.sh,.sql,.sql.gz類型的文件。如果這些類型的文件存在,將執行它們來初始化一個數據庫。這些文件會按照字母的順序執行。默認情況下它們會初始化在啟動容器時聲明的?MYSQL_DATABASE變量中的數據庫中,例如下面的命令會初始化一個REGION_DB?數據庫:

$?docker?run?--name?some-mysql?-e?MYSQL_DATABASE=REGION_DB?-d?mysql:tag

如果你的啟動命令沒有指定數據庫那么就必須在數據庫 DDL 腳本中聲明并指定使用該數據庫。否則就會實現下面的異常:

ERROR 1046 (3D000) at line 7: No database selected

那么接下來我們將利用這一機制來實現Docker容器啟動時初始化數據庫。

3.自定義 Dockerfile

我們編寫自己的Dockerfile來實現我們的需求,這里以?Mysql:5.7?為例。不同的版本可能有一定的出入,需要詳細去閱讀官方文檔。腳本如下:

FROM?mysql:5.7

LABELOG=felord.cn

COPYutf8mb4.cnf?/etc/mysql/conf.d/utf8mb4.cnf

COPY./sql??/tmp/sql

RUNmv?/tmp/sql/*.sql?/docker-entrypoint-initdb.d

RUNrm?-rf?/tmp/sql

第一步,引入官方

Mysql:5.7?Docker 鏡像。

第二步,無實際意義,主要是作者、組織信息。

第三步,很重要!本來我沒有配置第三行,結果運行容器后發現初始化數據的中文全部亂碼了。所以需要在初始化數據庫前修改

Mysql的編碼等配置,這里我順便把時區也改為了

+8:00。

第四步,復制包含數據庫腳本的

./sql文件夾到鏡像的

/tmp/sql下。

第五步,使用

mv?命令把第四步拷貝的文件夾下的所有

.sql文件復制到

/docker-entrypoint-initdb.d下,這樣才能利用

2.章節的機制進行初始化數據庫。

第六步,刪除使用過的臨時目錄。

然后你可以通過構建鏡像命令構建自定義的 Mysql 鏡像:

#?一定不要忘記最后的一個?.?點

docker?build?-t?mysql:5.7c?.

通過mysql:5.7c鏡像啟動一個名稱為mysql-service的容器,root密碼為123456,并持久化數據到宿主機?D:/mysql/data下:

docker?run?--name?mysql-service?-v?d:/mysql/data:/var/lib/mysql?-p?3306:3306?-e?MYSQL_ROOT_PASSWORD=123456?-d?mysql:5.7c

小貼士:你可以通過?SHOW VARIABLES LIKE 'character%'?查看字符集是否更改為utf8mb4,也可以通過SHOW VARIABLES LIKE '%time_zone%'?查看時區是否是東八區。

4. 總結

今天我們自定義一個可以執行初始化數據庫的Mysql鏡像,方便我們進行部署。你也可以參考這個思路來定制其它一些自己需要的Docker鏡像。

本文的完整Demo可以通過關注下面公眾號,回復?mysqldocker?獲取。

總結

以上是生活随笔為你收集整理的docker mysql数据库初始化_如何在Mysql的Docker容器启动时初始化数据库的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。