Найти имя службы Windows экземпляра сервера MySql - PullRequest
1 голос
/ 15 декабря 2011

Имя службы Windows по умолчанию, которая содержит экземпляр сервера MySQL, - «MySQL». Но MySQL 5.5 позволяет пользователю указать любое имя для него после установки. Теперь мне нужно знать имя службы Windows MySQL, но я не могу понять, где мое приложение должно искать это имя. Я пытался сделать это имя необычным, а затем найти, где MySQL хранит его в системе. Но это необычное имя было только в списке служб реестра Windows. my.ini, my-огромный.ini и другие ini-файлы сервера MySQL не содержат информации о том, как называется служба Windows. Так где же MySQL хранит это имя? Версия для Windows: 7 X86 / X64, версия для MySQL: 5.5. Заранее спасибо.

Ответы [ 4 ]

4 голосов
/ 20 ноября 2013

Впервые в MySQL я столкнулся с тем же вопросом.Чтобы обойти это, я установил экземпляр shared_memory_base_name равным имени службы в ini:

# shared_memory
shared_memory_base_name=MySQLServiceName

Это делает его доступным через системную переменную @@ shared_memory_base_name.На самом деле я не включаю соединения с общей памятью, просто устанавливаю переменную.

Я не пробовал это в Linux, хотя, возможно, установка системной переменной @@ socket может дать то же самое.

Я понимаю, что уже поздно помогать вам, но кто-то может найти это полезным ...

1 голос
/ 28 мая 2018

Переменная MySql @@ pid_file содержит путь к файлу, содержит идентификатор процесса mysql instanse.

Считайте это значение и сопоставьте со службой Windows.

В моем коде c #:

public static string GetServiceNameFromPid(uint pid)
{
    string result = null;
    var searcher = new System.Management.ManagementObjectSearcher($"SELECT NAME FROM WIN32_SERVICE WHERE PROCESSID = {pid}");

    foreach (var managementBaseObject in searcher.Get()){
        if (result != null){
            throw new InvalidOperationException("PID correspond two or above service name");
        }
        result =(string) managementBaseObject["NAME"];
    }
    return result;
}
1 голос
/ 05 февраля 2018

Хранится в реестре. Мастер настройки экземпляра MySQL считывает реестр, который содержит имя, а также путь к соответствующей службе .exe.

Но я точно не знаю, как программно найти эти записи в реестре.

PS: Записи можно найти здесь:

Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MySQL[xy]

(xy - это версия: 57 для 5.7)

ServiceName хранится здесь в ключе «DisplayName» и пути к .exe в «ImagePath».

Примечание. Этот путь может содержать параметры запуска, например, путь к файлу my.ini.

0 голосов
/ 15 декабря 2011

MySQL нигде не нужно хранить это имя. Процесс сервера запускается контроллером службы Windows, а клиент связывается с сервером через сеть, поэтому ему также не нужно знать имя. Как вы обнаружили, единственное место, где это появится, - это список служб в реестре. Учтите, что в Linux у процессов-демонов нет специальных имен, как у служб Windows. Имя службы является артефактом работы в Windows, и MySQL не знает об этом или не заботится о нем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...