Установка MySQL 8+ на Ubuntu 24.04.1

Установка MySQL 8+ на Ubuntu 24.04.1
Photo by Rubaitul Azad / Unsplash

Установка

Начиная с Ubuntu 20.04, устанавливается версия 8.0 и выше, а на более ранних версиях системы 5.7. Устанавливаем:

sudo apt install mysql-server

После установки сервер будет запущен автоматически, проверяем статус:

sudo systemctl status mysql
● mysql.service - MySQL Community Server
     Loaded: loaded (/usr/lib/systemd/system/mysql.service; enabled; preset: enabled)
     Active: active (running) since Wed 2024-11-06 21:13:12 +07; 3min 32s ago
    Process: 25194 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, status=0/SUCCESS)
   Main PID: 25208 (mysqld)
     Status: "Server is operational"
      Tasks: 37 (limit: 9346)
     Memory: 365.4M (peak: 379.9M)
        CPU: 2.868s
     CGroup: /system.slice/mysql.service
             └─25208 /usr/sbin/mysqld

Можем заодно проверить сетевой статус MySQL:

sudo ss -tap | grep mysql
LISTEN 0      151               127.0.0.1:mysql                0.0.0.0:*     users:(("mysqld",pid=25208,fd=23))                                                                               
LISTEN 0      70                127.0.0.1:33060                0.0.0.0:*     users:(("mysqld",pid=25208,fd=21))   

Убеждаемся, что у нас 8+ версия:

mysql --version
mysql  Ver 8.0.39-0ubuntu0.24.04.2 for Linux on x86_64 ((Ubuntu))

Настройка

Запустим mysql_secure_installation — интерактивный скрипт, предоставляемый MySQL для улучшения безопасности.

sudo mysql_secure_installation

Начинается череда диалогов, в начале возникает просьба установить установить плагин валидации паролей, отвечаем YES:

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:

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

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:

Следующий диалог пропускает установку пароля пользователю root, поскольку по умолчанию используется аутентификация с помощью auth_socket.

Skipping password set for root as authentication with auth_socket is used by default.
If you would like to use password authentication instead, this can be done with the "ALTER_USER" command.
See https://dev.mysql.com/doc/refman/8.0/en/alter-user.html#alter-user-password-management for more information.

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

By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : y

Отключаем удалённый вход root пользователя:

Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y

Удаляем тестовые базы:

By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.


Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y

И перезагружаем привелегии:

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y

Все готово.

Настройка аутентификации

Исправляем историю, при которой у root'a работает auth_socket (именно из-за этого была пропущена установка пароля root на этапе выше), как плагин авторизации, а у остальных caching_sha2_password. Ну и устанавливаем пароль root. Входим в консоль MySQL:

sudo mysql

Выполняем запрос пользователей с типом их авторизации:

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

В результате запроса мы должны в списке пользователей увидеть пользователя root, у которого plugin = auth_socket, и authentication_string пуста. Обновляем плагин авторизации и устанавливаем пароль ('password' заменить пароль):

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

Применяем изменения:

FLUSH PRIVILEGES;

Можно повторно выполнить запрос пользователей и убедиться, что plugin теперь caching_sha2_password и authentication_string не пусто для пользователя root. Выходим:

exit;