Есть много способов получить версию дистрибутива mysql, например:
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, согласно этому ссылка на сайт также хранит системные переменные.
Если у вас есть доступ к файлам журналов, вы можете прочитать файл .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
В зависимости от того, нужно ли вам что-то автоматизировать, это может быть улучшено за счет дополнительной фильтрации и / или спецификации.