Windows 10: установка СУБД «MySQL» 8.0, часть 3

Sep 30, 2022 13:15

Начало: часть 1, часть 2.

В предыдущей части я описал, как закончил установку и настройку СУБД «MySQL» на мой компьютер, работающий под управлением операционной системы «Windows 10» (64-разрядной). В этом посте я опишу, как можно настроить запуск и останов сервера этой СУБД, как провести первые простейшие проверки ее работоспособности.

Напомню, при настройке СУБД «MySQL» я выбрал опцию работы сервера не в режиме службы (service) «Windows» (там может быть два варианта: служба с автоматическим запуском при загрузке операционной системы и служба с запуском вручную), а в режиме с запуском и остановом вручную. Причины такого выбора были описаны в предыдущем посте.

В процессе настройки СУБД «MySQL» с помощью программы-установщика «MySQL Installer - Community» эта программа-установщик запустила сервер этой СУБД автоматически. Я описывал это в предыдущем посте. Для чистоты эксперимента я перезагрузил операционную систему. После этого, естественно, с учетом вышеизложенного, сервер СУБД «MySQL» оказывается не запущен, требуется запуск вручную, как и было мною запланировано.

Еще раз коротко о том, как работает СУБД «MySQL»

Я об этом уже писал ранее, но напомню, что СУБД «MySQL» работает по технологии «клиент-сервер». Под словами «клиент» и «сервер» подразумеваются не компьютеры в компьютерной сети, а программы, которые могут взаимодействовать друг с другом как на одном и том же компьютере, так и находясь на разных компьютерах в компьютерной сети. Я нарисовал схему работы этой СУБД (впрочем, так работают многие СУБД, не только рассматриваемая):



В моем случае всё это находится на одном и том же моем компьютере. В случае серьезного приложения все части этой схемы могут быть разнесены на разные компьютеры: базы данных на отдельном компьютере (компьютерах), сервер СУБД - на отдельном компьютере (в этом случае этот компьютер тоже могут называть «сервером») и так далее.

Команда запуска СУБД «MySQL» вручную из лога программы-установщика

В предыдущей части я писал, что подсмотрел команду запуска сервера СУБД в логе программы-установщика (в предыдущей части описано, где посмотреть этот лог). Конечно, все возможные команды всех программ, входящих в СУБД «MySQL», подробно описаны в документации (на английском языке) этой СУБД, но в логе вы можете получить образец нужной команды с параметрами именно для своего компьютера, с правильными путями к расположению исполняемого файла и файла с настройками. Вот как выглядит та команда (она уже была показана в предыдущей части):

> "C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqld.exe" --defaults-file="C:\ProgramData\MySQL\MySQL Server 8.0\my.ini" --console

Эта команда работает хоть в программе-оболочке «cmd.exe», хоть в программе-оболочке «Windows PowerShell» (или в «PowerShell»). Можно прямо скопировать ее из блока выше и вставить в окно с командной строкой. (Копировать следует без символа > в начале. Этот символ тут обозначает собой строку приглашения в программе-оболочке.)

При этом следует учесть несколько важных моментов, описанных ниже!

Во-первых, путь к исполняемому файлу сервера СУБД «mysqld.exe», как видно из команды выше, у меня содержит символы пробела. Поэтому он взят в кавычки, иначе команда будет интерпретирована неверно. Если в пути к исполняемому файлу нет символов пробела, то эти кавычки можно не ставить.

Во-вторых, в программе-оболочке «Windows PowerShell» (или в «PowerShell») взятый в кавычки путь к исполняемому файлу будет интерпретирован неверно. Нам нужно, чтобы программа-оболочка запустила указанный исполняемый файл с указанными параметрами. А взятый в кавычки путь к исполняемому файлу в этой программе-оболочке будет интерпретирован просто как строка, а не как путь к исполняемому файлу. Чтобы всё сработало так, как нам требуется, в начале команды следует добавить оператор вызова & (этот символ называют амперсандом). Вот как у меня выглядит запуск вышеприведенной команды в двух разных программах-оболочках:

1. cmd.exe

C:\> "C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqld.exe" --defaults-file="C:\ProgramData\MySQL\MySQL Server 8.0\my.ini" --console



2. «PowerShell» версии 7 (обратите внимание на оператор вызова & в начале команды)

PS C:\> &"C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqld.exe" --defaults-file="C:\ProgramData\MySQL\MySQL Server 8.0\my.ini" --console



В-третьих, как можно было заметить на иллюстрациях выше, программы-оболочки я запускал от имени администратора операционной системы. Это нужно потому, что у меня сервер СУБД «MySQL» во время своей работы изменяет разные файлы в папке C:\ProgramData\MySQL\MySQL Server 8.0\. Например, он меняет файлы служебных баз данных, помещенных в эту папку. Кроме этого, сервер может писать в эту папку различные логи (описания своих действий). А, так как владельцем данной папки у меня является администратор операционной системы, то для записи в эту папку нужны права администратора операционной системы (не путать с администратором баз данных, DBA). Если вышеприведенные команды запускать из программ-оболочек, запущенных от имени обычного пользователя, то сервер СУБД запустится, выдаст несколько сообщений и прекратит работу.

(Тут возможны разные пути обхода этой проблемы. Например, можно подправить права доступа к папке «ProgramData». Или можно установить сервер СУБД «MySQL» вручную, без использования программы-установщика, и поместить служебные базы данных и папку для логов сервера в местоположение, в которое обычный пользователь, не администратор, имеет право записывать. Однако, я предпочитаю действовать общепринятыми способами работы в операционных системах «Windows», ведь установленный порядок работы придуман не просто так, есть определенные причины такого устройства, в частности, касающиеся безопасности.)

Что с параметрами этой команды? В данном случае их два: --defaults-file и --console. В первом из этих параметров передается путь к файлу с настройками СУБД «MySQL». Напомню, этот файл был создан программой-установщиком при настройке СУБД «MySQL», это было описано в предыдущей части. Видно, что те параметры используются: например, используется порт TCP/IP 3306 (см. в сообщениях сервера СУБД при его запуске на иллюстрациях), который указан в файле настроек.

Второй параметр --console, как видно, является параметром-флагом. Его указывать необязательно. Если он присутствует, сервер СУБД при своем запуске выдает сообщения в окно консоли. Если этот параметр отсутствует, сервер всё равно будет запущен, но при этом никаких сообщений в консоль выводится не будет, эти сообщения будут выведены в файл-лог сервера СУБД (у меня это файл C:\ProgramData\MySQL\MySQL Server 8.0\Data\ILYACOMP.err, имя файла без расширения - это имя компьютера, на котором работает данный сервер СУБД). Вот как это выглядит у меня в программе-оболочке «PowerShell» версии 7:



Как видно на иллюстрации выше, я ввел рассматриваемую команду без параметра-флага --console. Кажется, что ничего не произошло, только мигает курсор, показывая, что запущенная программа (сервер СУБД) не зависла, а работает; только она не выводит никаких сообщений в окно консоли.

(Далее в этом посте я буду показывать примеры команд только для программ-оболочек «Windows PowerShell» и «PowerShell». Программа-оболочка «cmd.exe» морально устарела, хоть она пока еще доступна даже в самых новейших операционных системах «Windows».)

Проверка того, что сервер СУБД успешно запущен

При тестировании вышеописанной команды запуска сервера СУБД я каждый раз проверял успешность запуска несколькими способами.

Один из этих способов - использовать диспетчер задач «Windows» (это одна из компонент данной операционной системы). Если сервер СУБД запустился успешно, в списке процессов на вкладке «Подробности» окна диспетчера задач «Windows» появится процесс с именем «mysqld.exe». Вот как это выглядит у меня (диспетчер задач я запускаю комбинацией клавиш Ctrl+Shift+Esc):



Сортировку в списке процессов в диспетчере задач я ставлю по размеру используемой процессом памяти. Мне так удобнее. Сразу видно самые «прожорливые» программы.

Другой способ проверки - запустить какой-нибудь из клиентов СУБД и обратиться из него к серверу СУБД. Как я описывал ранее, в продукт «MySQL Server 8.0.30», который я установил, входит целый ряд программ (исполняемых файлов). Эти файлы у меня можно просмотреть в следующем местоположении:

C:\Program Files\MySQL\MySQL Server 8.0\bin\

В этой папке хранится как исполняемый файл сервера СУБД mysqld.exe, так и ряд исполняемых файлов программ-клиентов СУБД, используемых для разных нужд: mysql.exe, mysqlshow.exe, mysqladmin.exe и так далее.

Для проверки я использую программу-клиент СУБД mysql.exe, из которой, в частности, можно посылать серверу СУБД запросы на языке SQL.

Следует иметь в виду, что для доступа из программы-клиента СУБД к серверу СУБД понадобится ввести имя пользователя и пароль этого пользователя. Напомню, что на этапе настройки СУБД «MySQL» с помощью программы-установщика я ввел пароль администратора баз данных, учетная запись которого имеет имя «root». Эти имя и пароль и следует использовать.

Предположим, что сервер СУБД не запустился (я специально выключил сервер СУБД, чтобы создать нужную ситуацию). Вот как при этом у меня выглядит попытка подключиться к серверу СУБД из программы-клиента СУБД mysql.exe:

PS C:\> &"C:\Program Files\MySQL\MySQL Server 8.0\bin\mysql.exe" -u root -p

Параметр -u используется для ввода имени пользователя (root), параметр -p используется для того, чтобы дать понять программе-клиенту, что следует запросить пароль. (Следует понимать, что вводить пароль напрямую в самой команде небезопасно, его может увидеть кто-то посторонний. При запросе пароля программой-клиентом при его вводе пользователем пароль будет прикрыт звездочками. См. иллюстрацию ниже.)



Для запуска программ-клиентов СУБД не требуется запускать программу-оболочку от имени администратора операционной системы (это видно на иллюстрации выше), так как программы-клиенты не записывают ничего в папку «ProgramData», для записи в которую требуются права администратора операционной системы серверу СУБД.

Как видно на иллюстрации выше, программа-клиент mysql.exe выдала ошибку: «ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost:3306' (10061)». Вообще причин этой ошибки может быть множество, но в данном случае я эту причину знаю точно: программа-клиент не может создать соединение с сервером СУБД потому, что сервер выключен (я сам его и выключил, как было указано выше).

Теперь включим сервер СУБД (как это сделать, было описано выше) и снова запустим программу-клиент mysql.exe с помощью той же команды, которая использовалась выше. Вот как это выглядит у меня:



Как видно на иллюстрации выше, теперь программа mysql.exe сумела успешно создать соединение с сервером СУБД. Появилась строка-приглашение mysql>, в которой можно вводить различные команды самой программе-клиенту, а также посылать на сервер СУБД запросы на языке SQL.

Запуск сервера СУБД как самостоятельного процесса

Во всех описанных выше случаях запуска сервера СУБД мы запускали его командой в программе-оболочке (cmd.exe, «Windows PowerShell» или «PowerShell»). При таком запуске процесс сервера СУБД не является самостоятельным и зависит от работы соответствующей программы-оболочки. Например, если запустить сервер СУБД одним из описанных выше способов, а потом закрыть программу-оболочку, то процесс сервера СУБД тоже будет прекращен и сервер СУБД не будет работать.

Конечно, можно не закрывать окно программы-оболочки. Можно просто свернуть это окно в панель задач (taskbar) операционной системы, пусть там болтается, пока требуется запущенный сервер СУБД. Однако, это неудобно. Это окно в панели задач отвлекает. Кроме того, это окно можно случайно закрыть.

Гораздо удобнее будет, если процесс сервера СУБД запустить независимо от программы-оболочки, из которой запускается этот процесс. В программе-оболочке «PowerShell» для этого существует командлет Start-Process. В итоге у меня получилась следующая команда:

PS C:\> Start-Process -FilePath "C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqld.exe" -ArgumentList "--defaults-file=`"C:\ProgramData\MySQL\MySQL Server 8.0\my.ini`"" -Verb RunAs -WindowStyle Hidden

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

В параметр -ArgumentList передается строка с параметрами запускаемого исполняемого файла. Тут есть тонкость: мы обособляем передаваемую в параметр строку кавычками, но внутри передаваемой строки тоже используются кавычки. Если внутренние кавычки не экранировать, команда будет интерпретирована неверно. Экранирование внутренних кавычек производим с помощью символа ` (backtick, по-русски «машинописный обратный апостроф»).

Вышеописанную команду я запускаю из программы-оболочки от имени обычного пользователя. Но, как уже было сказано ранее, сервер СУБД требует в моем случае запуска от имени администратора операционной системы, чтобы иметь право записи в папку «ProgramData». Для повышения прав доступа с прав обычного пользователя до прав администратора операционной системы я использую параметр -Verb со значением RunAs. После запуска этой команды операционная система на всякий случай задаст вопрос - точно ли пользователь хочет дать повышенные права запускаемой программе («Разрешить этому приложению вносить изменения на вашем устройстве?»). На этот вопрос я отвечаю нажатием на кнопку «Да».

Хоть запускаемый процесс сервера СУБД теперь будет самостоятельным (не будет зависеть от работы программы-оболочки, из которой он запущен; эту исходную программу-оболочку можно безболезненно закрыть и прекращения работы сервера СУБД не произойдет), но с его запуском будет открыто отдельное окно специально для запущенного процесса. Такова особенность работы операционных систем «Windows». Просто так избавиться от этого окна не получится. Легче всего это окно просто скрыть, что выполняется с помощью параметра -WindowStyle со значением Hidden в вышеприведенном командлете.

Итак, мы добились запуска сервера СУБД как самостоятельного процесса. Если исходное окно программы-оболочки, из которой был запущен командлет, закрыть, то в панели задач операционной системы не останется никаких лишних кнопок-окон, а сервер СУБД mysqld.exe будет исправно функционировать.

Создание ярлыка для запуска сервера СУБД

Идем дальше. Открывать при каждом запуске сервера СУБД программу-оболочку, вписывать туда нужную команду для запуска сервера СУБД, запускать ее, а потом закрывать программу-оболочку - это, в принципе, тоже лишняя работа. От лишних действий можно избавиться, создав на своем рабочем столе операционной системы соответствующий ярлык для запуска сервера СУБД. Главная проблема при этом - правильно написать команду, которую этот ярлык будет запускать.

Изначально ярлык будем создавать для запуска программы-оболочки «PowerShell» версии 7. Эта программа у меня на компьютере установлена в следующем местоположении:

C:\Program Files\PowerShell\7\pwsh.exe

Ярлык для запуска этой программы на рабочем столе можно создать, пройдя в это местоположение в проводнике «Windows» и щелкнув правой кнопкой мыши по указанному исполняемому файлу. В открывшемся контекстном меню следует выбрать пункт «Создать ярлык». После этого операционная система сообщит, что не может создать ярлык в данной папке и предложит поместить его на рабочий стол. На это предложение следует ответить нажатием на кнопку «Да».

После этого можно открыть свойства полученного на рабочем столе ярлыка (из конекстного меню ярлыка по правой кнопке мыши), в открывшемся окне выбрать вкладку «Ярлык» и заменить содержимое поля «Объект» на следующее:

"C:\Program Files\PowerShell\7\pwsh.exe" -Command "Start-Process -FilePath \"C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqld.exe\" -ArgumentList \"--defaults-file=`\"C:\ProgramData\MySQL\MySQL Server 8.0\my.ini`\"\" -Verb RunAs -WindowStyle Hidden"

В начале этой команды в кавычках дан путь к исполняемому файлу программы-оболочки. Это и есть объект, который будет запущен при двойном щелчке мышью на ярлык.

Далее с помощью параметра -Command программе-оболочке передается команда, которую ярлык запустит из программы-оболочки. Тут есть тонкость: параметр -Command принимает команду для запуска из программы-оболочки в виде строки, которую мы обособляем кавычками. Эта команда и есть та самая команда, которая уже была описана в предыдущем разделе этого поста. В этой команде, в свою очередь, тоже содержатся кавычки, которые следует экранировать, иначе содержимое поля «Объект» ярлыка будет интерпретировано неверно. Как видно в блоке кода выше, все внутренние кавычки экранируем символом \ (backslash, по-русски «обратная косая черта»).

Теперь у нас на рабочем столе есть ярлык, дважды щелкнув на который мышью мы запустим сервер СУБД «MySQL». При этом у нас не останется никаких лишних окон в панели задач операционной системы, а сервер будет функционировать.

Корректный останов сервера СУБД «MySQL»

Выше я описывал прекращение работы сервера рассматриваемой СУБД просто закрытием окна программы-оболочки, из которой этот сервер был запущен (в случае, когда сервер запускался напрямую, а не созданием самостоятельного процесса посредством командлета Start-Process).

Так делать неправильно! Дело в том, что в момент такого закрытия сервер СУБД может быть занят работой с базами данных. Внезапное закрытие сервера СУБД в середине транзакции может повлечь повреждение данных в этих базах данных. Для корректного останова СУБД можно воспользоваться следующей командой (используется программа-клиент СУБД mysqladmin.exe):

PS C:\> &"C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqladmin.exe" -u root -p shutdown

В результате этой команды сервер СУБД сначала закончит все транзакции и только потом прекратит работу.

Создадим на рабочем столе ярлык для останова сервера СУБД с помощью этой команды. Создание ярлыка выполняется точно так же, как было описано выше для ярлыка запуска сервера СУБД. Содержимое поля «Объект» ярлыка (на вкладке «Ярлык») нужно заменить следующим:

"C:\Program Files\PowerShell\7\pwsh.exe" -Command "&\"C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqladmin.exe\" -u root -p shutdown"

Эта команда должна быть понятна с учетом объяснений, данных ранее для ярлыка запуска сервера СУБД.

Теперь у нас на рабочем столе есть ярлык для запуска сервера СУБД и ярлык для останова сервера СУБД. Можно начинать работу, изучение и эксперименты с самой СУБД «MySQL».

Инструмент, Образование, Сайтостроение, Программирование, Английский язык

Previous post Next post
Up