https://dev.mysql.com/downloads/mysql/
https://dev.mysql.com/downloads/mysql/

Вместо предисловия

Здесь и далее речь пойдет исключительно о версии Community. Но вполне очевидно, что все сказанное будет актуально и для продукта коммерческой эксплуатации. Материал ориентирован на тех, кто желает постичь основы управления базами данных, в частности, MySQL.

Необходимые компетенции для работы с материалом: базовые навыки работы с командной строкой (консолью) MS Windows и самой операционной системой ( создание и удаление каталогов и файлов, изменение расширений файлов, копирование, вставка, удаление объектов ), 1-2 драгоценных часа жизненного цикла :-).

В статье даны разнообразные уточнения и ссылки на разъясняющий материал - не пропадете :-). Вопросы, уточнения и комментарии читателей приветствуются.

Мотивация

Покопавшись в Рунете, нашел всего несколько статей на одноименную тематику. Наиболее полноценная из них на мой взгляд опубликована в 2016 г. в Блоге о базах данных. Автор достаточно полноценно раскрывает особенности установки noinstall-версии MySQL 5. Что ж, думаю, будет полезно освежить контент свежим материалом.

Почему Windows и зачем вообще нужен весь этот геморрой с noinstall-версией ( без автоустановщика ), консолью и ручной настройкой конфигурации сервера при том, что установщик с графическим интерфейсом весьма дружелюбен и многократно упрощает задачу? Практическая сторона реализации даст множество ответов на поставленные вопросы, и каждый из них будет четко соответствовать поставленной задаче и условиям ее выполнения. Самые очевидные проблемы:

  • Windows, как ни крути, - просто и доступно, а еще говорят: "Неважно, на чем программировать (на каком языке и в какой операционной системе), главное, чтобы было удобно и понятно.",

  • отсутствие графической оболочки в операционной системе,

  • удаленная работа с сервером через консоль,

  • манипуляции с исполняемыми и конфигурационными файлами СУБД без или до ее установки,

  • изучение файловой структуры СУБД и содержимого файлов в познавательных целях,

  • и прочие.

Итак, мотивация получена, можно приступать к разбору структуры СУБД.

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

Директории и распаковка/установка

Традиционно файлы сервера MySQL принято распаковывать в директорию С:\mysql. При этом согласно официальной документации для размещения файлов того же сервера автоматический установщик по default'у использует путь C:\Program Files\MySQL. Уже интересно... Если необходимо разместить файлы сервера в другой директории, официальное руководство рекомендует скорректировать путь к каталогу во время запуска установщика, или прописать его в конфигурационном файле заранее ( https://dev.mysql.com/doc/refman/8.0/en/windows-extract-archive.html ). Несколько сомнительная рекомендация, учитывая, что она дана в разделе по установке неинсталлируемой версии. А в актуальных версиях установщика с графическим интерфейсом отсутствует возможность изменить путь установки в процессе инсталляции. Очевидно, это возможно сделать, запустив консольный вариант установщика в пошаговом режиме.

Перед размещением файлов сервера предлагается загрузить архив с noinstall-версией со страницы загрузки официального сайта MySQL.

https://dev.mysql.com/downloads/mysql/
https://dev.mysql.com/downloads/mysql/

После нажатия на кнопку Download откроется страница загрузки, где будет предложено зарегистрироваться, либо авторизоваться на сайте. Также Oracle не сильно обидится, если проигнорировать предложенные любезности, нажав соответствующую надпись - над подвалом ( footer ) страницы.

https://dev.mysql.com/downloads/file/?id=520511
https://dev.mysql.com/downloads/file/?id=520511

Распаковать архив с сервером рекомендуется в стандартный каталог С:\mysql таким образом, чтобы корневым каталогом для всего содержимого явилась директория mysql.

Корневой каталог для файлов сервера MySQL
Корневой каталог для файлов сервера MySQL

Создание и размещение конфигурационного файла

Конфигурационный файл формата *.ini или *.cnf необходим для задания начальных параметров при запуске сервера СУБД. Руководство рекомендует именовать его "my" и размещать в корневом каталоге загрузочного носителя. По заверениям руководства :-) этот файл необходим только при работе в операционной системе Windows. Но при большом желании то же руководство допускает конфигурирование работы СУБД в Linux аналогичным способом.

Конфигурирование параметров запуска сервера MySQL включает прописывание путей каталогов хранения файлов сервера и баз данных, задания параметров использования памяти, кэша и движка хранилища InnoDB.

При запуске MySQL-сервера в Windows он будет искать конфигурационный файл в нескольких местах: директория с файлами операционной системы Windows, корневой каталог загрузочного диска C:\, а также директория установки/распаковки файлов сервера - MySQL.

Список каталогов поиска конфигурационных файлов ( https://dev.mysql.com/doc/refman/8.0/en/option-files.html )
Список каталогов поиска конфигурационных файлов ( https://dev.mysql.com/doc/refman/8.0/en/option-files.html )

На разных ПК имя корневой директории операционной системы Windows, а также путь до нее могут отличаться. Стандартный путь: C:\Windows. Для уточнения пути на конкретной машине необходимо воспользоваться командой echo %WINDIR% в консоли.

Пример вызова в консоли команды "echo %WINDIR%"
Пример вызова в консоли команды "echo %WINDIR%"

Первым при запуске сервер СУБД будет искать конфигурационный файл my.ini, затем - my.cnf, если не найдет первый. Во избежание конфликтных ситуаций рекомендуется использовать только один из них. Если диск "C:\" не является загрузочным на эксплуатируемой машине, единственный вариант - использовать файл my.ini.

Но в данном случае нас интересует запись, начинающаяся с BASEDIR (3-я сверху в каталоге поиска конфигурационных файлов ). Как выяснится далее, именно эта глобальная опция отвечает за возможность размещения конфигурационного файла my.ini в корневой директории mysql, что на первый взгляд кажется весьма удобным решением.

Конфигурационный файл создается в любом простейшем текстовом редакторе, например, блокноте, и содержит следующие минимальные опции, где baserdir - путь к каталогу с распакованными файлами сервера MySQL. Запись в примере ниже означает, что каталог mysql с файлами сервера расположен на диске C:\ ( строка 2 ), каталог с базами данных расположен в директории data, которая, в свою очередь, находится в директории mysql, которая расположена на диске C:\ ( строка 3 ). Использование двойного обратного слэша в пути называется "экранирование" и применяется в программировании, когда в текст необходимо включить специальный символ. Таким образом, для компилятора/интерпретатора сервера путь на самом деле будет выглядеть как C:\mysql.

[mysqld]
basedir=C:\\mysql
datadir=C:\\mysql\\data

Пример записи в MS VSCode.
Пример записи в MS VSCode.

Текстовый файл с предложенным текстом необходимо сохранить и поменять его расширение с .txt на .ini, поместить файл в директорию C:\mysql. Если возникнут проблемы со сменой расширения, подробная инструкция есть здесь.

Корневой каталог для файлов сервера MySQL с конфигурационным файлом my.ini
Корневой каталог для файлов сервера MySQL с конфигурационным файлом my.ini

Инициализация директории data и заполнение системных словарей

Поскольку в ZIP-архиве MySQL изначально отсутствует каталог data, его необходимо создать вручную. В противном случае при запуске в консоли файла mysqld.exe ( собственно, и есть файл запуска сервера ) СУБД выдаст ошибки, связанные с невозможностью создания тестового файла в директории data и доступа к каталогу data.

Ошибки в консоли при запуске сервера - mysqld.exe
Ошибки в консоли при запуске сервера - mysqld.exe

С созданной директорией data и конфигурационным файлом my.ini, расположенном в директории mysql, при очередном запуске сервера ( файл mysqld.exe в директории bin ) записи об ошибках инициализации директорий пропадут. Это значит, что сервер MySQL успешно проинициализировал все каталоги из файла my.ini. При этом в лог-файле появятся новые ошибки, свидетельствующие о том, что сервер успешно переходит к выполнению следующих инструкций. Очередной блок журналирования сессии располагается между открывающей и закрывающей фразами ( сверху вниз ): "MySQL Server - start." и "MySQL Server - end.". Актуальный блок всегда находится в самом низу журнала.

Ошибки в лог-файле представлены ниже без даты и времени для удобства восприятия.
Ошибки в лог-файле представлены ниже без даты и времени для удобства восприятия.

Как видно, теперь сервер жалуется на проблему отсутствия валидной директорией data и проблему с инициализацией словаря данных. Для инициализации директории data и заполнения необходимых словарей в системной базе данных необходимо запустить сервер ( файл mysqld.exe ) с параметрами --initialize или --initialize-insecure ( https://dev.mysql.com/doc/refman/8.0/en/data-directory-initialization.html ).

  • --initialize - также генерирует пароль для суперпользователя root, который необходимо заменить при последующем запуске сервера.

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

Перед инициализацией необходимо удалить директорию data со всем содержимым. Она нужна была только для первоначального тестирования конфигурации в файле my.ini. Такой способ показался мне рациональным ввиду отсутствия нагромождения рабочих файлов инициализации в директории data, позволяющего сконцентрироваться на конфигурировании. После инициализации каталог data будет создан автоматически самой СУБД и заполнен уже рабочим материалом, необходимым для работы непосредственно с базами данных.

Так выглядит команда инициализации MySQL. Полный путь до файла mysqld зависит от того, в какую директорию был распакован архив с noinstall-версией MySQL.

c:\mysql\bin>mysqld --initialize-insecure

После инициализации содержимое каталога data будет выглядеть следующим образом.

Это пустая база данных.
Это пустая база данных.

Теперь можно запустить сервер СУБД следующей командой, в консоли.

c:\mysql\bin>mysqld

И разблокировать ему доступ в сеть.

Чтобы изменить пароль, необходимо запустить сервер СУБД (файл mysqld.exe) в консоли командой

c:\mysql\bin>mysqld

После нажатия клавиши "Enter" произойдет запуск сервера MySQL и консоль прекратит выдавать сообщения.

Консоль с запущенным сервером MySQL
Консоль с запущенным сервером MySQL

Далее необходимо открыть дополнительное окно консоли и в нем уже выполнить команду

mysql -u root --skip-password

и далее - команды, представленные на рисунке ниже, в порядке очередности. Вместо пароля "1943" необходимо вписать желаемую комбинацию допустимых символов. На этапе № 6 необходимо ввести ранее заданный пароль. В процессе ввода пароля никакие символы отображаться не будут - это же пароль :-). По окончании ввода - нажать Enter.

Очередность операций по установке пароля суперпользователя
Очередность операций по установке пароля суперпользователя

Теперь можно уверенно создавать базы данных и таблицы, нормализовать и декомпозировать, изучать реляционную алгебру... Основные трудности еще только начинаются :-).

Комментарии (3)


  1. A4E
    20.08.2023 11:58
    +5

    А зачем, если есть mariadb?


    1. proletariy Автор
      20.08.2023 11:58

      Например, затем, что MySQL есть.


    1. FanatPHP
      20.08.2023 11:58
      -1

      А зачем, если есть Перкона?