MySQL – это система управления базами данных с открытым исходным кодом, часто устанавливаемая как часть популярного стека LAMP (Linux, Apache, MySQL, PHP/Python/Perl). Она представляет собой реляционную базу данных, которая для управления использует SQL (Structured Query Language – язык структурированных запросов).
Короткая версия установки проста: обновите ваш индекс пакетов, установите пакет mysql-server
и запустите встроенный скрипт безопасности.
sudo apt update
sudo apt install mysql-server
sudo mysql_secure_installation
В этом руководстве мы установим MySQL версии 5.7 на сервер Ubuntu 18.04, поэтому оно вам не подойдёт, если вы хотите обновить уже существующую сборку.
Для прохождения этого руководства вам потребуется сервер Ubuntu, непривилегированный пользователь с sudo
-правами и брандмауэр.
В репозиторий пакетов APT на Ubuntu 18.04 по умолчанию включена только последняя версия MySQL. В Bionic Beaver это MySQL 5.7.
Для его установки обновите индекс пакетов своего сервера с помощью apt
:
sudo apt update
Затем установите пакет по умолчанию:
sudo apt install mysql-server
MySQL будет установлена, но при этом у вас не запросят задать пароль или сделать другие изменения в конфигурации. Так как из-за этого MySQL остаётся незащищённой, мы рассмотрим настройку на следующем этапе.
Если вы в первый раз устанавливаете MySQL на ваш сервер, вам нужно запустить внутренний скрипт безопасности. Он изменяет такие настройки, как удаленный доступ к root и стандартным пользователям, которые по умолчанию не так безопасны. В более старых версиях MySQL вам также нужно было инициализировать директорию данных вручную, но теперь это делается автоматически.
Запустите скрипт безопасности:
sudo mysql_secure_installation
Эта команда проведет вас через серию запросов, в которых вы можете внести изменения в параметры безопасности вашей 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, директория данных уже была создана автоматически; вам не нужно ничего делать. Если вы все равно попытаетесь запустить эту команду, вы увидите следующую ошибку:
mysqld: Can't create directory '/var/lib/mysql/' (Errcode: 17 - File exists). . .2018-04-23T13:48:00.572066Z 0 [ERROR] Aborting
Обратите внимание, что хотя вы установили пароль для пользователя root, этот пользователь не настроен для аутентификации по паролю при подключении к оболочке MySQL. При желании вы можете изменить этот параметр, выполнив шаг 3.
В системах Ubuntu под управлением MySQL 5.7 (и более поздних версий) пользователь root MySQL по умолчанию настроен на аутентификацию с использованием плагина auth_socket
, а не с паролем. Во многих случаях это повышает безопасность и удобство использования, но одновременно усложняет дело, если вам нужно разрешить внешней программе (например, phpMyAdmin) доступ к MySQL.
Чтобы использовать пароль для подключения к MySQL в качестве пользователя root, вам необходимо сменить метод аутентификации с auth_socket
на caching_sha2_password
. Для этого откройте командную строку MySQL:
sudo mysql
Затем проверьте, какой метод аутентификации использует каждая из ваших учетных записей MySQL, с помощью:
SELECT user,authentication_string,plugin,host FROM mysql.user;
В этом примере видно, что пользователь root использует аутентификацию с помощью плагина auth_socket
. Чтобы настроить аутентификацию с помощью пароля, выполните команду ALTER USER
. Обязательно смените дефолтный password
на ваш собственный и помните, что эта команда изменит тот пароль от пользователя root, который вы установили на шаге 2:
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'пароль';
Затем выполните FLUSH PRIVILEGES
, чтобы применить все правки:
FLUSH PRIVILEGES;
Снова проверьте методы аутентификации для каждого пользователя, чтобы убедиться, что пользователь root больше не использует auth_socket
:
SELECT user,authentication_string,plugin,host FROM mysql.user;
Убедившись, что пользователь root теперь аутентифицируется с помощью пароля, вы можете выйти из оболочки MySQL:
exit
Некоторым для их рабочего процесса удобней подключаться к MySQL через отдельного пользователя. Для его создания, снова откройте оболочку MySQL:
sudo mysql
Примечание: если у вас включена аутентификация по паролю для пользователя root, как описано в выше, для доступа к оболочке вам нужно будет использовать другую команду. Команда выше будет запускать ваш клиент MySQL с правами обычного пользователя, поэтому, чтобы получить права администратора для своей базы данных, запустите:
mysql -u root -p
Теперь создайте нового пользователя и придумайте надёжный пароль:
CREATE USER 'twcloud'@'localhost' IDENTIFIED BY 'password';
Затем предоставьте новому пользователю необходимые права. К примеру, вы можете предоставить пользователю доступ ко всем таблицам в базе данных, а также право добавлять, изменять и удалять права пользователей с помощью следующей команды:
GRANT ALL PRIVILEGES ON *.* TO 'twcloud'@'localhost' WITH GRANT OPTION;
Обратите внимание, что на этом этапе вам не нужно заново запускать команду FLUSH PRIVILEGES
. Эта команда необходима только при изменении таблиц доступа с помощью операторов INSERT
, UPDATE
или DELETE
. Поскольку вы создали нового пользователя, а не изменяете существующего, команда FLUSH PRIVILEGES
здесь не требуется.
Теперь выйдите из оболочки MySQL:
exit
Наконец, давайте протестируем нашу MySQL.
Вне зависимости от того, как вы её установили, MySQL должна была запуститься автоматически. Для этого проверьте статус следующей командой:
systemctl status mysql.service
Если MySQL не запустилась, вы можете сделать это с помощью sudo systemctl start mysql
.
Для дополнительной проверки вы можете попробовать подключиться к базе данных с помощью инструмента mysqladmin
. Этот клиент позволяет запускать административные команды. Например, следующая команда сообщает, что нужно подключиться к MySQL как пользователь root (-u root
), запросить пароль (-p
) и вернуть версию.
sudo mysqladmin -p -u root version
Таким образом можно убедиться, что MySQL запущена и работает.
Поздравляем, теперь на вашем сервере запущена и настроена базовая MySQL. Дальше вы можете делать что угодно: например, попробовать запустить дополнительные меры безопасности, переместить директорию данных или же настроить управление серверами MySQL с помощью SaltStack.