Установка MySQL в Ubuntu 20.04

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

Читайте также: Установка стека LAMP в Ubuntu 20.04

Данный мануал поможет установить версию MySQL 8 на сервер Ubuntu 20.04. В результате вы получите рабочую БД, которую вы сможете использовать для хранения данных сайта или приложения.

Требования

Для работы вам понадобится сервер Ubuntu 20.04 с настроенным пользователем sudo и брандмауэром UFW. Все необходимые инструкции можно найти в мануале по начальной настройке сервера.

1: Установка MySQL

В Ubuntu 20.04 можно установить MySQL с помощью пакетного менеджера APT. На момент написания мануала в стандартном репозитории системы доступна версия MySQL 8.0.19. Прежде чем установить ее, обновите индекс локальных пакетов:

sudo apt update

Чтобы установить пакет mysql-server, введите:

sudo apt install mysql-server

Эта команда установит MySQL, но не предложит вам установить пароль или внести какие-либо изменения в настройки. На данный момент ваша установка не защищена, и это нужно исправить.

2: Настройка MySQL

Первым делом на свежей установке СУБД следует запустить встроенный скрипт безопасности. Он изменит некоторые стандартные параметры, заблокирует удалённый root-логин и удалит образцы.

Запустите этот сценарий:

sudo mysql_secure_installation

После этого сценарий задаст вам ряд вопросов и на основе ваших ответов изменит конфигурацию СУБД. Сначала он предложит настроить Validate Password Plugin, который проверяет надежность вашего пароля.

Если вы решите настроить Validate Password Plugin, сценарий предложит выбрать уровень проверки пароля. Наивысший уровень можно включить, нажав 2; тогда ваш пароль должен будет включать минимум 8 символов, среди которых должны быть буквы в верхнем и нижнем регистре, цифры и специальные символы.

Securing the MySQL server deployment.
Connecting to MySQL using a blank password.
VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?
Press y|Y for Yes, any other key for No: Y
There are three levels of password validation policy:
LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file
Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG:
2

После настройки Validate Password Plugin сценарий предложит выбрать root-пароль MySQL. Введите надежный пароль и подтвердите его:

Please set the password for root here.
New password:
Re-enter new password:

Если вы включили Validate Password Plugin, сценарий оценит сложность вашего пароля согласно выбранному уровню. После этого сценарий уточнит, хотите ли вы оставить этот пароль или выбрать новый. Чтобы продолжить работу, не меняя пароль, нажмите у:

Estimated strength of the password: 100
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : Y

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

Теперь ваш экземпляр MySQL использует безопасные параметры. Осталось убедиться, что MySQL работает должным образом.

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

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

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

sudo mysql

Теперь уточните, какой метод аутентификации использует каждый ваш пользователь MySQL:

SELECT user,authentication_string,plugin,host FROM mysql.user;
+------------------+------------------------------------------------------------------------+-----------------------+-----------+

| user             | authentication_string                                                  | plugin                | host      |


+------------------+------------------------------------------------------------------------+-----------------------+-----------+


| debian-sys-maint | $A$005$lS|M#3K #XslZ.xXUq.crEqTjMvhgOIX7B/zki5DeLA3JB9nh0KwENtwQ4      | caching_sha2_password | localhost |


| mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |


| mysql.session    | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |


| mysql.sys        | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |


| root             |                                                                        | auth_socket           | localhost |


+------------------+------------------------------------------------------------------------+-----------------------+-----------+

5 rows in set (0.00 sec)

В нашем случае root-пользователь проходит аутентификацию по плагину auth_socket. Чтобы настроить его для парольной аутентификации, запустите команду ALTER USER.

Вместо password выберите надежный пароль. Имейте в виду: этот пароль заменит тот пароль, что вы выбрали в разделе 2.

ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'password';

Примечание: Данный оператор ALTER USER настраивает root-пользователя MySQL для аутентификации с помощью плагина caching_sha2_password. Согласно официальной документации MySQL, плагин caching_sha2_password рекомендуется использовать для аутентификации MySQL, поскольку он обеспечивает более безопасное шифрование паролей, чем старый, но все еще широко используемый mysql_native_password.

Однако многие приложения PHP – например, phpMyAdmin – не очень хорошо поддерживают caching_sha2_password. Если вы планируете использовать эту базу данных с приложением PHP, рекомендуем настроить аутентификацию root с помощью плагина mysql_native_password:

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

Затем запустите FLUSH PRIVILEGES, чтобы перезагрузить таблицы привилегий и применить новые настройки:

FLUSH PRIVILEGES;

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

SELECT user,authentication_string,plugin,host FROM mysql.user;
+------------------+------------------------------------------------------------------------+-----------------------+-----------+

| user             | authentication_string                                                  | plugin                | host      |


+------------------+------------------------------------------------------------------------+-----------------------+-----------+


| debian-sys-maint | $A$005$lS|M#3K #XslZ.xXUq.crEqTjMvhgOIX7B/zki5DeLA3JB9nh0KwENtwQ4      | caching_sha2_password | localhost |


| mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |


| mysql.session    | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |


| mysql.sys        | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |


| root             | *3636DACC8616D997782ADD0839F92C1571D6D78F                              | caching_sha2_password | localhost |


+------------------+------------------------------------------------------------------------+-----------------------+-----------+

5 rows in set (0.00 sec)

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

exit

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

sudo mysql

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

mysql -u root -p

Создайте нового пользователя и выберите для него надежный пароль:

CREATE USER '8host'@'localhost' IDENTIFIED BY 'password';

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

GRANT ALL PRIVILEGES ON *.* TO '8host'@'localhost' WITH GRANT OPTION;

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

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

exit

А сейчас давайте проверим установку MySQL.

4: Тестирование MySQL

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

systemctl status mysql.service

Вы увидите такой вывод:

mysql.service - MySQL Community Server
Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2020-04-21 12:56:48 UTC; 6min ago
Main PID: 10382 (mysqld)
Status: "Server is operational"
Tasks: 39 (limit: 1137)
Memory: 370.0M
CGroup: /system.slice/mysql.service
└─10382 /usr/sbin/mysqld

Если сервис MySQL почему-то не запущен, запустите его:

sudo systemctl start mysql

Еще можно проверить работу вашей СУБД, подключившись к MySQL с помощью инструмента mysqladmin. Это клиент, предназначенный для запуска команд администрирования.

Чтобы подключиться к MySQL как root (-u root), ввести пароль (-p) и запросить версию, используйте такую команду:

sudo mysqladmin -p -u root version

Эта команда вернет:

mysqladmin  Ver 8.0.19-0ubuntu5 for Linux on x86_64 ((Ubuntu))
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Server version      8.0.19-0ubuntu5
Protocol version    10
Connection      Localhost via UNIX socket
UNIX socket     /var/run/mysqld/mysqld.sock
Uptime:         10 min 44 sec
Threads: 2  Questions: 25  Slow queries: 0  Opens: 149  Flush tables: 3  Open tables: 69  Queries per second avg: 0.038

Такой вывод значит, что MySQL работает.

Заключение

Теперь вы умеете выполнять базовую установку и настройку MySQL.

Читайте также:

Много полезной информации о MySQL вы найдете в официальной документации.

Tags: , , ,