Skip to content

Instantly share code, notes, and snippets.

@1234ru

1234ru/mysql-win.md

Last active Jun 29, 2019
Embed
What would you like to do?

Загрузка сервера MySQL и подготовка к запуску

  1. Скачиваем Community Server в виде zip-архива.
    (Если пугают новшества последних версий, можно остановиться на 5.7. Например, 5.7.26-winx64.)
    На странице загрузки можно перейти по ссылке No thanks, just start my download в нижней части страницы.

  2. Распаковываем куда-нибудь.

  3. Удаляем папку lib (она содержит исходный код для самостоятельной компиляции и при работе сервера не требуется). Также можно удалить файлы bin/*.pdb (они нужны только для отладки исполняемых файлов MySQL и при обычной работе не требуются).

  4. Добавляем в системную переменную PATH путь {каталог MySQL}\bin, чтобы было удобней запускать exe-файлы.

Выбор места для хранения данных и конфигурационный файл my.ini

Нужно выбрать каталог, где MySQL будет хранить файлы баз данных и некоторые служебные файлы. Рекомендуется это сделать вне каталога сервера MySQL, т.к. файлы БД следует рассматривать независимо от конкретной инсталляции/версии.

Затем нужно создать файл my.ini, поместив его в корневой каталог сервера MySQL (т.е. рядом с bin и пр.; my.ini в корневом каталоге запуска сервер будет пытаться найти и прочитать автоматически). Содержимое файла должно быть следующим:

[mysqld]

datadir = "путь к каталогу данных"
character_set_server = utf8
log-syslog = 0

Указание datadir является обязательным. Без этого сервер не запустится. Обратный слэш (\), стандартно используемый в путях Windows, интерпретируется как экранирующий и образующий управляющие последовательности (\n, \s и др.) символ, поэтому его самого нужно экранировать или же использовать вместо него прямой слэш:

datadir = "D:\\somedir\\data"
datadir = "D:/somedir/data"

Как правило, данные требуют хранения в кодировке UTF-8. Настройка character_set_server позволяет избежать явного указания кодировки при каждом случае создания базы данных или таблицы.

Если при запуске сервера возникают сообщения об ошибках насчет невомзожности записи в системный журнал событий Windows, можно добавить в my.ini запись log-syslog = 0.

Все настройки сервера перечислены здесь и здесь.

Первый запуск mysqld - инициализация каталога данных

С версии 5.7 нужно проводить первичную инициализацию каталога данных, для чего при первом запуске служит специальный ключ:

mysqld --initialize

Может возникнуть сообщение от брандмауэра Windows, которому нужно указать соотв. разрешения.

Инициализировав каталог данных, сервер завершит работу и вернёт управление командной строке.

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

Второй запуск mysqld - установка пароля пользвателю root

При первом запуске сервера для рута был сгенерирован временный пароль (действительный только на одну сессию) и записан в err-файл. Вместо того, чтобы искать его там, удобнее лишний раз запустить сервер в режиме без проверки прав:

mysqld --skip-grant-tables

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

  1. Из командной строки запускаем консольный клиент mysql.

  2. Даем команду FLUSH PRIVILLEGES; (она требуется после запуска сервера с ключом --skip-grant-tables, чтобы начали работать команды по управлению учетными записями).

  3. Устанавливаем пароль:

    • MySQL 5.7.6 и выше: ALTER USER 'root'@'localhost' IDENTIFIED BY 'somepass';

    • 5.7.5 и ранее: SET PASSWORD FOR 'root'@'localhost' = PASSWORD('somepass');

  4. Останавливаем сервер с помощью команды SHUTDOWN.
    Сервер завершит работу и вернёт управление командной строке, из клиента нужно выйти вручную (продолжать сессию смысла нет, т.к. соединение разорвано и автоматически возобновлено не будет).
    Остановка сервера необходима, чтобы прекратить работу в режиме отсутствия проверки прав доступа.

    Для MySQL 5.7.8 и ранее следует использовать утилиту mysqladmin, дав из терминала команду mysqladmin -u root -p shutdown (потребуется ввести пароль рута).

Создание учетных записей, загрузка данных и дальнейшая работа

Теперь нужно создать учетные записи обычных пользователей и базы данных для них.

Для этого снова запускаем mysqld, уже без каких-либо дополнительных ключей, после чего соединяемся с ним с помощью клиента mysql от имени пользователя root. Теперь потребуется указать пароль:

mysql -u root -p

Далее создаем учетные записи пользователей и базы данных. Как правило, каждому пользователю выделяется своя база данных, к которой он получает полный доступ. Набор команд при этом следующий:

CREATE USER someone@localhost IDENTIFIED BY 'a password';

CREATE DATABASE somedb;

GRANT ALL ON somedb.* TO someone@localhost;

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

Работа через named pipe

Сервер MySQL на компьютере разработчика обычно принимает соединения только с этого же компьютера. Такие соединения можно принимать через named pipe, а сетевой интерфейс сервера MySQL вообще закрыть за ненадобностью и по соображениям безопасности.

За включение named pipe и отключение сети отвечают две разных настройки (причем второе без первого не сработает). Запуск сервера с ними выглядит следующим образом:

mysqld --named-pipe --skip-networking

Или указать эти же опции в my.ini, чтобы запускать сервер без аргументов:

[mysqld]
...
named-pipe 
skip-networking

В каталоге данных появится файл .pid.

Как PHP под Windows, так и различные GUI для работы с базами данных (например, MySQL Workbench, однако не(!) JetBrains DataGrip) умеют устанавливать соединение через named pipe.

Утилитам командной строки (mysql, mysqladmin и пр.) нужно указывать опцию --pipe.

Настройки для клиента ([client])

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

В отличие от Linux, конфигурационный файл из домашнего каталога пользователя не читается. Список мест, откуда файлы будут прочитаны, можно посмотреть командой mysql --help (где-то в середине вывода будет фраза Default options are read from the following files in the given order). Можно указыать клиентские настройки в том же файле, что и настройки сервера:

[mysqld]
...

[client]
user = someone
password = "a password"
pipe
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.