> For the complete documentation index, see [llms.txt](https://antons-organization-1.gitbook.io/administrirovanie-linux/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://antons-organization-1.gitbook.io/administrirovanie-linux/servisy-linux/sistemy-upravleniya-bazami-dannykh/ustanovka-i-nastroika-subd-mysql.md).

# Установка и настройка СУБД 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>" %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://antons-organization-1.gitbook.io/administrirovanie-linux/servisy-linux/sistemy-upravleniya-bazami-dannykh/ustanovka-i-nastroika-subd-mysql.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
