Ubuntu 22.04 – установка MySQL-сервер 8

Установка MySQL сервер. Обновляем список репозиториев, ставим последние обновлени

sudo apt update
sudo apt list –upgradable # получить список обновлений
sudo apt upgrade

Установка пакета MySQL 8 сервер

sudo apt install mysql-server-8.0

Установка пароля для учётной записи root

sudo mysql

С июля 2022 г. при запуске сценария mysql_secure_installationбез дополнительной настройки будет возникать ошибка. Причина в том, что этот сценарий попытается установить пароль для корневой учетной записи MySQL установки, но по умолчанию в установках Ubuntu эта учетная запись не настроена для подключения с использованием пароля. До июля 2022 года этот сценарий автоматически завершался сбоем после попытки установить пароль учетной записи root и продолжал выполнять остальные запросы. Однако на момент написания этой статьи скрипт вернет следующую ошибку после ввода и подтверждения пароля:

… Failed! Error: SET PASSWORD has no significance for user ‘root’@’localhost’ as the authentication method used doesn’t store authentication data in the MySQL server. Please consider using ALTER USER instead if you want to change authentication parameters. New password:

Это приведет скрипт к рекурсивному циклу, выйти из которого можно только закрыв окно терминала. Поскольку mysql_secure_installationсценарий выполняет ряд других действий, которые полезны для обеспечения безопасности вашей установки MySQL, все же рекомендуется запустить его перед тем, как вы начнете использовать MySQL для управления вашими данными. Однако, чтобы избежать входа в этот рекурсивный цикл, вам необходимо сначала настроить способ аутентификации корневого пользователя MySQL. Сначала откройте командную строку MySQL:

sudo mysql

Затем выполните следующую ALTER USER команду, чтобы изменить метод аутентификации пользователя root на метод, использующий пароль. В следующем примере метод аутентификации изменяется на mysql_native_password:

ALTER USER ‘root’@’localhost’ IDENTIFIED WITH mysql_native_password BY ‘password’;

mysql> exit

После этого можно без проблем mysql_secure_installation запустить скрипт.

sudo mysql_secure_installation

Программа запросит пароль для пользователя root, политику валидации пароля и предполагаемую надёжность пароля:

Securing the MySQL server deployment.

Enter password for user root: My7Pass@Word_9_8A_zE

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
Using existing password for root.

Estimated strength of the password: 100
Change the password for root ? ((Press y|Y for Yes, any other key for No) : Y

New password: My7Pass@Word_9_8A_zE

Re-enter new password: My7Pass@Word_9_8A_zE

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

Далее удалим анонимного пользователя, отключим удалённый вход пользователя root в систему и удалим тестовую базу данных:

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
Success.

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
Success.

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

Dropping test database…
Success.

Removing privileges on test database…
Success.

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
Success.

All done!

Включение загрузки MySQL сервера вместе с загрузкой системы

sudo systemctl enable mysql.service

Запуск службы сервера MySQL

systemctl start mysql.service

Проверяем статус работы службы

systemctl status mysql.service

Разрешаем удаленное подключение к серверу. В файле /etc/mysql/mysql.conf.d/mysqld.cnf правим строку – bind-address = 127.0.0.1 Меняем на bind-address = 0.0.0.0

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

Перезапускаем службу

sudo systemctl restart mysql.service

В случае возникновении ошибки при удаленном подключении от root (ERROR 1130 (HY000): Host ” is not allowed to connect to this MySQL server) выполняем локальное подключение к mysql и создаем отдельного пользователя которому будет разрешено подключаться удаленно. Выполняем команды:

create user ‘dbadmin’@’%’ identified by ‘p@$$w0rD’;
grant all on . to ‘dbadmin’@’%’;
exit;

Пароль обязательно должен быть заключен в одиночные скобки – ‘ваш_пароль’. Пароль должен соответствовать политике которая была настроена ранее.