Как установить MySQL на Ubuntu 18.04

Предыдущая версия этого руководства была написанаHazel Virdó

Вступление

MySQL - это система управления базами данных с открытым исходным кодом, обычно устанавливаемая как часть популярного стекаLAMP (Linux, Apache, MySQL, PHP / Python / Perl). Он использует реляционную базу данных и SQL (язык структурированных запросов) для управления своими данными.

Краткая версия установки проста: обновите индекс вашего пакета, установите пакетmysql-server, а затем запустите включенный сценарий безопасности.

sudo apt update
sudo apt install mysql-server
sudo mysql_secure_installation

Из этого туториала Вы узнаете, как установить MySQL версии 5.7 на сервер Ubuntu 18.04. Однако, если вы хотите обновить существующую установку MySQL до версии 5.7, вы можете вместо этого прочитатьthis MySQL 5.7 update guide.

Предпосылки

Чтобы следовать этому уроку, вам понадобится:

  • Один сервер Ubuntu 18.04, настроенный по подпискеthis initial server setup guide, включая пользователя, отличного отroot, с привилегиямиsudo и брандмауэром.

[[step-1 -—- install-mysql]] == Шаг 1. Установка MySQL

В Ubuntu 18.04 только последняя версия MySQL включена в репозиторий пакетов APT по умолчанию. На момент написания статьи это MySQL 5.7

Чтобы установить его, обновите индекс пакета на вашем сервере с помощьюapt:

sudo apt update

Затем установите пакет по умолчанию:

sudo apt install mysql-server

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

[[step-2 -—- configuring-mysql]] == Шаг 2 - Настройка MySQL

Для новых установок вы захотите запустить прилагаемый скрипт безопасности. Это изменяет некоторые из менее безопасных параметров по умолчанию для таких вещей, как удаленный вход в систему и примеры пользователей. В старых версиях MySQL вам также нужно было инициализировать каталог данных вручную, но теперь это делается автоматически.

Запустите скрипт безопасности:

sudo mysql_secure_installation

Это проведет вас через серию запросов, в которых вы сможете внести некоторые изменения в параметры безопасности вашей установки MySQL. Первая подсказка спросит, хотите ли вы установить плагин Validate Password, который можно использовать для проверки надежности вашего пароля MySQL. Независимо от вашего выбора, следующее приглашение будет заключаться в установке пароля для пользователя MySQLroot. Введите и подтвердите безопасный пароль по вашему выбору.

Оттуда вы можете нажатьY, а затемENTER, чтобы принять значения по умолчанию для всех последующих вопросов. Это приведет к удалению некоторых анонимных пользователей и тестовой базы данных, отключению удаленных учетных записей root и загрузке этих новых правил, чтобы MySQL немедленно учитывал внесенные вами изменения.

Чтобы инициализировать каталог данных MySQL, вы должны использоватьmysql_install_db для версий до 5.7.6 иmysqld --initialize для 5.7.6 и новее. Однако, если вы установили MySQL из дистрибутива Debian, как описано в шаге 1, каталог данных был инициализирован автоматически; Вам не нужно ничего делать. Если вы все равно попробуете выполнить команду, вы увидите следующую ошибку:

Выход

mysqld: Can't create directory '/var/lib/mysql/' (Errcode: 17 - File exists)
. . .
2018-04-23T13:48:00.572066Z 0 [ERROR] Aborting

Обратите внимание, что даже если вы установили пароль для пользователя MySQLroot, этот пользователь не настроен для аутентификации с паролем при подключении к оболочке MySQL. Если вы хотите, вы можете отрегулировать этот параметр, выполнив Шаг 3.

[[step-3 -—- optional-adjusting-user-authentication-and-privileges]] == Шаг 3 - (Необязательно) Регулировка аутентификации и привилегий пользователя

В системах Ubuntu под управлением MySQL 5.7 (и более поздних версий) пользователь MySQLroot по умолчанию настроен на аутентификацию с использованием подключаемого модуляauth_socket, а не с помощью пароля. Это обеспечивает большую безопасность и удобство использования во многих случаях, но также может усложнить ситуацию, когда вам нужно разрешить внешней программе (например, phpMyAdmin) доступ к пользователю.

Чтобы использовать пароль для подключения к MySQL какroot, вам необходимо переключить его метод аутентификации сauth_socket наmysql_native_password. Для этого откройте приглашение MySQL из вашего терминала:

sudo mysql

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

SELECT user,authentication_string,plugin,host FROM mysql.user;
Output+------------------+-------------------------------------------+-----------------------+-----------+
| 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. Чтобы настроить учетную записьroot для аутентификации с паролем, выполните следующую командуALTER USER. Обязательно изменитеpassword на надежный пароль по вашему выбору, и обратите внимание, что эта команда изменит парольroot, который вы установили на шаге 2:

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

Затем запуститеFLUSH PRIVILEGES, который сообщает серверу перезагрузить таблицы предоставления и ввести в действие ваши новые изменения:

FLUSH PRIVILEGES;

Еще раз проверьте методы аутентификации, используемые каждым из ваших пользователей, чтобы убедиться, чтоroot больше не аутентифицируется с помощью плагинаauth_socket:

SELECT user,authentication_string,plugin,host FROM mysql.user;
Output+------------------+-------------------------------------------+-----------------------+-----------+
| 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)

В этом примере вы можете увидеть, что пользователь MySQLroot теперь аутентифицируется с помощью пароля. Как только вы подтвердите это на своем собственном сервере, вы можете выйти из оболочки MySQL:

exit

Альтернативно, некоторые могут найти, что это лучше подходит их рабочему процессу для подключения к MySQL с выделенным пользователем. Чтобы создать такого пользователя, снова откройте оболочку MySQL:

sudo mysql

[.Примечание]##

Note: Если у вас включена аутентификация по паролю дляroot, как описано в предыдущих параграфах, вам нужно будет использовать другую команду для доступа к оболочке MySQL. Следующее запустит ваш клиент MySQL с правами обычного пользователя, и вы получите права администратора в базе данных только путем аутентификации:

mysql -u root -p

Оттуда создайте нового пользователя и дайте ему надежный пароль:

CREATE USER 'sammy'@'localhost' IDENTIFIED BY 'password';

Затем предоставьте новому пользователю соответствующие привилегии. Например, вы можете предоставить пользовательские привилегии всем таблицам в базе данных, а также полномочия добавлять, изменять и удалять пользовательские привилегии с помощью этой команды:

GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION;

Обратите внимание, что на этом этапе вам не нужно снова запускать командуFLUSH PRIVILEGES. Эта команда необходима только при изменении таблиц предоставления с помощью таких операторов, какINSERT,UPDATE илиDELETE. Поскольку вы создали нового пользователя, вместо изменения существующегоFLUSH PRIVILEGES здесь не нужен.

После этого выйдите из оболочки MySQL:

exit

Наконец, давайте проверим установку MySQL.

[[step-4 -—- testing-mysql]] == Шаг 4. Тестирование MySQL

Независимо от того, как вы его установили, MySQL должен был запуститься автоматически. Чтобы проверить это, проверьте его статус.

systemctl status mysql.service

Вы увидите вывод, похожий на следующий:

Выход

● 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) и возвращать версию.

sudo mysqladmin -p -u root version

Вы должны увидеть вывод, похожий на этот:

Выход

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 запущен и работает.

Заключение

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

Related