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

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


Введение

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

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

Предпосылки

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

  • Один сервер Ubuntu 20.04 с администратором без полномочий root и брандмауэром, настроенным с помощью UFW. Чтобы настроить это, следуйте нашему руководству по первоначальной настройке сервера для Ubuntu 20.04.

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

В Ubuntu 20.04 вы можете установить MySQL, используя репозиторий пакетов APT. На момент написания этой статьи в репозитории Ubuntu по умолчанию была доступна версия MySQL 8.0.27.

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

  1. sudo apt update

Затем установите пакет mysql-server:

  1. sudo apt install mysql-server

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

  1. sudo systemctl start mysql.service

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

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

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

Предупреждение. С июля 2022 г. при запуске сценария mysql_secure_installation без дополнительной настройки возникает ошибка. Причина в том, что этот сценарий попытается установить пароль для корневой учетной записи MySQL установки, но по умолчанию в установках Ubuntu эта учетная запись не настроена для подключения с использованием пароля.

До июля 2022 года этот сценарий автоматически завершался ошибкой после попытки установить пароль учетной записи root и продолжал выполнять остальные запросы. Однако на момент написания этой статьи скрипт будет возвращать следующую ошибку после ввода и подтверждения пароля:

Output
... Failed! Error: SET PASSWORD has no significance for user 'root'@'localhost' as the authentication method used doesn't store authentication data in the MySQL server. Please consider using ALTER USER instead if you want to change authentication parameters. New password:

Это приведет сценарий к рекурсивному циклу, из которого вы можете выйти, только закрыв окно терминала.

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

Сначала откройте командную строку MySQL:

  1. sudo mysql

Затем выполните следующую команду ALTER USER, чтобы изменить метод аутентификации пользователя root на тот, который использует пароль. В следующем примере метод аутентификации изменяется на mysql_native_password:

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

После внесения этого изменения выйдите из командной строки MySQL:

  1. exit

После этого вы можете без проблем запустить скрипт mysql_secure_installation.

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

  1. mysql -u root -p

Затем вернитесь к использованию метода аутентификации по умолчанию с помощью этой команды:

  1. ALTER USER 'root'@'localhost' IDENTIFIED WITH auth_socket;

Это будет означать, что вы снова сможете подключиться к MySQL как пользователь root с помощью команды sudo mysql.

Запустите скрипт безопасности с помощью sudo:

  1. sudo mysql_secure_installation

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

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

Output
Securing the MySQL server deployment. Connecting to MySQL using a blank password. VALIDATE PASSWORD COMPONENT can be used to test passwords and improve security. It checks the strength of password and allows the users to set only those passwords which are secure enough. Would you like to setup VALIDATE PASSWORD component? Press y|Y for Yes, any other key for No: Y There are three levels of password validation policy: LOW Length >= 8 MEDIUM Length >= 8, numeric, mixed case, and special characters STRONG Length >= 8, numeric, mixed case, special characters and dictionary file Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 2

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

Output
Please set the password for root here. New password: Re-enter new password:

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

Если вы использовали подключаемый модуль Validate Password, вы получите отзыв о надежности вашего нового пароля. Затем скрипт спросит, хотите ли вы продолжить с только что введенным паролем или хотите ввести новый. Предполагая, что вы удовлетворены надежностью только что введенного пароля, введите Y, чтобы продолжить скрипт:

Output
Estimated strength of the password: 100 Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : Y

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

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

Шаг 3 — Создание выделенного пользователя MySQL и предоставление привилегий

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

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

  1. sudo mysql

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

  1. mysql -u root -p

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

  1. CREATE USER 'username'@'host' IDENTIFIED WITH authentication_plugin BY 'password';

После CREATE USER вы указываете имя пользователя. Сразу после этого следует знак @, а затем имя хоста, с которого этот пользователь будет подключаться. Если вы планируете обращаться к этому пользователю только локально с вашего сервера Ubuntu, вы можете указать localhost. Заключение имени пользователя и хоста в одинарные кавычки не всегда необходимо, но это может помочь предотвратить ошибки.

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

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

Выполните следующую команду, чтобы создать пользователя, который проходит аутентификацию с помощью caching_sha2_password. Обязательно измените sammy на предпочитаемое имя пользователя и пароль на надежный пароль по вашему выбору:

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

Примечание. В некоторых версиях PHP существует известная проблема, вызывающая проблемы с caching_sha2_password. Если вы планируете использовать эту базу данных с приложением PHP — например, phpMyAdmin — вы можете создать пользователя, который будет аутентифицироваться с помощью старого, хотя и безопасного плагина mysql_native_password:

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

Если вы не уверены, вы всегда можете создать пользователя, который проходит аутентификацию с помощью caching_sha2_plugin, а затем ИЗМЕНИТЬ его позже с помощью этой команды:

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

После создания нового пользователя вы можете предоставить ему соответствующие привилегии. Общий синтаксис для предоставления привилегий пользователя следующий:

  1. GRANT PRIVILEGE ON database.table TO 'username'@'host';

Значение PRIVILEGE в этом примере синтаксиса определяет, какие действия разрешено выполнять пользователю в указанной базе данных и <таблица. Вы можете предоставить несколько привилегий одному и тому же пользователю в одной команде, разделяя их запятой. Вы также можете предоставить пользователю глобальные привилегии, введя звездочки (*) вместо имен баз данных и таблиц. В SQL звездочки — это специальные символы, используемые для обозначения «всех» баз данных или таблиц.

Для иллюстрации следующая команда предоставляет пользователю глобальные привилегии для CREATE, ALTER и DROP баз данных, таблиц и пользователей, а также право на INSERT, UPDATE и DELETE данные из любой таблицы на сервере. Он также предоставляет пользователю возможность запрашивать данные с помощью SELECT, создавать внешние ключи с помощью ключевого слова REFERENCES и выполнять операции FLUSH с помощью RELOAD привилегия. Однако вы должны предоставлять пользователям только те разрешения, которые им нужны, поэтому не стесняйтесь настраивать привилегии своих пользователей по мере необходимости.

Вы можете найти полный список доступных привилегий в официальной документации MySQL.

Запустите этот оператор GRANT, заменив sammy своим собственным именем пользователя MySQL, чтобы предоставить следующие привилегии вашему пользователю:

  1. GRANT CREATE, ALTER, DROP, INSERT, UPDATE, INDEX, DELETE, SELECT, REFERENCES, RELOAD on *.* TO 'sammy'@'localhost' WITH GRANT OPTION;

Обратите внимание, что этот оператор также включает WITH GRANT OPTION. Это позволит вашему пользователю MySQL предоставлять любые разрешения, которые он имеет, другим пользователям в системе.

Предупреждение: некоторые пользователи могут захотеть предоставить своим пользователям MySQL привилегию ALL PRIVILEGES, которая предоставит им широкие привилегии суперпользователя, аналогичные привилегиям пользователя root, например:

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

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

После этого рекомендуется запустить команду FLUSH PRIVILEGES. Это освободит всю память, кэшированную сервером в результате выполнения предыдущих операторов CREATE USER и GRANT:

  1. FLUSH PRIVILEGES;

Затем вы можете выйти из клиента MySQL:

  1. exit

В будущем, чтобы войти в систему как новый пользователь MySQL, вы будете использовать следующую команду:

  1. mysql -u sammy -p

Флаг -p заставит клиент MySQL запросить у вас пароль пользователя MySQL для аутентификации.

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

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

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

  1. systemctl status mysql.service

Вы увидите вывод, подобный следующему:

Output
● mysql.service - MySQL Community Server Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2020-04-21 12:56:48 UTC; 6min ago Main PID: 10382 (mysqld) Status: "Server is operational" Tasks: 39 (limit: 1137) Memory: 370.0M CGroup: /system.slice/mysql.service └─10382 /usr/sbin/mysqld

Если MySQL не запущен, вы можете запустить его с помощью sudo systemctl start mysql.

Для дополнительной проверки вы можете попробовать подключиться к базе данных с помощью инструмента mysqladmin, который представляет собой клиент, позволяющий выполнять административные команды. Например, эта команда предлагает подключиться как пользователь MySQL с именем sammy (-u sammy), запросить пароль (-p), и вернуть версию. Обязательно измените sammy на имя вашего выделенного пользователя MySQL и введите пароль этого пользователя при появлении запроса:

  1. sudo mysqladmin -p -u sammy version

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

Output
mysqladmin Ver 8.0.19-0ubuntu5 for Linux on x86_64 ((Ubuntu)) Copyright (c) 2000, 2020, 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 8.0.19-0ubuntu5 Protocol version 10 Connection Localhost via UNIX socket UNIX socket /var/run/mysqld/mysqld.sock Uptime: 10 min 44 sec Threads: 2 Questions: 25 Slow queries: 0 Opens: 149 Flush tables: 3 Open tables: 69 Queries per second avg: 0.038

Это означает, что MySQL запущен и работает.

Заключение

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

  • стек LEMP
  • Попрактикуйтесь в выполнении запросов с помощью SQL
  • Управляйте установкой MySQL с помощью phpMyAdmin