如何在不运行与 mysql 本身相关的任何程序的情况下获取 mysql 的版本?

如何在不运行与 mysql 本身相关的任何程序的情况下获取 mysql 的版本?

有很多方法可以检索 mysql 发行版的版本,例如:

  • 通过以下方式在服务器中运行 SQL 语句:

select version();

或者

show global variables like 'version';

  • mysqld --version

我的情况是预编译的二进制 MySQL 发行版/从源 MySQL 安装编译,因此从系统的包管理器获取版本是不可能的,此外出于稳定性和安全性的考虑,我没有使用上述方法的特权。

这可能看起来有点奇怪,但我想知道这些版本信息存储在哪里,我可以通过读取文件来提取它们吗?或者我需要以某种方式剖析二进制文件来获取信息?

进步: 我注意到%VERSION%根据这个变量是一个系统变量关联,并存储在information_schema / performance_schema中,然后我查看了/ var / lib / mysql / performance_schema,但只有一个global_variable.frm文件不包含任何数据,而我可以通过以下方式完美地获取版本信息

use performance_schema; 
select * from global_variables where variable_name = 'version';

[1] performance_schema,根据这个关联还存储系统变量。

答案1

如果您有权访问日志文件,则可以读取 .err 文件。它包含如下一行:14:07:26 [Note] /usr/sbin/mysqld (mysqld 10.0.31-MariaDB) starting as process

此外,如果允许 telnet,您可以执行此操作telnet database_server 3306,它也会显示版本。如果不允许 telnet,则 nmap 可以提供类似信息,但这同样取决于您的防火墙和网络设置。

# nmap -sV -p 3306 my-data-base-server

Starting Nmap 4.75 ( http://nmap.org ) at 2018-01-22 09:51 CET
Interesting ports on my-data-base-server (192.168.xxx.xxx):
PORT     STATE SERVICE VERSION

3306/tcp open  mysql   MySQL 5.5.5-10.0.33-MariaDB
MAC Address: 5x:5x:00:Fx:8C:03 (QEMU Virtual NIC)

Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 0.33 seconds

答案2

在 Linux 上,很多情况下安装的 mysql 版本是实际 Linux 发行版附带的版本。

然后您可以使用包查询工具来确定主要版本。

在基于 Debian 的系统上:

dpkg-query - l "mysql*" 

在 Red Hat 和其他基于 rpm 的版本上:

rpm -qa | grep mysql

根据您是否需要自动化某些操作,可以通过进一步过滤和/或规范来增强功能。

答案3

这是一个相当复杂的问题。顺便说一句,这就是为什么作为系统管理员,我非常反对运行非发行版的服务器。至少在安装 mysql 服务器后,应该通过通常的系统机制启动和停止它:sysv init 脚本或类似脚本。

1) 服务器是否正在运行,使用什么(文件)名称?如果您没有处理故意模糊的问题,您可以尝试类似的东西, ps auxww | grep mysqld它应该显示服务器二进制路径。不过,在某些二进制版本或源代码编译下,它可能包含“mysql-server”或其他不同的二进制名称!

获得服务器二进制文件后,您可以尝试确定它是哪个版本,方法是:

1)分析其路径:服务器通常位于目录内,该目录在路径的某处反映其版本号;

2)尝试在其路径中的某处找到其配置或其他可能包含版本信息的文件。

3)尝试使用或类似命令分析二进制文件readelf并从其中的一些数据推断其版本。

但请注意没有任何上述所有方法都一定能成功。

如果应用范围太广(不同的发行版,不同的 mysql 版本等),可能会失败。

PS. 我可能记错了,但我原本以为mysql --version会返回 mysql CLI 客户端的版本,不是服务器。

相关内容