背景
本文教你如何通過Docker 搭建 MySQL數(shù)據(jù)庫
環(huán)境配置
使用bitnami/mysql 進(jìn)行安裝 MySQL(5.7.43版本)
https://hub.docker.com/layers/bitnami/mysql/5.7.43/images/sha256-2737976d370a780cb7862106f755f8a14bdfba30045ab2e6efa1fbf230421ec2?context=explore
鏡像支持支持 amd64和arm64架構(gòu)
Docker搭建MySQL流程
參考: https://github.com/bitnami/containers/blob/main/bitnami/mysql/README.md
如果希望在Kubernetes中通過 helm chart 部署MySQL 可以參考如下文檔
https://github.com/bitnami/charts/tree/main/bitnami/mysql
1.bitnami MySQL支持的環(huán)境變量
MySQL環(huán)境可以自行依據(jù)場景進(jìn)行配置修改
https://github.com/bitnami/containers/blob/main/bitnami/mysql/README.md#environment-variables
可以 docker run -e 指定重新相關(guān)環(huán)境變量值
2.Docker 搭建 MySQL
# ALLOW_EMPTY_PASSWORD=yes => 可以設(shè)置root免密登錄(測試使用,生產(chǎn)不建議)
docker run -itd --name mysql --privileged -p 3306:3306 --restart always \
# 指定 root用戶名: 默認(rèn)root
-e MYSQL_ROOT_USER=root \
-e MYSQL_MASTER_PORT_NUMBER=3306 \
# 指定 root 密碼 123456
-e MYSQL_ROOT_PASSWORD=123456 \
# 配置mysql數(shù)據(jù)持久化 容器內(nèi)目錄: /bitnami/mysql/data 掛載到宿主機(jī)目錄 /home/admin/data/mysql 下
-v /home/admin/data/mysql:/bitnami/mysql/data \
bitnami/mysql:5.7.43
3.自定義MySQL配置
MySQL默認(rèn)配置如下:
默認(rèn)設(shè)置了所有ip可以連接、端口3306旨剥、日志目錄、默認(rèn)字符集utf8mb4臭墨,其他配置未設(shè)置,可以按需配置
1.自定義部分MySQL配置 -推薦
# 1.(宿主機(jī))自定義部分MySQL配置
vi /home/admin/data/mysql/conf/my_custom.cnf
[mysqld]
# 設(shè)置最大連接數(shù)20000
max_connections=20000
# 2.Docker 啟動加載自定義部分MySQL配置
docker run -itd --name mysql --privileged -p 3306:3306 --restart always \
-e MYSQL_ROOT_USER=root \
-e MYSQL_MASTER_PORT_NUMBER=3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
# 開啟慢SQL監(jiān)控
-e MYSQL_ENABLE_SLOW_QUERY=1 \
# 超過2s記錄到慢SQL中
-e MYSQL_LONG_QUERY_TIME=2.0 \
# 將自定義配置文件/home/admin/data/mysql/conf/my_custom.cnf 映射到容器/opt/bitnami/mysql/conf/my_custom.cnf膘盖,MySQL啟動時會使用自定義配置覆蓋默認(rèn)配置
-v /home/admin/data/mysql/conf/my_custom.cnf:/opt/bitnami/mysql/conf/my_custom.cnf:ro \
-v /home/admin/data/mysql:/bitnami/mysql/data \
bitnami/mysql:5.7.43
# 不換行版本
docker run -itd --name mysql --privileged --restart always -e MYSQL_ROOT_USER=root -e MYSQL_MASTER_PORT_NUMBER=3306 -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_ENABLE_SLOW_QUERY=1 -e MYSQL_LONG_QUERY_TIME=2.0 -v /Users/jinze/quant/mysql/conf/my_custom.cnf:/opt/bitnami/mysql/conf/my_custom.cnf:ro -v /Users/jinze/quant/mysql/data:/bitnami/mysql/data bitnami/mysql:5.7.43
# 3.查看慢SQL
docker exec -it mysql mysqldumpslow
開啟MySQL 慢SQL(slow_sql)配置
2.MySQL配置全部自定義
docker run -itd --name mysql --privileged -p 3306:3306 --restart always \
-e MYSQL_ROOT_USER=root \
-e MYSQL_MASTER_PORT_NUMBER=3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
# 使用自定義配置文件/home/admin/data/mysql/conf/my.cnf (需要包含MySQL全量配置) 映射 到容器/opt/bitnami/mysql/conf/my.cnf胧弛,MySQL啟動時會使用自定義配置覆蓋默認(rèn)全部配置
-v /home/admin/data/mysql/conf/my.cnf:/opt/bitnami/mysql/conf/my.cnf:ro \
-v /home/admin/data/mysql:/bitnami/mysql/data \
bitnami/mysql:5.7.43
4.MySQL數(shù)據(jù)庫啟動數(shù)據(jù)初始化
如果項(xiàng)目中需要在MySQL啟動時候完成某些應(yīng)用依賴的數(shù)據(jù)庫創(chuàng)建尤误、表創(chuàng)建可以使用此功能
可以自定義MySQL容器第一次啟動或每次啟動執(zhí)行的腳本,支持.sh/ .sql/ .sql.gz 格式文件
1.容器目錄 /docker-entrypoint-initdb.d 下(.sh/ .sql/ .sql.gz)格式文件只在容器首次啟動時執(zhí)行
2.容器目錄 /docker-entrypoint-startdb.d 下(.sh/ .sql/ .sql.gz)格式文件在每次容器啟動時都會執(zhí)行
# 通過文件掛載方式掛載外部如 .sql文件在容器首次啟動時進(jìn)行數(shù)據(jù)庫腳本初始化(如創(chuàng)建數(shù)據(jù)庫结缚,建表)
docker run -itd --name mysql --privileged -p 3306:3306 --restart always \
-e MYSQL_ROOT_USER=root \
-e MYSQL_MASTER_PORT_NUMBER=3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
# 配置MySQL啟動時需要初始化到數(shù)據(jù)庫腳本/home/admin/data/mysql/init_sql/test_database.sql 掛載到容器內(nèi)目錄: /docker-entrypoint-initdb.d 下损晤,MySQL容器首次啟動會自動執(zhí)行test_database.sql進(jìn)行初始化操作
-v /home/admin/data/init_sql: /docker-entrypoint-initdb.d
-v /home/admin/data/mysql:/bitnami/mysql/data
bitnami/mysql:5.7.43