MySQL остается одной из самых популярных систем управления реляционными базами данных, а Ubuntu — одной из наиболее распространенных операционных систем Linux для серверов. В этой статье мы рассмотрим, как установить MySQL на Ubuntu, а также ее дальнейшую настройку.
Установка MySQL
Независимо от используемой версии системы, установка происходит одинаково. Для начала необходимо обновить список доступных пакетов из репозиториев при помощи команды:
sudo apt update
После чего, установить MySQL:
sudo apt install mysql-server
MySQL автоматически запустится. Вы можете проверить статус службы с помощью команды:
sudo systemctl status mysql
Начиная с Ubuntu 20.04, устанавливается версия 8.0 и выше, а на более ранних версиях системы 5.7. Проверить установленную версию можно командой:
mysql --version
В ответ отобразится используемая версия MySQL и системы в формате:
mysql Ver 8.0.36-0ubuntu0.22.04.1 for Linux on x86_64 ((Ubuntu))
Сразу после завершения установки MySQL, настоятельно рекомендуется приступить к настройке сервера для повышения безопасности базы данных.
Настройка MySQL
Для начальной настройки необходимо прибегнуть к использованию mysql_secure_installation — это интерактивный скрипт, предоставляемый MySQL для улучшения безопасности.
Для его запуска достаточно выполнить команду:
sudo mysql_secure_installation
Он выполняет несколько шагов для защиты вашей базы данных от потенциальных угроз. Давайте разберем каждый шаг подробно:
- При первом запуске инструмент попросит установить плагин валидации паролей. Потребуется выбрать тот уровень сложности пароля, который вам подходит. Для этого введите соответствующую цифру (1 или 2), а далее продолжите установку, согласно инструкции.
- Установка пароля для root пользователя. На этом этапе скрипт запросит вас ввести текущий пароль для root пользователя MySQL. Если он еще не установлен, оставьте поле пустым и нажмите Enter. Затем он предложит вам установить новый пароль для root. Пароль для root пользователя дает полный доступ ко всем базам данных MySQL, поэтому он должен быть сложным и безопасным.
- Удаление анонимных учетных записей. По умолчанию MySQL устанавливает анонимные учетные записи, которые позволяют входить в систему без указания имени пользователя или пароля. Это представляет уязвимость безопасности, поэтому скрипт предложит удалить эти учетные записи.
- Отключение удаленного входа для root пользователя. Для повышения безопасности рекомендуется отключить удаленный доступ к root пользователю MySQL. Это означает, что root пользователь может входить в систему только локально, с сервера MySQL, а не удаленно через сеть.
- Удаление тестовых баз данных и тестовых записей. MySQL устанавливает некоторые тестовые базы данных и записи по умолчанию, которые необходимы для тестирования, но представляют угрозу безопасности, если они остаются в продакшен среде. Скрипт предложит удалить их.
- Перезагрузка привилегий (RELOAD PRIVILEGES). После завершения всех настроек скрипт перезагрузит привилегии MySQL, чтобы убедиться, что все изменения вступают в силу. Именно привилегии определяют, какие действия могут выполнять пользователи с объектами базы данных.
Рекомендуем отвечать на каждом шаге утвердительно (y).
Настройка аутентификации и управление пользователями
Следующим этапом в настройке сервиса MySQL является установка правил аутентификации, а затем конфигурация пользователей. Аутентификация пользователей и их управление выполняется через базу данных и таблицы, содержащие информацию о пользователях и их привилегиях. Для начала нужно войти в оболочку mysql:
sudo mysql
По умолчанию в новых версиях инструмента используется аутентификация с использованием плагина caching_sha2_password. Однако для пользователя root устанавливается auth_socket. Проверить тип авторизации для конкретного пользователя поможет команда:
SELECT user,authentication_string,plugin,host FROM mysql.user;
В ответ инструмент покажет список всех пользователей и используемый тип аутентификации. Для замены типа авторизации на caching_sha2_password
и установки пароля пользователя нужно ввести команду, предварительно заменив «password» на необходимый пароль:
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'password';
Применить изменения можно при помощи:
FLUSH PRIVILEGES;
После чего можно убедиться в смене типа аутентификации, выполнив команду:
SELECT user,authentication_string,plugin,host FROM mysql.user;
На данном этапе можно выйти из окружения:
exit;
При последующем входе в среду MySQL по стандартной команде, авторизация будет выполнена от имени обычного пользователя. Для входа от имени root нужно воспользоваться командой:
mysql -u root -p
При входе потребуется ввести ранее созданный пароль. Сразу после авторизации можно приступать к созданию нового пользователя. В этом поможет команда:
CREATE USER 'user'@'localhost' IDENTIFIED BY 'password';
Это создаст пользователя user, который сможет подключаться только с локального хоста (localhost) и аутентифицироваться с помощью пароля password. После создания пользователя необходимо назначить ему необходимые привилегии. Для этого воспользуемся командой GRANT
. Например, чтобы предоставить пользователю user полные права на все базы данных, выполните следующую команду:
GRANT ALL PRIVILEGES ON *.* TO 'user'@'localhost';
Если вы хотите предоставить конкретные привилегии пользователю user на все базы данных, то вам нужно изменить команду GRANT
, чтобы указать только необходимые привилегии. Пример команды с правами на чтение:
GRANT SELECT ON *.* TO 'user'@'localhost';
Команда с правами для записи:
GRANT INSERT, UPDATE ON *.* TO 'user'@'localhost';
Для предоставления этих прав только для конкретной базы данных, замените *.* на имя этой базы данных, например:
GRANT SELECT ON database_name.* TO 'user'@'localhost';
Для удаления пользователя используйте команду DROP USER
. Например, чтобы удалить пользователя user, выполните следующую команду:
DROP USER 'user'@'localhost';
После выполнения данных команд не требуется выполнять FLUSH PRIVILEGES. Достаточно выполнить выход из окружения командой:
exit;
Проверка работоспособности MySQL
Первым шагом можно проверить текущий статус сервера MySQL, чтобы убедиться, что он запущен и работает правильно. Для этого выполните команду:
sudo systemctl status mysql
Эта команда покажет текущий статус службы MySQL, включая информацию о том, запущен ли сервер успешно:
В случае, если сервис не активен, активировать его можно командой:
systemctl start mysql
Также можно попробовать подключиться при помощи инструмента mysqladmin:
sudo mysqladmin -p -u root version
Потребуется ввести пароль пользователя root, в ответ отобразится информация о сервисе. Если полученных данных недостаточно, следующим этапом создадим тестовую базу данных и таблицу. Для этого входим в оболочку:
mysql -u root –p
Создаем базу данных, последовательно вводя команды:
CREATE DATABASE testdb;
USE testdb;
CREATE TABLE testtable (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255));
Добавляем некоторые тестовые данные в таблицу. Например,
INSERT INTO testtable (name) VALUES ('Test Data 1'), ('Test Data 2'), ('Test Data 3');
Выполняем запрос для проверки добавленных данных:
SELECT * FROM testtable;
Этот запрос должен показать добавленные вами тестовые данные в виде таблицы:
Удаление MySQL
Прежде всего, остановите службу MySQL, чтобы предотвратить ее выполнение во время удаления. Выполните следующую команду в терминале:
sudo systemctl stop mysql
Наиболее распространенная команда для удаления пакетов:
apt remove --purge mysql-server mysql-client
Однако она удаляет только основные пакеты MySQL, но оставляет конфигурационные файлы. Чтобы удалить оставшиеся конфигурационные файлы и логи, выполните:
rm -rf /etc/mysql /var/lib/mysql /var/log/mysql
Для удаления всех пакетов, которые были установлены как зависимости MySQL, выполните:
apt autoremove
Так как мы создавали специального пользователя для MySQL, нужно удалить и его, выполнив последовательно команды:
deluser mysql
rm -rf /home/mysql
После выполнения этих шагов MySQL и все связанные с ним файлы должны быть полностью удалены с вашей системы. Чтобы убедиться, что MySQL был удален полностью, важно проверить текущее состояние процесса:
systemctl status mysql
После чего последовательно проверить все удаленные каталоги, они должны отсутствовать:
ls -ld /etc/mysql
ls -ld /var/lib/mysql
ls -ld /var/log/mysql
ls -ld /home/mysql
Если проверка пройдена успешно, это означает, что MySQL, все зависимости, файлы конфигурации и логи были полностью удалены с системы.
Заключение
Мы подробно рассмотрели процесс установки и настройки MySQL на операционной системе Ubuntu. Надеемся, что предоставленная информация была полезной и позволит вам успешно настроить базу данных MySQL на вашем сервере.
Не забывайте следовать рекомендациям безопасности и регулярно обновлять установленное ПО для обеспечения надежной и эффективной работы вашего хостинга.