mysql -V 显示的是客户端版本而非服务器版本,需通过连接实例后查看欢迎信息或执行 SHOW VARIABLES LIKE '%version%' 获取真实服务端版本及发行版标识。

mysql -V 显示的是客户端版本,不是服务器版本
很多人执行 mysql -V 后看到 mysql Ver 8.0.33 Distrib 8.0.33, for Linux (x86_64) 就以为这是 MySQL 服务端版本,其实它只反映你本地安装的 mysql 命令行客户端版本。如果客户端和服务器不在同一台机器、或版本不一致(比如本地是 8.0 客户端连远程 5.7 服务端),这个结果就完全不具备参考价值。
真正想确认服务端版本,必须连接到目标实例后再查——哪怕只是用 mysql -h 127.0.0.1 -u root -p 连本机,默认也会走 TCP,看到的欢迎信息里的 Server version 才是真实服务端版本。
-
mysql -V:只查客户端,适用于快速核对本地工具链 -
mysql --version:等价于-V,行为完全一样 -
mysql -v(小写 v):会尝试连接 localhost:3306,失败时仍输出客户端信息,但成功后还会显示服务端版本 —— 容易误判为“已验证服务端”,实际可能连的是错的实例
SELECT @@version 和 SELECT VERSION() 的区别
SELECT @@version 返回的是系统变量值,SELECT VERSION() 是调用内置函数。在绝大多数 MySQL 实例中,二者结果一致,比如都返回 8.0.33。但关键差异在于:
-
@@version是只读全局变量,受 SQL 模式或权限限制极小,只要能执行 SELECT 就大概率可查 -
VERSION()是函数,某些严格沙箱环境(如部分托管数据库、MySQL Router 后端)可能禁用非确定性函数,导致报错ERROR 1370 (42000): execute command denied to user - 二者都不包含编译参数,只提供主版本号;若需区分
MySQL Community Server和Percona Server,得看@@version_comment
mysqld -V 只能在服务端机器上运行,且不显示编译参数
mysqld -V(注意是 mysqld,不是 mysql)必须在 MySQL 服务进程所在机器上执行,且要求你有执行该二进制文件的权限。它输出格式类似:mysqld Ver 8.0.33 for Linux on x86_64 (MySQL Community Server)。
这个命令不显示编译参数(比如是否启用了 -DWITH_SSL=system 或 -DDEFAULT_CHARSET=utf8mb4),它只给出发行版标识和平台信息。真要查编译选项,得用:
-
SHOW VARIABLES LIKE 'version_compile%';→ 查version_compile_os、version_compile_machine SELECT @@version_compile_os, @@version_compile_machine;- 源码编译用户可翻
cmake_install.cmake或构建日志,但生产环境几乎没人这么干
SHOW VARIABLES LIKE '%version%' 是最稳妥的全量版本信息入口
这条语句一次列出所有带 version 的变量,包括:version、version_comment、version_compile_os、version_compile_machine、version_suffix 等。它不依赖函数权限,不区分客户端/服务端,只要登录成功就能执行。
特别注意 version_comment 字段:它常含关键线索,例如:
-
MySQL Community Server - GPL→ 官方社区版 -
Percona Server (GPL), Release relXX, Revision XXXXX→ Percona 分支 -
MySQL Enterprise Server - Commercial→ 商业版 -
Source distribution→ 源码编译安装(但无法反推 cmake 参数)
编译参数本身不会暴露在运行时变量里,想确认 SSL 库类型、字符集默认值、线程池开关等,得结合 SHOW VARIABLES LIKE '%ssl%'、SHOW VARIABLES LIKE 'character_set%' 单独查,而不是指望一个“版本命令”包打全部。


















