Docker 重新打包 MySQL5.7 镜像并定制配置
在实际开发中,我们往往需要基于官方 MySQL 镜像进行一些特定的配置调整,比如修改默认端口、优化 InnoDB 参数或开启 GTID。直接修改配置文件后提交为新镜像,是快速构建定制化数据库环境的有效方法。下面以 MySQL 5.7 为例,演示如何通过 Docker 完成这一过程。
1. 拉取与启动基础镜像
首先从 Docker Hub 拉取官方的 MySQL 5.7 镜像,并启动一个容器。这里通过环境变量设置 root 密码,并将宿主机端口映射到容器内部。
docker pull mysql:5.7
docker run --name mysql -p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7
启动后建议立即检查容器状态,确保运行正常:
docker ps -l
如果看到 STATUS 为 Up,说明服务已就绪。若显示 Exited,请查看日志排查原因(常见于权限或配置问题)。
2. 进入容器验证连接
为了确认数据库功能正常,我们可以进入容器内部执行 SQL 命令:
docker exec -it mysql bash
mysql -uroot -p123456
成功登录后会看到 MySQL 版本信息,此时可以简单执行 show databases; 确认无报错。
同时,在宿主机上也可以通过客户端工具连接测试,确保网络端口映射无误:
mysql -uroot -p123456 -h 192.168.1.20
3. 修改配置文件 my.cnf
接下来是核心步骤。我们需要修改容器内的 /etc/mysql/my.cnf 文件,根据业务需求调整参数。例如,开启 GTID 模式、调整 InnoDB 缓冲池大小、优化日志策略等。
注意:不同版本的 MySQL 配置文件路径可能略有差异,请以实际容器内路径为准。常见的修改包括全局变量、InnoDB 引擎参数以及日志相关配置。
以下是经过整理的配置示例,涵盖了连接数、字符集、主从复制及性能调优的关键项:
[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock
[mysqld]
port = 3306
socket = /var/run/mysqld/mysqld.sock
back_log = 80
basedir = /usr
tmpdir = /tmp
datadir = /var/lib/mysql
#------------------- global variables ------------#
slave-parallel-type = LOGICAL_CLOCK
slave-parallel-workers = 16
slave_preserve_commit_order =
=
= TABLE
= TABLE
=
=
= NONE
=
= /var/lib/mysql/mysql-bin
=
=
=
=
=
=
=
=
=
=
= utf8
= utf8_bin
skip_external_locking
=
= mysql
= DEFAULT
skip-name-resolve
=
=
= M
= ibdata1:M:autoextend
=
=
=
= M
= M
=
=
=
=
=
=
innodb_file_per_table
innodb_rollback_on_timeout
= M
= M
= M
= M
= M
= M
= M
= M
= M
= my3306-bin
= row
=
=
= M
= M
= k
slow_query_log
log-slow-admin-statements
=
=
= relay3306.index
= relay3306
=
=
log-slave-updates
= M
= M
= M
= M
= MySQL [\\d]>
= utf8
interactive-timeout
=
= /var/lib/mysql/mysqld_error.log


