Docker容器中mysql:8.0.30缺失mysqlbinlog命令,旧版本为何存在?
问题描述
- 运行MySQL容器:
docker run -d --name=mysql-server -p 3306:3306 -e MYSQL_ROOT_PASSWORD=t123456 mysql:8.0.30 - 执行查找命令:
find / -name mysqlbinlog,返回结果:
sh-4.4# find / -name mysqlbinlog find: '/proc/1/map_files': Permission denied
- 直接运行mysqlbinlog命令失败:
sh-4.4# mysqlbinlog sh: mysqlbinlog: command not found
更新
将MySQL容器版本更换为8.0.23后,mysqlbinlog命令可正常找到。请问为何8.0.30这类新版本容器中缺失mysqlbinlog命令?
原因说明
从MySQL 8.0.26版本开始,官方mysql镜像做了瘦身优化,把mysqlbinlog这类客户端工具从主镜像里剥离出来,放到了单独的带-clients后缀的镜像(比如mysql/mysql-server:8.0.30-clients)中。这么做是为了缩小主镜像体积,只保留数据库运行必需的核心组件。
如果要在新版本主镜像容器里使用mysqlbinlog,有两种解决办法:
- 直接使用带
-clients后缀的镜像启动容器 - 在已运行的主镜像容器内安装客户端工具包:
- Debian/Ubuntu系镜像:执行
apt update && apt install -y mysql-client - RHEL/CentOS系镜像:执行
yum install -y mysql
- Debian/Ubuntu系镜像:执行
内容的提问来源于stack exchange,提问作者zhenghao li
相关产品推荐
相关产品推荐

