相信各人在工作学习中经常有需要查询 MySQL 数据库版本的环境,这里给各人先容几种在 MySQL 中查询数据库版本的方法以及每种方法适用的场景,相信总有一种可以帮到你。
另外,作者在写这篇文章的时候检察了全网多篇热门文章,发现了其中一些文章先容的方法的疏漏,所以末了另有一个章节告诉你网上有哪些方法是错误的,不要错过哦。
方法1:通过 SQL 查询
如果可以毗连上数据库并且可以实行 SQL,那么可以直接用 SQL 检察,下边的两种 SQL 都可以查询出来版本号:
写法1:
写法2:
实行 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 数据库实行之后查询出来的结果示例:
扩展:方法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 命令的时候,同时输出了客户端和服务端版本,不注意的话就轻易看错。本文正是盼望把一个简单场景梳理清楚,同时把坑点给说清楚,让各人在工作学习中遇到类似场景的时候少走弯路,盼望对各人有帮助。
本文是作者在参考了全网多篇文章之后,亲自进行了多种测试之后亲笔编写的,如果对您有帮助,欢迎点赞、收藏、转发、在看,您的支持将会给作者带来不断更新的动力!感谢您的关注,再见~
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |