Установка MySQL вручную на Windows без использования MySQL Installer.

Быстрое руководство по ручной установке MySQL на Windows

Изображение 1

Введение

Oracle выпустил отдельный инсталлятор MySQL, разработанный для упрощения установки и настройки продуктов MySQL, работающих в операционной системе Microsoft Windows. Вот ссылка на инсталлятор:

Поскольку есть инсталлятор по подобию мастера, зачем делать это вручную?

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

Официальное руководство по установке MySQL: https://dev.mysql.com/doc/refman/8.0/en/installing.html

Вот краткий упрощенный список шагов установки:

  1. Скачайте Microsoft Visual C++ 2019 Redistributable Runtime.
  2. Скачайте двоичные файлы MySQL.
  3. Архив typically называется mysql-x.x.x-winx64.zip, где ‘x.x.x‘ представляет номер версии. Например, mysql-8.0.35-winx64.zip является последней версией на момент написания этого статьи.
  4. Официальный URL для скачивания (для версии community): https://dev.mysql.com/downloads/mysql/
  5. Распакуйте zip-архив в папку и она станет корневой папкой для запуска сервера MySQL.
  6. Создайте файл настроек (my.ini) в корневой папке.
  7. Инициализируйте каталог “Data”
  8. Установите службу Windows для сервера MySQL
  9. Запустите / Остановите службу сервера MySQL
  10. Установите / Измените пароль для пользователя “root”.

Давайте начнем

Сервер MySQL для Windows требует Microsoft Visual C++ 2019 Runtime. Вы можете скачать “Visual C++ Redistributable для Visual Studio 2015-2022” по следующей ссылке:

https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=msvc-170

Предположим, что вы распаковали zip-архив в следующую папку (это может быть любое место):

C:\mysql

В корневой папке будет следующее содержимое:

C:\mysql\bin\C:\mysql\docs\C:\mysql\include\C:\mysql\lib\C:\mysql\share\C:\mysql\LICENSEC:\mysql\README

Создайте файл настроек в корневой папке и назовите его my.ini. Однако создание файла настроек не обязательно, если вы планируете использовать все параметры по умолчанию.

Местоположение файла настроек:

// расположение по умолчанию<корневая папка>\my.ini// примерC:\mysql\my.ini

Вы можете найти документацию о расположении по умолчанию и подробности файла настроек здесь:

Файл настройки позволяет настраивать поведение сервера MySQL, такое как изменение лимита доступа к памяти, производительности и различные способы обработки конкретных действий.

Ниже приведен пример файла настройки, который я использовал в одном из серверов MySQL:

[mysqld]max_allowed_packet=1Ginnodb_buffer_pool_size=500Msql-mode="STRICT_TRANS_TABLES"authentication_policy=mysql_native_password

Опции, которые не указаны в файле настройки, будут использовать значения по умолчанию. Некоторые из известных опций по умолчанию:

[client]port=3306[mysqld]# корневая папка: <root>basedir=C:/mysqlorbasedir=C:\\mysql# папка данных: <root>/datadatadir=C:/mysql/dataordatadir=C:\\mysql\\dataport=3306# Кодировка символов по умолчанию# в MySQL 8character_ser_server=utf8mb4collation_server=utf8mb4_0900_ai_ci# в MySQL 5.7 и ниженачатокserver=latin1collation_server=latin1_swedish_ci# https://dev.mysql.com/doc/refman/8.0/en/innodb-storage-engine.html# https://dev.mysql.com/doc/refman/8.0/en/storage-engines.htmldefault_storage_engine=InnoDB# https://dev.mysql.com/doc/refman/8.0/en/innodb-parameters.html#sysvar_innodb_buffer_pool_size# по умолчанию: 130 МБ# для кеширования таблиц InnoDB и индексных данных в памяти для повышения производительностиinnodb_buffer_pool_size=134217728# максимальная длина одного запроса# по умолчанию: 64 МБmax_allowed_packet=67108864# определяет, какого типа SQL-синтаксис должна поддерживать MySQL и# какие проверки на валидацию данных он должен выполнять# https://dev.mysql.com/doc/refman/8.0/en/sql-mode.htmlsql-mode="ONLY_FULL_GROUP_BY,           STRICT_TRANS_TABLES,          NO_ZERO_IN_DATE,          NO_ZERO_DATE,          ERROR_FOR_DIVISION_BY_ZERO,          NO_ENGINE_SUBSTITUTION"# используется устаревший пароль пользователя MySQL, который обратно совместим с более старой версией MySQL 5authentication_policy=mysql_native_password# это значение по умолчанию в MySQL 8, которое обеспечивает более высокий уровень безопасностиauthentication_policy=caching_sha2_password

Здесь я хотел бы потратить немного времени, чтобы объяснить значения по умолчанию для “sql-mode”.

ONLY_FULL_GROUP_BY - когда включено=================================-- это приведет к ошибкеselect id, groupid, groupname from sales group by groupid;-- в предложении группировки должны содержаться остальные столбцыselect id, groupid, groupname from sales group by groupid, id, groupname;STRICT_TRANS_TABLES - когда включено=================================-- строго придерживаться типов данных и значений, определенных в схеме таблицы, -- ввод неправильных данных приводит к ошибке-- пример:CREATE TABLE test (    id INT NOT NULL AUTO_INCREMENT,    total INT NOT NULL,    PRIMARY KEY (id));-- Это вызовет ошибку, `total` не разрешает значение NULLINSERT INTO test (total) VALUES (NULL);NO_ZERO_IN_DATE, NO_ZERO_DATE - когда включено=================================-- следующие нулевые значения даты не допускаются:0000-00-000000-00-00 00:00:002023-00-00ERROR_FOR_DIVISION_BY_ZERO=================================-- нельзя делить на ноль- когда разрешено1000 / 0 = ошибка- когда запрещено1000 / 0 = nullNO_ENGINE_SUBSTITUTION=================================-- предотвращает автоматическую замену недоступного-- хранилищного движка на хранилищный движок по умолчанию, что-- гарантирует, что таблицы будут созданы только с указанным движком.- когда включеноCREATE TABLE example_table (    id INT,    data VARCHAR(100)) ENGINE=MERGE; -- Это завершится неудачей, если движок MERGE недоступен. - когда отключен-- ENGINE=MERGE будет заменен Innodb

Предположим, у нас есть еще один экземпляр MySQL, который должен работать в определенном нестандартном режиме. Файл настройки может выглядеть примерно так:

[client]port = 4001[mysqld]port = 4001basedir = D:/database/engine/mysql/v8.0.25/datadir = E:/database/data/mysql/4001/max_allowed_packet = 1Ginnodb_buffer_pool_size = 1G# В этом экземпляре MySQL использовать репликацию# Специальные параметры для настройки репликацииserver-id = 2master-host = 192.168.0.254master-user = replication_usermaster-password = replication_passwordmaster-port = 3306read-only = 1

Если вы задаетесь вопросом, что такое настройка репликации в контексте MySQL? Настройка репликации в MySQL – это конфигурация, при которой данные с одного сервера MySQL (мастера) автоматически копируются и поддерживаются в актуальном состоянии на другом сервере (реплике или слейве).

*ПРИМЕЧАНИЕ для настройки репликации: На «мастер»-сервере MySQL необходимо создать выделенного пользователя. Вот пример SQL-запросов для создания пользователя:

-- Создание пользователяCREATE USER 'replica_user'@'%' IDENTIFIED BY 'replica_password';-- Предоставление разрешений на выполнение задач репликацииGRANT REPLICATION SLAVE ON *.* TO 'replica_user'@'%';-- Убедиться, что изменения вступили в силуFLUSH PRIVILEGES;

Следующий шаг: Инициализация каталога “Data”

Запустите “CMD” (или командную строку) от имени администратора.

Перейдите в каталог BIN и выполните одну из следующих команд. В командной строке это будет выглядеть примерно так:

[CMD]// перейти на дискC:// перейти в каталог BINCD C:\mysql\bin

Инициализируйте каталог “data” с помощью следующей команды:

[CMD]// Метод 1:// назначить пустой пароль пользователю rootmysqld --initialize-insecure// Метод 2:// назначить случайный пароль пользователю root, получите пароль в файле журнала ошибокmysqld --initialize// Если расположение файла опций не соответствует расположению по умолчанию, определите его вручнуюmysqld --initialize-insecure --defaults-file=C:\other\folder\my.inimysqld --initialize --defaults-file=C:\other\folder\my.ini

Как уже упоминалось ранее, расположение файла опций относится к mysqld.exe.

// расположение mysqld.exe:<путь>/bin/mysqld.exe// ожидается, что файл опций будет расположен по адресу:<путь>/my.iniПример пути к mysqld.exe:C:\database\mysql\v8.0.35\bin\mysqld.exeОжидаемый путь к файлу опций:C:\database\mysql\v8.0.35\my.ini

При этом будет создан каталог data в указанном каталоге. Пример:

C:\database\mysql\v8.0.35\data// В соответствии с предоставленным примером в предыдущем блоке кода

Если вы инициализируете каталог “data” с помощью команды “mysqld –initialize”, вы можете получить пароль в файле журнала ошибок, который имеет имя журнала ошибок: <имя компьютера>.err. Следуя приведенному выше примеру, это будет что-то вроде

C:\database\mysql\v8.0.35\data\mypcname.err

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

(Предположим, что вы выполните инициализацию с помощью: mysqld --initialize)

2023-11-17T13:12:22.493220Z 1 [System] [MY-013576] [InnoDB] Начата инициализация InnoDB.2023-11-17T13:12:23.244460Z 1 [System] [MY-013577] [InnoDB]Инициализация InnoDB завершена.2023-11-17T13:12:25.271888Z 6 [Note] [MY-010454] [Server]Для root@localhost создан временный пароль: cQ<l/vxC0;P!

Запустите сервер MySQL вручную:

// когда файл опций находится в расположении по умолчаниюmysqldили// когда файл опций находится в другом местеmysqld --defaults-file=C:\dbconfig\my\heavy-ram.ini

Установка службы Windows для сервера MySQL

Есть 2 способа установки службы Windows для запуска сервера MySQL.

(Установка службы) Метод 1: с помощью команды Windows CMD “sc”.

Примечание: Служба будет работать с привилегией “LocalSystem”, что хорошо для сервера MySQL.

Базовый синтаксис:

[CMD]sc create <service_name> binPath= "<path_of_mysqld> <path_option_file> <service_name>"start= <boot|system|auto|demand|disabled|delayed-auto>

Примеры:

[CMD]Пример 1:sc create MySQL8.0.35 binPath= "C:\mysql\bin\mysqld.exe MySQL8.0.35" start= autoПример 2:sc create MySQL8 binPath= "C:\mysql\bin\mysqld.exe MySQL8" start= autoПример 3:sc create "MySQL 8" binPath= "C:\mysql\bin\mysqld.exe \"MySQL 8\"" start= auto

Включите путь к файлу настроек (my.ini) в binPath.

[CMD]// выполнить в одной строкеПример 1:sc create MySQL8 binPath= "C:\mysql\bin\mysqld --defaults-file=C:\mysql\my.ini MySQL8" start= autoПример 2:sc create "MySQL 8" binPath= "\"C:\mysql 8\bin\mysqld\" --defaults-file=\"C:\mysql 8\my.ini\" \"MySQL 8\"" start= auto

Примечание: следующий синтаксис неверный:

[CMD]// неправильный пример:// после знака равенства '=' должен быть пробел.sc create "MySQL8" binPath="C:\mysql\bin\mysqld.exe MySQL8" start=auto// имя службы должно быть включено в конце binPathsc create "MySQL8" binPath= "C:\mysql\bin\mysqld.exe" start= auto// имя службы со значением пробела не заключено в двойные кавычки в binPathsc create "MySQL 8" binPath= "C:\mysql\bin\mysqld.exe MySQL 8" start= auto

Если файл настроек не находится в своих стандартных местоположениях, вы можете вручную указать путь в качестве аргумента (или параметра) вместе с binPath. Вот пример:

// выполните следующую команду в одной строкесc create MySQL8binPath= "\"C:\mysql\bin\mysqld.exe\" --defaults-file=\"C:\dbconfig\my-heavy-ram.ini\" MySQL8"start= auto

Вручную запустите службу в первый раз:

[CMD]net start MySQL8.0.35ornet start MySQL8ornet start "MySQL 8"

Чтобы остановить службу:

[CMD]net stop MySQL8.0.35ornet stop MySQL8ornet stop "MySQL 8"

Чтобы удалить службу:

[CMD]sc delete MySQL8.0.35orsc delete MySQL8orsc delete "MySQL 8"

Чтобы отредактировать службу:

[CMD]// чтобы изменить binPathsc config MySQL8 binPath= "C:\db-engine\mysql\v8\bin\mysqld MySQL8"// чтобы изменить тип запускаsc config "MySQL 8" start= auto

(Установка службы) Метод 2: Использование встроенной функции установки mysqld для MySQL:

[CMD]// установка службыmysqld --install "MySQL8"// указать путь к файлу настроекmysqld --install "MySQL8" --defaults-file="C:\mysql\my.ini"

Измените режим запуска службы с «по запросу / вручную» на «авто», затем запустите службу:

// изменить режим запуска с "вручную" на "авто"sc config "MySQL8" start= auto// вручную запустите службу в первый разnet start "MySQL8"// остановить службунет stop "MySQL8"

Вручную остановить сервер MySQL без использования службы Windows:

[CMD]mysqladmin -u root -p -h localhost --port 3306 shutdown

Установка/изменение пароля для пользователя «root».

В CMD, до сих пор в папке “BIN”, используйте программу “mysql” для входа на сервер:

[CMD]// используя стандартный порт 3306mysql -u root -p -h localhost// если сервер работает на другом порту, например, 4001mysql -u root -p -h localhost --port 4001
  • u : имя пользователя
  • -p : запрос на ввод пароля
  • -h : местоположение сервера хоста
  • --port : номер порта MySQL сервера

Затем MySQL попросит вас ввести пароль. Если вы инициализируете данные с помощью mysqld --initialize-insecure, пароль будет пустым. При инициализации с помощью mysqld --initialize будет сгенерирован временный корневой пароль, обратитесь к файлу журнала ошибок, чтобы найти пароль.

Для установки или изменения пароля:

[CMD/MySQL]alter user 'root'@'localhost' identified by 'ваш пароль здесь';

Готово. Сервер MySQL готов к использованию. Удачи в работе с базами данных.


Leave a Reply

Your email address will not be published. Required fields are marked *