# Установка и настройка СУБД MySQL

## Установка MySQL на Ubuntu (Debian)

### Установка MySQL

Установить MySQL на Ubuntu 20.04 можно через пакет:

```
sudo apt install mysql-server
```

На данный момент версия mysql - 8.0.33

Вы можете проверить установленную версию:

```
mysql --version
```

### Начальная настройка MySQL

Запустите скрипт для повышения безопасности MySQL:

```
sudo mysql_secure_installation
```

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

Если вы хотите установить этот плагин, введите в консоли **y** или **Y**.

Есть три уровня защищенности пароля: **LOW (0)**, **MEDIUM (1)** и **STRONG (2)**. Чтобы задать уровень пароля, нажмите соответствующую цифру, например, **2** для сильного пароля. Даже если вы на предыдущем шаге не установили плагин, система запросит вас поставить пароль для пользователя root — введите его два раза.

Если плагин установлен, будет показан уровень надёжности пароля **Estimated strength of the password**.

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

Если в выводе появится **All done!**, то пароль для root успешно настроен.

По умолчанию вход в MySQL в Ubuntu не будет происходить по паролю. Чтобы настроить подключение через пароль, следуйте инструкции ниже.

### Настройка аутентификации и управление пользователями

#### Аутентификация по паролю

Для root-пользователя аутентификация в MySQL происходит с использованием плагина *auth\_socket*. Чтобы при подключении запрашивался пароль, нужно изменить плагин.

Войдите в оболочку MySQL:

```
sudo mysql
```

Посмотрите, какой плагин используется:

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

Для пользователя root используется *auth\_socket*:

<figure><img src="https://selectel.ru/blog/wp-content/uploads/2021/03/%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0-2021-03-31-%D0%B2-17.37.21.png" alt="" height="96" width="562"><figcaption></figcaption></figure>

Назначьте пользователю root новый плагин *caching\_sha2\_password*. Также установите пароль того уровня надежности, который вы задали ранее (на шаге Базовая настройка MySQL) — это может быть, например, тот же самый пароль. Введите его вместо **password**:

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

Некоторые приложения для работы с MySQL (например, phpMyAdmin) не будут надежно работать с плагином *<mark style="color:red;">caching\_sha2\_password</mark>*. В таком случае лучше установить другой плагин — *<mark style="color:red;">mysql\_native\_password</mark>*.

Активируйте изменения:

```
mysql> FLUSH PRIVILEGES;
```

Проверьте, что для пользователя root плагин изменился на *<mark style="color:red;">caching\_sha2\_password</mark>*<mark style="color:red;">:</mark>

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

Закройте командную строку MySQL:

```
mysql> exit
```

### Дополнительный пользователь (опционально)

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

```
mysql -u root -p
```

Если у вас не установлена аутентификация по паролю, то для входа в MySQL используйте:

```
sudo mysql
```

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

```
mysql> CREATE USER 'gutovad'@'localhost' IDENTIFIED BY 'password';
```

\*Вместо '<mark style="color:green;">gutovad</mark>' укажите свои Фамилию и инициалы.

Если вы хотите дать пользователю полный доступ к определенной базе данных, используйте:

```
mysql> GRANT ALL PRIVILEGES ON database_name.* TO 'gutovad'@'localhost';
```

Закройте консоль MySQL:

```
mysql> exit
```

### Тестирование MySQL

Посмотрите статус MySQL:

```
systemctl status mysql
```

В выводе должен быть индикатор зеленого цвета и статус active:

```
● mysql.service - MySQL Community Server
     Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2021-03-22 09:57:07 UTC; 2h 39min ago
   Main PID: 2630 (mysqld)
     Status: "Server is operational"
      Tasks: 38 (limit: 1107)
     Memory: 331.4M
     CGroup: /system.slice/mysql.service
             └─2630 /usr/sbin/mysqld
```

По какой-то причине сервис может быть не активен. В таком случае запуск MySQL в Ubuntu происходит через команду:

```
sudo systemctl start mysql
```

Если вы хотите дополнительно проверить работу MySQL, используйте инструмент mysqladmin — он нужен для администрирования MySQL-сервера. Подключитесь к MySQL и запросите пароль от root:

```
sudo mysqladmin version -u root -p
```

Если вывод выглядит подобным образом, то MySQL успешно установлена и готова к использованию:

```
mysqladmin  Ver 8.0.23-0ubuntu0.20.04.1 for Linux on x86_64 ((Ubuntu))
Copyright (c) 2000, 2021, Oracle and/or its affiliates.

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.23-0ubuntu0.20.04.1
Protocol version	10
Connection		Localhost via UNIX socket
UNIX socket		/var/run/mysqld/mysqld.sock
Uptime:			2 hours 47 min 34 sec

Threads: 2  Questions: 28  Slow queries: 0  Opens: 141  Flush tables: 3  Open tables: 60  Queries per second avg: 0.002
```

### Удаление MySQL

Если по какой-то причине вам нужно удалить MySQL из Ubuntu 20.04, сначала остановите сервисы:

```
sudo systemctl stop mysql
```

Удалите пакеты MySQL:

```
sudo apt purge mysql-server mysql-client mysql-common mysql-server-core-* mysql-client-core-*
```

Удалите всех пользователей:

```
sudo deluser --remove-home mysql
```

```
sudo delgroup mysql
```

Удалите файлы базы данных, конфигурационные файлы и логи:

```
sudo rm -rf /etc/mysql /var/lib/mysql /var/log/mysql
```

Удалите оставшиеся зависимости:

```
sudo apt-get autoremove
```

```
sudo apt-get autoclean
```

### Как сбросить root-пароль MySQL <a href="#id-1" id="id-1"></a>

Чтобы выполнить сброс пароля MySQL, подключитесь к вашему серверу [по SSH](https://help.reg.ru/support/servery-vps/klassicheskiye-vps/osnovy-raboty-s-vps/podklyucheniye-i-nastroyka-ssh-na-vps) и следуйте инструкции:

1. Откройте файл параметров MySQL командой:

```
nano /etc/mysql/my.cnf
```

2. Добавьте в конец файла три параметра:

```
[mysqld]
skip-grant-tables

skip-networking
```

<figure><img src="https://img.reg.ru/faq/20210513-kak-sbrosit-root-parol-v-mysql-4.png" alt=""><figcaption><p>MySQL reset root password</p></figcaption></figure>

Если директива \[mysqld] уже прописана в файле, добавьте только **skip-grant-tables** и **skip-networking**:

* **skip-grant-tables** — параметр, который пропускает проверку прав. Это позволит подключиться к MySQL без пароля любому пользователю.
* **skip-networking** — параметр, который запретит удалённые подключения к серверу БД на время сброса пароля.

3. Чтобы сохранить изменения, нажмите CTRL+S. Затем закройте редактор сочетанием клавиш CTRL+X.
4. Чтобы запустить MySQL с нужными параметрами, перезапустите сервер БД командой:

```
systemctl restart mysql.service
```

5. Подключитесь к серверу баз данных при помощи команды:

```
mysql
```

6. Перезагрузите привилегии:

```
FLUSH PRIVILEGES;
```

7. Поменяйте пароль при помощи команды:

```
ALTER USER 'root'@'localhost' IDENTIFIED BY 'password';
```

Вместо password введите свой новый пароль.

Если при выполнении команды возникнет ошибка неправильного синтаксиса, попробуйте другую команду:

```
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('password');
```

Если возникнет ошибка «ERROR 1290 (HY000): The MySQL server is running with the —skip-grant-tables option so it cannot execute this statement», выполните команду из 6 шага.

8. Откройте конфигурационный файл:

```
nano /etc/mysql/my.cnf
```

9. Удалите из файла текст, который добавили во втором шаге:

```
[mysqld]
skip-grant-tables
skip-networking
```

Если на 2 шаге вы добавили только параметры skip-grant-tables и skip-networking, удалите только их.

{% hint style="info" %}
Обязательно удалите опцию skip-grant-tables из конфигурационного файла после смены пароля. Если не удалить параметр, после перезапуска сервера баз данных подключаться к MySQL можно будет без пароля от имени любого пользователя.
{% endhint %}

10. Чтобы сохранить изменения, нажмите CTRL+S. Затем закройте редактор сочетанием клавиш CTRL+X.
11. Подключитесь к серверу баз данных:

```
mysql -uroot -p'password'
```

Вместо password напишите ваш новый пароль.

## Заключение

Мы рассмотрели с вами установку и базовую  настройку СУБД MySQL на Ubuntu (Debian).&#x20;

Рекомендую ознакомиться со статьями ниже, там представлена установка и базовая настройка MySQL на CentOS, а также приведены примеры основных задач администрирования СУБД MySQL:

{% embed url="<https://losst.pro/ustanovka-mysql-centos-7>" %}

{% embed url="<https://interface31.ru/tech_it/2016/02/osnovy-administrirovaniya-mysql-pri-pomoschi-komandnoy-stroki.html>" %}
