Поиск по сайту:

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


Предыдущая версия этого руководства была написана Хейзел Вирдо

Введение

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

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

  1. sudo apt update
  2. sudo apt install mysql-server
  3. sudo mysql_secure_installation

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

Предпосылки

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

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

Шаг 1 — Установка MySQL

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

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

  1. sudo apt update

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

  1. sudo apt install mysql-server

Убедитесь, что сервер запущен с помощью команды systemctl start:

  1. sudo systemctl start mysql.service

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

Шаг 2 — Настройка MySQL

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

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

  1. sudo mysql_secure_installation

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

Оттуда вы можете нажать 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

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

Шаг 3 — (Необязательно) Настройка аутентификации пользователя и привилегий

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

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

  1. sudo mysql

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

  1. 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:

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

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

  1. FLUSH PRIVILEGES;

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

  1. 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)

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

  1. exit

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

  1. sudo mysql

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

  1. mysql -u root -p

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

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

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

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

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

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

  1. exit

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

Шаг 4 — Тестирование MySQL

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

  1. 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) и вернуть версию.

  1. 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, установленная на вашем сервере. Вот несколько примеров следующих шагов, которые вы можете предпринять:

  • Примите дополнительные меры безопасности.
  • Переместить каталог данных
  • Управляйте своими серверами MySQL с помощью SaltStack