最准的是登录后执行select version(),它返回服务器真实版本;mysql -v和mysql --version只显示客户端版本,两者等价且不连接数据库;status命令则同时显示客户端和server version。

直接看命令行输出最准,但必须分清“客户端版本”和“服务器版本”——两者可能不一致,尤其在远程连接或容器化部署时。
mysql -V 和 mysql --version 查的是客户端版本
这两个命令完全等价,只依赖本地安装的 mysql 可执行文件,不连数据库、不读配置、不查服务状态。
- 输出形如
mysql Ver 8.0.33 for Linux on x86_64 (MySQL Community Server),其中8.0.33是客户端工具版本 - 如果你用的是 Docker 容器里的客户端(比如
mysql:8.0镜像),它显示的是镜像里打包的客户端版本,不是宿主机或目标服务器的版本 - Windows 下若提示
'mysql' is not recognized,说明没加到PATH,需先 cd 到bin/目录再运行
SELECT VERSION() 和 SELECT @@version 返回服务器真实版本
这是唯一能确认你正在操作的 MySQL 实例到底跑着什么版本的方式,必须已成功登录。
- 执行
SELECT VERSION();最简洁,只返回一列纯版本字符串,比如8.0.32 -
SELECT @@version;效果一样,但属于系统变量访问,语义上更明确指向服务端状态 - 注意:如果登录时指定了
-h 192.168.1.100,那结果就是远程服务器的版本,不是本机的 - 某些旧版 MySQL(如 5.5)不支持
@@version,优先用VERSION()函数
STATUS 或 \s 命令一次看到客户端+服务器双版本
登录 MySQL 后输入 STATUS(或简写 \s),终端会打印一大段信息,关键字段非常直观:
-
mysql Ver ...开头是客户端版本(对应mysql -V输出) -
Server version: ...才是你真正连接的数据库服务版本 - 还会附带字符集、协议、连接方式等上下文,排查兼容性问题时比单查
VERSION()更有用 - 如果输出里没有
Server version行,说明连接失败或权限不足(比如用户没USAGE权限)
mysqld --version 和 systemctl status mysql 适用于服务端自查
当你只有服务器访问权限、没装客户端,或想确认后台进程实际加载的是哪个二进制文件时,用这些方法:
-
mysqld --version查的是mysqld主程序版本,一般和服务端版本一致,但不经过网络栈,也不受配置影响 -
systemctl status mysql(或mysqld)在 systemd 系统中常带版本号,比如mysql.service - MySQL Community Server v8.0.35;但有些发行版精简了描述,得靠journalctl -u mysql | head -n 10翻日志找启动行 - 别依赖
error.log里的版本信息——日志可能被轮转、清理,或启动失败根本没写入
最容易被忽略的一点:客户端和服务端版本差一个大版本(比如客户端 8.0,服务端 5.7),mysql 命令仍可能连上,但部分语法(如 JSON_TABLE)或认证插件(caching_sha2_password)会静默失效。务必以 Server version 为准,而不是欢迎消息第一行或 mysql -V 的输出。











