centos/mariadb-102-centos7本容器镜像包含适用于OpenShift和通用场景的MariaDB 10.2 SQL数据库服务器。用户可选择基于RHEL、CentOS或Fedora的镜像:RHEL镜像可在Red Hat Container Catalog获取,CentOS镜像在Docker Hub,Fedora镜像在Fedora Registry。生成的镜像可使用podman运行。
注意:本文档示例中使用
podman命令,所有此类命令均可替换为docker,参数保持不变。
--memory参数且未指定部分配置时,自动根据可用内存计算参数值。适用于需要容器化部署MariaDB 10.2的各类场景,包括:
以Red Hat Container Catalog的rhscl/mariadb-102-rhel7镜像为例,仅设置必填环境变量且不持久化数据:
bashdocker run -d --name mariadb_database -e MYSQL_USER=user -e MYSQL_PASSWORD=pass -e MYSQL_DATABASE=db -p 3306:3306 rhscl/mariadb-102-rhel7
上述命令创建名为mariadb_database的容器,运行MySQL服务,创建数据库db及用户user:pass,并将容器3306端口映射到主机。
如需数据持久化,添加-v /host/db/path:/var/lib/mysql/data参数(/host/db/path为主机目录):
bashdocker run -d --name mariadb_database -e MYSQL_USER=user -e MYSQL_PASSWORD=pass -e MYSQL_DATABASE=db -p 3306:3306 -v /host/db/path:/var/lib/mysql/data rhscl/mariadb-102-rhel7
mysql_install_db,设置必要的数据库用户和密码。mysqld将以PID 1运行。docker stop mariadb_database。通过-e VAR=VALUE设置以下环境变量:
MYSQL_USER:创建的MySQL用户名。MYSQL_PASSWORD:用户密码。MYSQL_DATABASE:数据库名称。MYSQL_ROOT_PASSWORD(可选):root用户密码,用于远程访问。MYSQL_LOWER_CASE_TABLE_NAMES(默认:0):控制表名存储和比较方式。MYSQL_MAX_CONNECTIONS(默认:151):最大并发客户端连接数。MYSQL_MAX_ALLOWED_PACKET(默认:200M):单个数据包或生成/中间字符串的最大大小。MYSQL_FT_MIN_WORD_LEN(默认:4):FULLTEXT索引包含的最小词长。MYSQL_FT_MAX_WORD_LEN(默认:20):FULLTEXT索引包含的最大词长。MYSQL_AIO(默认:1):控制innodb_use_native_aio设置,用于修复原生AIO问题。MYSQL_TABLE_OPEN_CACHE(默认:400):所有线程打开的表数量。MYSQL_KEY_BUFFER_SIZE(默认:32M或可用内存的10%):索引块缓冲区大小。MYSQL_SORT_BUFFER_SIZE(默认:256K):排序操作使用的缓冲区大小。MYSQL_READ_BUFFER_SIZE(默认:8M或可用内存的5%):顺序扫描使用的缓冲区大小。MYSQL_INNODB_BUFFER_POOL_SIZE(默认:32M或可用内存的50%):InnoDB缓存表和索引数据的缓冲池大小。MYSQL_INNODB_LOG_FILE_SIZE(默认:8M或可用内存的15%):每个日志文件的大小。MYSQL_INNODB_LOG_BUFFER_SIZE(默认:8M或可用内存的15%):InnoDB写入日志文件的缓冲区大小。MYSQL_DEFAULTS_FILE(默认:/etc/my.cnf):指定替代配置文件路径。MYSQL_BINLOG_FORMAT(默认:statement):binlog格式,支持row和statement。MYSQL_LOG_QUERIES_ENABLED(默认:0):设为1启用查询日志。通过-v /host:/container挂载以下目录:
/var/lib/mysql/data:MySQL数据目录,用于持久化数据。注意:挂载主机目录到容器时,需确保目录权限正确,且目录的所有者和组与容器内运行的用户UID或名称匹配。
当镜像以--memory参数运行且未指定部分参数时,其值将根据可用内存自动计算:
MYSQL_KEY_BUFFER_SIZE:默认10%的可用内存。MYSQL_READ_BUFFER_SIZE:默认5%的可用内存。MYSQL_INNODB_BUFFER_POOL_SIZE:默认50%的可用内存。MYSQL_INNODB_LOG_FILE_SIZE:默认15%的可用内存。MYSQL_INNODB_LOG_BUFFER_SIZE:默认15%的可用内存。MYSQL_ROOT_PASSWORD环境变量设置密码后,允许远程访问;本地连接仍无需密码。MYSQL_ROOT_PASSWORD并重启容器。数据库用户(MYSQL_USER)和root用户的密码仅支持通过修改环境变量MYSQL_PASSWORD和MYSQL_ROOT_PASSWORD更改。通过SQL语句或其他方式修改会导致环境变量值与实际密码不匹配,容器启动时将重置为环境变量值。
通过MYSQL_DEFAULTS_FILE环境变量指定替代配置文件路径,默认值为/etc/my.cnf。例如:
bashdocker run -e MYSQL_DEFAULTS_FILE=/etc/mysql/my.cnf ...
可通过OpenShift的Source构建策略或独立的source-to-image(s2i)工具扩展镜像。以rhscl/mariadb-102-rhel7镜像(OpenShift中标签为mariadb:10.2)为例:
构建自定义镜像my-mariadb-rhel7,配置来自GitHub仓库:
bashoc new-app mariadb:10.2~[***] \ --name my-mariadb-rhel7 \ --context-dir=examples/extend-image \ --env MYSQL_OPERATIONS_USER=opuser \ --env MYSQL_OPERATIONS_PASSWORD=oppass \ --env MYSQL_DATABASE=opdb \ --env MYSQL_USER=user \ --env MYSQL_PASSWORD=pass
bashs2i build --context-dir=examples/extend-image [***] rhscl/mariadb-102-rhel7 my-mariadb-rhel7
扩展目录可包含以下子目录,文件将复制到容器的/opt/app-root/src目录,用户文件优先于默认文件:
mysql-cfg/:存放mysqld配置文件,启动时会运行envsubst以支持环境变量替换。mysql-pre-init/:存放*.sh脚本,在mysqld启动前执行。mysql-init/:存放*.sh脚本,在mysqld本地启动后执行,可使用${mysql_flags}连接数据库(如mysql $mysql_flags < dump.sql)。脚本中可使用以下变量:
$mysql_flags:连接本地mysqld的mysql工具参数。$MYSQL_RUNNING_AS_MASTER:容器以run-mysqld-master命令运行时定义。$MYSQL_RUNNING_AS_SLAVE:容器以run-mysqld-slave命令运行时定义。$MYSQL_DATADIR_FIRST_INIT:数据目录首次初始化时定义。通过扩展功能添加SSL证书和配置:
sslapp/mysql-certs/),存放证书文件(server-cert-selfsigned.pem、server-key.pem)。sslapp/mysql-cfg/ssl.cnf:ini[mysqld] ssl-key=${APP_DATA}/mysql-certs/server-key.pem ssl-cert=${APP_DATA}/mysql-certs/server-cert-selfsigned.pem
-v挂载目录或s2i构建新镜像。重要:升级前需备份所有数据。推荐通过
mysqldump导出数据,再导入新数据库;或启动新版本后立即运行mysql_upgrade(仅支持升级前一版本)。
通过MYSQL_DATADIR_ACTION变量控制数据目录升级行为,支持多个值(逗号分隔):
upgrade-warn(默认):检测到数据版本与当前版本不同时打印警告,仍启动容器;若mysql_upgrade_info文件不存在则创建,但不执行mysql_upgrade。upgrade-auto:数据来自前一版本时自动运行mysql_upgrade;来自更早/更新版本时打印警告。upgrade-force:无论数据版本,强制运行mysql_upgrade --force,可创建缺失的mysql_upgrade_info文件。optimize:运行mysqlcheck --optimize优化所有表。analyze:运行mysqlcheck --analyze分析所有表。disable:不执行数据版本相关操作。通过MYSQL_BINLOG_FORMAT环境变量设置binlog格式,支持row(行级)和statement(语句级,默认)。例如:
bashdocker run -e MYSQL_BINLOG_FORMAT=row ...
当容器以run-mysqld-master命令运行时,binlog将按指定格式记录变更。
mysqld守护进程日志输出到标准输出,可通过以下命令查看容器日志:
bashdocker logs <容器名称或ID>
镜像的Dockerfile及源码位于:[***]Dockerfile,RHEL7对应Dockerfile.rhel7,RHEL8对应Dockerfile.rhel8,Fedora对应Dockerfile.fedora。

manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务