Назад | Перейти на главную страницу

как получить версию mysql без запуска чего-либо, относящегося к самому mysql?

Есть много способов получить версию дистрибутива mysql, например:

select version();

или

show global variables like '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, согласно этому ссылка на сайт также хранит системные переменные.

Если у вас есть доступ к файлам журналов, вы можете прочитать файл .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

Это довольно сложный вопрос. Кстати, вот почему как системный администратор я был бы категорически против запуска серверов не из дистрибутива. По крайней мере, после установки сервера mysql его следует запускать и останавливать с помощью обычных системных механизмов: сценариев sysv init или аналогичных.

1) сервер работает и под каким именем (файла)? Если вы не имеете дело с намеренным затемнением, вы можете попробовать что-то похожее на ps auxww | grep mysqld который должен показать двоичный путь к серверу. Опять же, возможно, что в определенных двоичных выпусках или исходных кодах вместо этого он может содержать mysql-server или другое другое двоичное имя!

После того, как вы получили двоичный файл сервера, вы можете попытаться решить, какая это версия, либо:

1) анализ своего пути: очень часто сервер находится внутри каталога, который отражает его номер версии где-то в пути;

2) пытается найти свою конфигурацию или другие файлы, которые могут содержать информацию о версии где-то на своем пути.

3) попытка проанализировать двоичный файл с readelf или аналогичную команду и вывести ее версию из некоторых данных.

Но обратите внимание, что никто из вышеперечисленных методов - гарантированный успех.

И, вероятно, потерпит неудачу при слишком широком применении (разные дистрибутивы, разные версии mysql и т.д.)

PS. Я могу ошибаться, но я бы подумал mysql --version вернет версию клиента CLI mysql, не сервер.

В Linux во многих случаях устанавливается версия mysql, которая поставляется с настоящим дистрибутивом Linux.

Затем вы можете использовать инструменты запроса пакетов, чтобы определить основную версию.

В системах на основе Debian:

dpkg-query - l "mysql*" 

На Red Hat и других основанных на rpm:

rpm -qa | grep mysql

В зависимости от того, нужно ли вам что-то автоматизировать, это может быть улучшено за счет дополнительной фильтрации и / или спецификации.