tech-tips/Программное обеспечение/СУБД/MySQL - MariaDB/Как установить MySQL в Ubuntu 18.04 DigitalOcean.md

167 lines
15 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## Введение
[MySQL](https://www.mysql.com/) является системой управления базами данных с открытым исходным кодом и обычно используется, как часть популярного стека [LAMP](https://www.digitalocean.com/community/tutorials/how-to-install-linux-apache-mysql-php-lamp-stack-ubuntu-18-04) ( #Linux, #Apache, #MySQL, #PHP / #Python / #Perl). MySQL использует реляционную базу данных и SQL (Structured Query Language, язык структурированных запросов) для управления данными.
Короткая версия установки очень проста: достаточно обновить индекс пакетов, установить пакет `mysql-server`, а затем запустить скрипт настройки безопасности.
```shell
sudo apt install mysql-server
```
Это руководство описывает процесс установки MySQL версии 5.7 на сервер с Ubuntu 18.04. Если вам необходимо обновить установленную ранее версию MySQL до версии 5.7, вы можете ознакомиться с [руководством по обновлению MySQL до версии 5.7](https://www.digitalocean.com/community/tutorials/how-to-prepare-for-your-mysql-5-7-upgrade).
## Необходимые условия
Перед тем, как начать следовать шагам, описанным в этом руководстве, вам необходимо настроить отдельный, не-рутовый (non-root) профиль пользователя на вашем сервере с Ubuntu 18.04. Вы можете сделать это используя нашу [статью о первичной настройке сервера на Ubuntu 18.04](https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-18-04).
## Шаг 1 - Установка MySQL
По умолчанию в репозиторий пакетов APT в Ubuntu 18.04 включена только последняя версия MySQL. На момент написания этого руководства это MySQL 5.7.
Для установки этой версии обновите индекс пакетов `apt` командой:
```shell
sudo apt update
```
Затем установите пакет:
```shell
sudo apt install mysql-server
```
Эта команда установит MySQL, но при этом вам не будет предложено задать пароль или внести какие-либо правки в конфигурацию. Поскольку это делает установку небезопасной, рассмотрим далее, как настроить установленную MySQL.
## Шаг 2 - Настройка MySQL
В случае новой установки MySQL вам необходимо выполнить скрипт безопасности. Он изменяет некоторые настройки по умолчанию на более безопасные, например, удалённый вход для пользователей root и пользователи, созданные по умолчанию. В старых версиях MySQL вам было необходимо также инициализировать директорию данных вручную, теперь это делается автоматически.
Выполните скрипт безопасности командой:
В результате выполнения этого скрипта вам будет предложено внести изменения в настройки безопасности вашей MySQL. Сначала вам будет предложено установить плагин валидации паролей (Validate Password Plugin), который позволяет тестировать надёжность паролей MySQL. Далее вам предложат задать пароль для пользователя **root** вашей установки MySQL. Выберите надёжный пароль и введите его два раза.
Далее вы можете выбирать `Y` и нажимать `ENTER` для всех последующих вопросов. При этом будут удалены некоторые анонимные пользователи и тестовые базы данных, будет отключена возможность удалённого входа для root пользователей, после чего все внесённые изменения будут применены к вашей установке MySQL.
Для инициализации директории данных MySQL вам необходимо использовать `mysql_install_db` для версий меньше, чем 5.7.6, и `mysqld --initialize` для версии 5.7.6 и более поздних версий. При этом, если вы устанавливаете MySQL для Debian как описано на шаге 1, директория данных будет создана автоматически и вам нет необходимости что-то делать. Если вы при этом попытаетесь всё равно выполнить команду создания директории данных, вы увидите следующую ошибку:
```shell
mysqld: Can't create directory '/var/lib/mysql/' (Errcode: 17 - File exists)
. . .
2018-04-23T13:48:00.572066Z 0 [ERROR] Aborting
```
Обратите внимание, несмотря на то, что вы задали пароль для пользователя **root** для MySQL, этот пользователь не настроен для аутентификации по паролю при подключении к оболочке (shell) MySQL. Вы можете изменить эту настройку на следующем шаге 3.
## Шаг 3 - (Опционально) Настройка аутентификации и привилегий
На серверах с Ubuntu, использующей MySQL 5.7 (и более поздние версии), пользователь **root** в MySQL по умолчанию аутентифицируется с помощью плагина `auth_socket`, а не по паролю. Это в целом более безопасно и удобно во многих случаях, но не в случае, когда вам необходимо организовать доступ к MySQL со стороны сторонней программы, например, phpMyAdmin.
Для того, чтобы пользователь **root** в MySQL мог использовать пароль для входа в систему вам необходимо изменить метод аутентификации с `auth_socket` на `mysql_native_password`. Для этого войдите в оболочку MySQL следующей командой:
```shell
sudo mysql
```
Далее проверьте, какой метод аутентификации используется для каждого из ваших пользователей MySQL:
```
+------------------+-------------------------------------------+-----------------------+-----------+
| user | authentication_string | plugin | host |
+------------------+-------------------------------------------+-----------------------+-----------+
| root | | auth_socket | localhost |
| mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)
```
В этом примере ваш пользователь **root** использует аутентификацию с помощью плагина `auth_socket`. Для изменения этой настройки на использование пароля используйте следующую команду `ALTER USER`. Не забудьте изменить `password` на ваш сильный пароль:
Далее выполните команду `FLUSH PRIVILEGES`, которая применит внесённые изменения:
Проверьте методы авторизации для пользователей ещё раз для того, чтобы убедиться, что пользователь **root** более не использует плагин `auth_socket` для авторизации:
```
+------------------+-------------------------------------------+-----------------------+-----------+
| user | authentication_string | plugin | host |
+------------------+-------------------------------------------+-----------------------+-----------+
| root | *3636DACC8616D997782ADD0839F92C1571D6D78F | mysql_native_password | localhost |
| mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)
```
Как можно видеть на представленном выводе теперь **root** пользователь MySQL аутентифицируется с использованием пароля. После того, как мы в этом убедились, можно выйти из оболочки MySQL:
```shell
exit
```
В некоторых случаях бывает полезно использовать для входа в MySQL отдельного пользователя. Для создания такого пользователя войдите в оболочку MySQL:
```shell
sudo mysql
```
**Внимание:** Если вы включили вход по паролю для пользователя **root**, как описано выше, вам потребуется использовать другую команду для входа в оболочку MySQL. Команда выше запустит оболочку с привилегиями обычного пользователя, для получения привилегий администратора вам необходимо выполнить следующую команду:
Далее создайте нового пользователя и задайте для него надёжный пароль:
Далее задайте для пользователя подходящий набор привилегий. Например, вы можете дать пользователю доступ ко всем таблицами в базе данных, а также права на добавление, изменение и удаление пользовательских привилегий следующей командой:
Обратите внимание на то, что в этом случае вам нет необходимости выполнять команду `FLUSH PRIVILEGES`. Эта команда необходимо только тогда, когда вы изменяете таблицы доступа (grant tables) используя команды `INSERT`, `UPDATE` или `DELETE`. Поскольку вы создали нового пользователя, а не редактируете права существующего пользователя, команда `FLUSH PRIVILEGES` не является необходимой.
После этого, выйдите из оболочки MySQL:
```shell
exit
```
Теперь мы можем протестировать нашу установку MySQL.
## Шаг 4 - Тестирование MySQL
Вне зависимости от того, как именно вы установили MySQL, она должна запуститься автоматически. Проверим это следующей командой:
Вы увидите вывод, похожий на этот:
```
● mysql.service - MySQL Community Server
Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: en
Active: active (running) since Wed 2018-04-23 21:21:25 UTC; 30min ago
Main PID: 3754 (mysqld)
Tasks: 28
Memory: 142.3M
CPU: 1.994s
CGroup: /system.slice/mysql.service
└─3754 /usr/sbin/mysqld
```
Если MySQL не запущена, вы можете запустить её с помощью команды `sudo systemctl start mysql`.
Для дополнительной проверки вы можете попробовать подключиться к базе данных с помощью инструмента `mysqladmin`, который представляет собой клиент, позволяющий запускать административные команды. Например, эта команда приказывает подключиться к MySQL в качестве пользователя **root** (`-u root`), запросить пароль (`-p`) и вернуть версию.
Вы увидите вывод, похожий на этот:
```
mysqladmin Ver 8.42 Distrib 5.7.21, for Linux on x86_64
Copyright (c) 2000, 2018, 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 5.7.21-1ubuntu1
Protocol version 10
Connection Localhost via UNIX socket
UNIX socket /var/run/mysqld/mysqld.sock
Uptime: 30 min 54 sec
Threads: 1 Questions: 12 Slow queries: 0 Opens: 115 Flush tables: 1 Open tables: 34 Queries per second avg: 0.006
```
Это означает, что MySQL запущена и работает.