Select Page

Введение

MySQL является системой управления базами данных с открытым исходным кодом и обычно используется, как часть популярного стека LAMP (Linux, Apache, MySQL, PHP/Python/Perl). MySQL использует реляционную базу данных и SQL (Structured Question Language, язык структурированных запросов) для управления данными.

Короткая версия установки очень проста: достаточно обновить индекс пакетов, установить пакет mysql-server, а затем запустить скрипт настройки безопасности.

  • sudo apt replace
  • sudo apt set up mysql-server
  • sudo mysql_secure_installation

Это руководство описывает процесс установки MySQL версии 5.7 на сервер с Ubuntu 18.04. Если вам необходимо обновить установленную ранее версию MySQL до версии 5.7, вы можете ознакомиться с руководством по обновлению MySQL до версии 5.7.

Необходимые условия

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

Шаг 1 – Установка MySQL

По умолчанию в репозиторий пакетов APT в Ubuntu 18.04 включена только последняя версия MySQL. На момент написания этого руководства это MySQL 5.7.

Для установки этой версии обновите индекс пакетов apt командой:

Затем установите пакет:

  • sudo apt set up mysql-server

Эта команда установит MySQL, но при этом вам не будет предложено задать пароль или внести какие-либо правки в конфигурацию. Поскольку это делает установку небезопасной, рассмотрим далее, как настроить установленную MySQL.

Шаг 2 – Настройка MySQL

В случае новой установки MySQL вам необходимо выполнить скрипт безопасности. Он изменяет некоторые настройки по умолчанию на более безопасные, например, удалённый вход для пользователей root и пользователи, созданные по умолчанию. В старых версиях MySQL вам было необходимо также инициализировать директорию данных вручную, теперь это делается автоматически.

Выполните скрипт безопасности командой:

  • sudo mysql_secure_installation

В результате выполнения этого скрипта вам будет предложено внести изменения в настройки безопасности вашей MySQL. Сначала вам будет предложено установить плагин валидации паролей (Validate Password Plugin), который позволяет тестировать надёжность паролей MySQL. Далее вам предложат задать пароль для пользователя root вашей установки MySQL. Выберите надёжный пароль и введите его два раза.

Далее вы можете выбирать Y и нажимать ENTER для всех последующих вопросов. При этом будут удалены некоторые анонимные пользователи и тестовые базы данных, будет отключена возможность удалённого входа для root пользователей, после чего все внесённые изменения будут применены к вашей установке MySQL.

Для инициализации директории данных MySQL вам необходимо использовать mysql_install_db для версий меньше, чем 5.7.6, и mysqld --initialize для версии 5.7.6 и более поздних версий. При этом, если вы устанавливаете MySQL для Debian как описано на шаге 1, директория данных будет создана автоматически и вам нет необходимости что-то делать. Если вы при этом попытаетесь всё равно выполнить команду создания директории данных, вы увидите следующую ошибку:

Вывод

mysqld: Cannot create listing '/var/lib/mysql/' (Errcode: 17 - Document exists) . . . 2018-04-23T13:48:00.572066Z 0 [ERROR] Aborting

Обратите внимание, несмотря на то, что вы задали пароль для пользователя root для MySQL, этот пользователь не настроен для аутентификации по паролю при подключении к оболочке (shell) MySQL. Вы можете изменить эту настройку на следующем шаге 3.

Шаг 3 – (Опционально) Настройка аутентификации и привилегий

На серверах с Ubuntu, использующей MySQL 5.7 (и более поздние версии), пользователь root в MySQL по умолчанию аутентифицируется с помощью плагина auth_socket, а не по паролю. Это в целом более безопасно и удобно во многих случаях, но не в случае, когда вам необходимо организовать доступ к MySQL со стороны сторонней программы, например, phpMyAdmin.

Для того, чтобы пользователь root в MySQL мог использовать пароль для входа в систему вам необходимо изменить метод аутентификации с auth_socket на mysql_native_password. Для этого войдите в оболочку MySQL следующей командой:

Далее проверьте, какой метод аутентификации используется для каждого из ваших пользователей MySQL:

  • SELECT person,authentication_string,plugin,host FROM mysql.person;

Вывод

+------------------+-------------------------------------------+-----------------------+-----------+ | person | authentication_string | plugin | host | +------------------+-------------------------------------------+-----------------------+-----------+ | root | | auth_socket | localhost | | mysql.consultation | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost | +------------------+-------------------------------------------+-----------------------+-----------+ Four rows in set (0.00 sec)

В этом примере ваш пользователь root использует аутентификацию с помощью плагина auth_socket. Для изменения этой настройки на использование пароля используйте следующую команду ALTER USER. Не забудьте изменить password на ваш сильный пароль:

  • ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

Далее выполните команду FLUSH PRIVILEGES, которая применит внесённые изменения:

Проверьте методы авторизации для пользователей ещё раз для того, чтобы убедиться, что пользователь root более не использует плагин auth_socket для авторизации:

  • SELECT person,authentication_string,plugin,host FROM mysql.person;

Вывод

+------------------+-------------------------------------------+-----------------------+-----------+ | person | authentication_string | plugin | host | +------------------+-------------------------------------------+-----------------------+-----------+ | root | *3636DACC8616D997782ADD0839F92C1571D6D78F | mysql_native_password | localhost | | mysql.consultation | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost | +------------------+-------------------------------------------+-----------------------+-----------+ Four rows in set (0.00 sec)

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

В некоторых случаях бывает полезно использовать для входа в MySQL отдельного пользователя. Для создания такого пользователя войдите в оболочку MySQL:

Внимание: Если вы включили вход по паролю для пользователя root, как описано выше, вам потребуется использовать другую команду для входа в оболочку MySQL. Команда выше запустит оболочку с привилегиями обычного пользователя, для получения привилегий администратора вам необходимо выполнить следующую команду:

Далее создайте нового пользователя и задайте для него надёжный пароль:

  • CREATE USER 'sammy'@'localhost' IDENTIFIED BY 'password';

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

  • GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION;

Обратите внимание на то, что в этом случае вам нет необходимости выполнять команду FLUSH PRIVILEGES. Эта команда необходимо только тогда, когда вы изменяете таблицы доступа (grant tables) используя команды INSERT, UPDATE или DELETE. Поскольку вы создали нового пользователя, а не редактируете права существующего пользователя, команда FLUSH PRIVILEGES не является необходимой.

После этого, выйдите из оболочки MySQL:

Теперь мы можем протестировать нашу установку MySQL.

Шаг 4 – Тестирование MySQL

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

  • systemctl standing mysql.provider

Вы увидите вывод, похожий на этот:

Вывод

● mysql.provider - MySQL Neighborhood Server Loaded: loaded (/lib/systemd/device/mysql.provider; enabled; supplier preset: en Lively: energetic (operating) since Wed 2018-04-23 21:21:25 UTC; 30min in the past Major PID: 3754 (mysqld) Duties: 28 Reminiscence: 142.3M CPU: 1.994s CGroup: /device.slice/mysql.provider └─3754 /usr/sbin/mysqld

Если MySQL не запущена, вы можете запустить её с помощью команды sudo systemctl get started mysql.

Для дополнительной проверки вы можете попробовать подключиться к базе данных с помощью инструмента mysqladmin, который представляет собой клиент, позволяющий запускать административные команды. Например, эта команда приказывает подключиться к MySQL в качестве пользователя root (-u root), запросить пароль (-p) и вернуть версию.

  • sudo mysqladmin -p -u root model

Вы увидите вывод, похожий на этот:

Вывод

mysqladmin Ver 8.42 Distrib 5.7.21, for Linux on x86_64 Copyright (c) 2000, 2018, Oracle and/or its associates. All rights reserved. Oracle is a registered trademark of Oracle Company and/or its associates. Different names could also be logos in their respective house owners. Server model 5.7.21-1ubuntu1 Protocol model 10 Connection Localhost by means of UNIX socket UNIX socket /var/run/mysqld/mysqld.sock Uptime: 30 min 54 sec Threads: 1 Questions: 12 Sluggish queries: 0 Opens: 115 Flush tables: 1 Open tables: 34 Queries according to 2nd avg: 0.006

Это означает, что MySQL запущена и работает.

Заключение

Теперь на вашем сервере установлена и настроена MySQL. Вот несколько примеров того, что можно сделать дальше: