相信大家在工作学习中经常有需要查询 mysql 数据库版本的情况,这里给大家介绍几种在 mysql 中查询数据库版本的方法以及每种方法适用的场景,相信总有一种可以帮到你。
另外,作者在写这篇文章的时候查看了全网多篇热门文章,发现了其中一些文章介绍的方法的疏漏,所以最后还有一个章节告诉你网上有哪些方法是错误的,不要错过哦。
方法1:通过 sql 查询
如果可以连接上数据库并且可以执行 sql,那么可以直接用 sql 查看,下边的两种 sql 都可以查询出来版本号:
写法1:
select version();
写法2:
select @@version;
执行 sql 的查询结果示例:
+------------+ | version() | +------------+ | 5.7.16-log | +------------+
方法2:通过命令行
如果可以直接通过命令行连接到数据库。
方法2.1:命令行刚连上数据库时
在命令行使用 mysql 命令连接数据库的时候,刚连上之后,从输出的信息中可以看到数据库的版本,示例:
> mysql -uroot -p welcome to the mysql monitor. commands end with ; or g. your mysql connection id is 5 server version: 5.7.16-log mysql community server (gpl) copyright (c) 2000, 2016, oracle and/or its affiliates. all rights reserved. oracle is a registered trademark of oracle corporation and/or its affiliates. other names may be trademarks of their respective owners. type 'help;' or 'h' for help. type 'c' to clear the current input statement. mysql>
其中 server version: 5.7.16-log mysql community server (gpl) 这一行我们就可以看出 mysql 数据库的版本。
方法2.2:使用 status 命令
如果我们已经通过 mysql 命令连接上了数据库,还可以通过 status 命令或者 s 查看数据库的版本信息以及数据库的相关状态。
示例1:
mysql> status -------------- mysql ver 8.0.33 for win64 on x86_64 (mysql community server - gpl) <--------------- 这里是 mysql 客户端(命令行工具)的版本 connection id: 5 current database: current user: root@localhost ssl: not in use using delimiter: ; server version: 5.7.16-log mysql community server (gpl) <--------------- 这里才是 mysql 服务端的版本 protocol version: 10 connection: localhost via tcp/ip server characterset: utf8 db characterset: utf8 client characterset: utf8 conn. characterset: utf8 tcp port: 3306 uptime: 2 hours 40 min 24 sec threads: 2 questions: 213 slow queries: 0 opens: 111 flush tables: 1 open tables: 104 queries per second avg: 0.022
示例2:
mysql> s -------------- mysql ver 8.0.33 for win64 on x86_64 (mysql community server - gpl) <--------------- 这里是 mysql 客户端(命令行工具)的版本 connection id: 5 current database: current user: root@localhost ssl: not in use using delimiter: ; server version: 5.7.16-log mysql community server (gpl) <--------------- 这里才是 mysql 服务端的版本 protocol version: 10 connection: localhost via tcp/ip server characterset: utf8 db characterset: utf8 client characterset: utf8 conn. characterset: utf8 tcp port: 3306 uptime: 2 hours 40 min 24 sec threads: 2 questions: 213 slow queries: 0 opens: 111 flush tables: 1 open tables: 104 queries per second avg: 0.022
扩展:方法3:通过 version_comment 辨别开源版本和魔改版本
show variables like 'version_comment';
这个方法实际上查看的是 mysql 的版本备注信息。
示例:
+-----------------+------------------------------+ | variable_name | value | +-----------------+------------------------------+ | version_comment | mysql community server (gpl) | +-----------------+------------------------------+
version_comment 实际上是数据库的一个全局变量,对于开源社区版本来说,这个变量的值都是一样的。但是有一些基于 mysql 开发或者和 mysql 兼容的数据库,当需要和 mysql 进行区分的时候,就可以根据这个全局变量来区分。
比如 tidb 数据库执行之后查询出来的结果示例:
tidb server (apache license 2.0) community edition, mysql 5.7 compatible
starrocks 数据库执行之后查询出来的结果示例:
starrocks version 3.0.3
扩展:方法4:查看所有和版本相关的信息
前边我们介绍了通过全局变量 version_comment 查看 mysql 具体的编译版本的方法,那么你是否会想?mysql 中和版本相关的信息还有别的吗?接下来就介绍一种方法,教你把全局变量中和版本相关的信息一网打尽。
执行下边这个 sql 可以查看所有变量名称中带有 version 的变量。
show global variables like '%version%';
执行后的示例结果:
+-------------------------+------------------------------+ | variable_name | value | +-------------------------+------------------------------+ | innodb_version | 5.7.16 | | protocol_version | 10 | | slave_type_conversions | | | tls_version | tlsv1,tlsv1.1 | | version | 5.7.16-log | | version_comment | mysql community server (gpl) | | version_compile_machine | x86_64 | | version_compile_os | win64 | +-------------------------+------------------------------+
全网纠错
纠错1:mysql --help 或者 mysql -v 方式
有的文章会教你用 mysql --help 或者 mysql -v 或 mysql --version 的方式查看数据库版本。
但是这种方式,实际上查看的是 mysql 客户端(命令行工具)的版本,而不是 mysql 数据库服务端的版本。
纠错2:通过 rpm 等包管理工具查看版本
有的文章会教你使用 rpm -qa | grep mysql 这种方式查看服务器安装的版本。
这种方法的限制条件在于:
(1)这种方法只能在安装 mysql 数据库的服务器上执行。
(2)仅适用于使用 rpm 包管理工具的部分 linux 操作系统
这种方法可能的坑点在于:
服务器上实际运行的 mysql 和包管理工具查询出来的可能并不是同一个 sql。因为这种方法查询出来的仅仅是通过包管理工具安装的 sql 的版本。但是实际运行的 mysql 有可能是通过压缩包离线安装的并不是通过包管理工具安装的,这种情况下服务器上可能同时有多种版本的 mysql。甚至有可能是通过 docker 等虚拟化软件运行的,所以要避免被这种情况给误导了。
后记
为什么要写这篇文章?大家在工作生活中遇到的场景总是纷繁复杂的,即使是简单的问题也往往会有一些坑点,也往往是这种坑点,让人稍不注意就会绕了弯路,比如上边使用 status 命令的时候,同时输出了客户端和服务端版本,不注意的话就容易看错。本文正是希望把一个简单场景梳理清楚,同时把坑点给说清楚,让大家在工作学习中遇到类似场景的时候少走弯路,希望对大家有帮助。
到此这篇关于mysql 获取版本号的 n 种方法(全网最全以及避坑大全)的文章就介绍到这了,更多相关mysql 获取版本号内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论