背景
本文教你如何通过Docker 搭建 MySQL数据库
环境配置
使用bitnami/mysql 进行安装 MySQL(5.7.43版本)
https://hub.docker.com/layers/bitnami/mysql/5.7.43/images/sha256-2737976d370a780cb7862106f755f8a14bdfba30045ab2e6efa1fbf230421ec2?context=explore
镜像支持支持 amd64和arm64架构
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支持的环境变量
MySQL环境可以自行依据场景进行配置修改
https://github.com/bitnami/containers/blob/main/bitnami/mysql/README.md#environment-variables
可以 docker run -e 指定重新相关环境变量值
2.Docker 搭建 MySQL
# ALLOW_EMPTY_PASSWORD=yes => 可以设置root免密登录(测试使用,生产不建议)
docker run -itd --name mysql --privileged -p 3306:3306 --restart always \
# 指定 root用户名: 默认root
-e MYSQL_ROOT_USER=root \
-e MYSQL_MASTER_PORT_NUMBER=3306 \
# 指定 root 密码 123456
-e MYSQL_ROOT_PASSWORD=123456 \
# 配置mysql数据持久化 容器内目录: /bitnami/mysql/data 挂载到宿主机目录 /home/admin/data/mysql 下
-v /home/admin/data/mysql:/bitnami/mysql/data \
bitnami/mysql:5.7.43
3.自定义MySQL配置
MySQL默认配置如下:
默认设置了所有ip可以连接、端口3306、日志目录、默认字符集utf8mb4,其他配置未设置,可以按需配置
1.自定义部分MySQL配置 -推荐
# 1.(宿主机)自定义部分MySQL配置
vi /home/admin/data/mysql/conf/my_custom.cnf
[mysqld]
# 设置最大连接数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监控
-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启动时会使用自定义配置覆盖默认配置
-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启动时会使用自定义配置覆盖默认全部配置
-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数据库启动数据初始化
如果项目中需要在MySQL启动时候完成某些应用依赖的数据库创建、表创建可以使用此功能
可以自定义MySQL容器第一次启动或每次启动执行的脚本,支持.sh/ .sql/ .sql.gz 格式文件
1.容器目录 /docker-entrypoint-initdb.d 下(.sh/ .sql/ .sql.gz)格式文件只在容器首次启动时执行
2.容器目录 /docker-entrypoint-startdb.d 下(.sh/ .sql/ .sql.gz)格式文件在每次容器启动时都会执行
# 通过文件挂载方式挂载外部如 .sql文件在容器首次启动时进行数据库脚本初始化(如创建数据库,建表)
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启动时需要初始化到数据库脚本/home/admin/data/mysql/init_sql/test_database.sql 挂载到容器内目录: /docker-entrypoint-initdb.d 下,MySQL容器首次启动会自动执行test_database.sql进行初始化操作
-v /home/admin/data/init_sql: /docker-entrypoint-initdb.d
-v /home/admin/data/mysql:/bitnami/mysql/data
bitnami/mysql:5.7.43