notby.NET Logo

Установка MariaDB 11.8 в Debian 13

В качестве базы данных веб-сервера будет использоватся MariaDB последней стабильной версии. MariaDB это база данных которая отделилась от MySQL с сохранением совместимости по API, командам и библиотекам MySQL. Будет показан подробный процесс установки и начальной настройки сервера MariaDB 11.8 на примере Debian 13 (Trixie), аналогично происходит в Ubuntu 22.04 и схожих Linux дистрибутивах.

Все действия выполняются от root пользователя или с его привилегиями через sudo

su -
sudo -i

1. Установка MariaDB

Устанавливаем MariaDB

apt install mariadb-server
Установка MariaDB сервер в операционную систему Debian через консольную команду: apt install mariadb-server

Внутри пакета mariadb-server находится стабильная версия MariaDB 11.8.* LTS с долгосрочной поддержкой до июля 2028.

Вместе с сервером MariaDB будет установлен клиент MariaDB и необходимые библиотеки и программы. Дожидаемся окончания установки.

2. Скрипт безопасности mariadb-secure-installation

После установки MariaDB необходимо запускать скрипт mariadb-secure-installation для повышения безопасности и начальной настройки сервера базы данных.

Я опишу вопросы которые скрипт будет задавать и как я отвечал на них.

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

mariadb-secure-installation

Далее скрипт будет задавать вопросы в следующей последовательности:


Enter current password for root (enter for none):

Введите текущий пароль от root для авторизации в скрипте. Сервер только установлен, поэтому пароль пустой.

Оставляем поле пустым и нажимаем Enter


Switch to unix_socket authentication [Y/n]

Переключится на unix_socket авторизацию? Начиная с версии MariaDB 10.4, используется авторизация через unix_socket и она выключена по умолчанию.

Отвечаем Y, оставляем unix_socket авторизацию включенной.


Change the root password? [Y/n]

Изменить пароль root пользователя? Если оставить пароль пустым, то зайти в MariaDB от root пользователя можно будет только из root консоли. Это безопасно и полностью достаточно для работы с MariaDB сервером, так как авторизация происходит через unix_socket.

Если необходимо удаленное подключение к серверу базы данных от root, то необходимо задать пароль, иначе не получится подключится.

Отвечаем n, пароль root не меняем и оставляем пустым.


Remove anonymous users? [Y/n]

Удалить анонимных пользователей? Анонимные пользователи создаются для упрощения установки и далее не нужны.

Отвечаем Y, чтобы удалить анонимных пользователей.


Disallow root login remotely? [Y/n]

Запретить авторизацию root удаленно? Если запретить, то будет возможность войти только с localhost, что правильно.

Отвечаем Y, запрещаем удаленное подключение от root пользователя.


Remove test database and access to it? [Y/n]

Удалить тестовую базу данных и доступ к ней? Тестовая база данных создается для тестирования и доступна всем пользователям.

Отвечаем Y, чтобы удалить тестовую базу данных.


Reload privilege tables now? [Y/n]

Обновить таблицы привилегий сейчас?

Отвечаем Y, чтобы применить изменения привилегий на шагах выше.


Все необходимые изменения безопасности успешно внесены. Если необходимо, скрипт можно запустить повторно и на некоторые вопросы ответить иначе.

3. Подключение к MariaDB серверу

После установки и использования скрипта безопасности проверим подключение к серверу баз данных. Подключатся необходимо от root пользователя системы или через sudo.

Подключаемся к MariaDB серверу от root-пользователя

mariadb

или через sudo

sudo mariadb
Успешное подключение к серверу MariaDB командой mariadb в терминале от root пользователя, выведена информация Server version: 11.8.2-MariaDB-1 from Debian

Прошло успешное подключение пользователя root@localhost через unix_socket авторизацию.

MariaDB сервер успешно установлен и настроен, теперь создаем необходимые базы данных, пользователей, привилегии и так далее…

Если для root@localhost был установлен пароль, то можно подключатся от любого пользователя в системе командой

mariadb -u root -p

4. Установка временной зоны UTC 

Хорошая практика и удобство в администрировании, когда все сервера работают по умолчанию во временной зоне UTC. Временная зона по умолчанию указывается в параметре default-time-zone в секции [mariadbd] или [mariadb] конфигурационного файла MariaDB сервера.

В параметре default-time-zone временную зону можно указать как смещение относительно UTC или указать ее имя.

Выполним поиск, чтобы найти в каком файле находится секция [mariadbd] или [mariadb]

grep -s -r -F -e '[mariadbd]' -e '[mariadb]' /etc/mysql/
В терминале Debian выполнена команды “grep -s -r -F -e '[mariadbd]' -e '[mariadb]' /etc/mysql/”, секции [mariadbd] найдена в файле /etc/mysql/mariadb.conf.d/50-server.cnf

Если секции [mariadbd] или [mariadb] не существует, то ее необходимо создать в конфигурационном файле MariaDB сервера или можно поискать секцию [mysqld] и тогда уже использовать ее.

Открываем файл конфигурации с секцией [mariadbd]

nano /etc/mysql/mariadb.conf.d/50-server.cnf

Находим секцию [mariadbd] и добавляем в нее параметр default-time-zone со значением

default-time-zone = '+00:00'

или

default-time-zone = 'UTC'

Если будет использоватся имя (UTC) временной зоны, то необходимо загрузить информацию об временных зонах системы в таблицу при помощи команды mysql_tzinfo_to_sql.

В текстовом редакторе nano открыт файл /etc/mysql/mariadb.conf.d/50-server.cnf и добавлен параметр “default-time-zone = 'UTC'” в секцию [mariadbd]

Сохраняем и закрываем файл.

Загрузим информацию обо всех временных зонах в таблицу, если было указано значение UTC

mariadb-tzinfo-to-sql /usr/share/zoneinfo | mariadb -u root mysql

Перезагружаем MariaDB сервер

systemctl restart mariadb

Подключаемся к MariaDB серверу

mariadb

Проверяем что глобальная временная зона стала UTC или +00:00

SELECT @@global.time_zone;
В консоли MariaDB клиента выполнена команда “SELECT @@global.time_zone;”, которая показала что глобальная временная зона сервера является UTC

5. Удаленное подключение к серверу MariaDB

Если у тебя нет задач для подключения удаленно к серверу MariaDB, то не включай возможность удаленного подключения и не создавай пользователей с удаленными доступом.

5.1. Включение возможности удаленного подключения

По умолчанию к серверу MariaDB можно подключатся только через Unix сокеты и localhost. У меня возникают задачи когда необходимо через внутреннюю сеть подключится к серверу баз данных.

Чтобы была возможность удаленного подключения к MariaDB необходимо в параметр bind-address указать IP-адрес сетевой карты.

В дистрибутивах Debian/Ubuntu и ему подобных параметр bind-address может находится в разных файлах конфигурации.

Выполним поиск, чтобы найти в каком файле находится параметр bind-address

grep -s -r 'bind-address' /etc/mysql/
В терминале Debian выполнена команды “grep -s -r 'bind-address' /etc/mysql/”, параметр bind-address со значением 127.0.0.1 найдена в файле /etc/mysql/mariadb.conf.d/50-server.cnf

Необходим файл в котором параметр bind-address равен 127.0.0.1.

Открываем файл конфигурации сервера MariaDB и изменяем значение параметра bind-address на необходимое

nano /etc/mysql/mariadb.conf.d/50-server.cnf
# Выбираем необходимое значение:
# Значение по умолчанию (localhost)
bind-address = 127.0.0.1
# Слушать все сетевые интерфейсы и адреса
bind-address = 0.0.0.0
# Слушать конкретный IP-адрес
bind-address = 192.168.0.1

Если выбрать конкретный IP-адрес сетевой карты, то подключится получится только из сети этого адреса. В моем случае это IP 192.168.0.1 сетевой карты внутренней сети.

Вносим изменения, сохраняем и закрываем файл.

Чтобы убрать возможность удаленного подключения, необходимо вернуть значение 127.0.0.1 в параметр bind-address.

Перезагружаем MariaDB сервер

systemctl restart mariadb

Проверяем какие адреса слушается MariaDB сервер

ss -lnp | grep mariadb
Netid	State	Recv-Q	Send-Q	Local Address:Port				Peer Address:Port	Process
u_str	LISTEN	0		80		/run/mysqld/mysqld.sock			* 0					users:(("mariadbd",pid=2792,fd=29))
tcp		LISTEN	0		80		192.168.0.1:3306				0.0.0.0:*			users:(("mariadbd",pid=2792,fd=28))

Как можно видеть, к серверу MariaDB можно подключатся через unix сокет /run/mysqld/mysqld.sock и через IP-адерс 192.168.0.1 порт 3306.

5.2. Создание пользователя для удаленного подключения

Подключаемся к MariaDB серверу

mariadb

Создаем пользователя для возможности удаленного подключения

CREATE USER 'remote'@'192.168.0.5' IDENTIFIED BY 'Пароль_пользователя';

remote –  имя пользователя, 192.168.0.5 – IP адрес с которого пользователь сможет подключатся.

Вместо конкретного IP можно указать подгруппу адресов, например 'remote'@'192.168.0.0/255.255.255.0', тогда подключение возможно с диапазона адресов от 192.168.0.0 до 192.168.0.255.
Если вместо IP адреса указать % символ ('remote'@'%'), то можно подключится с любого IP адреса.

Разрешаем все привилегии для пользователя remote@192.168.0.5

GRANT ALL PRIVILEGES ON *.* TO 'remote'@'192.168.0.5';

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

Выходим с MariaDB сервера

exit;

5.3. Проверка удаленного подключения

В примере выше был создан пользовать remote с возможностью подключения только с 192.168.0.5 IP-адреса.

Устанавливаем на компьютер с которого будет подключатся MariaDB клиент

apt install mariadb-client

Подключаемся удаленно к MariaDB серверу из консоли компьютера, который имеет IP-адрес 192.168.0.5 внутри сети

mariadb -h 192.168.0.1 -u remote -p

192.168.0.1 – IP адрес сервера, remote – имя пользователя. Параметр -p означает что будет запрошен пароль пользователя.

Вводим пароль пользователя remote@192.168.0.5

Должно произойти успешное подключение к MariaDB серверу.

Можно подключатся через программу управления базами данных c графическим интерфейсом, например DBeaver. Настраиваем параметры подключения и наживаем кнопку Test Connection, для проверки соединения.

DBeaver - Окно Connection test. Успешное подключение к удаленному серверу MariaDB 11.8.2

Произошло успешное подключение к удаленному MariaDB серверу.

6. Отключение обслуживания сети

Можно сделать так, что MariaDB сервер будет работать только с unix сокетом, без возможности подключения через TCP/IP даже с localhost. Хотя в комментарии конфигурационного файла MariaDB сервера написано, что вместо skip-networking достаточно слушать только 127.0.0.1 и отключение сети не добавит безопасности. Логика в этом есть, ведь подключение к MariaDB серверу происходит через unix_socket авторизацию.

Instead of skip-networking the default is now to listen only on localhost which is more compatible and is not less secure.комментарий из файла 50-server.cnf

Приступим к отключению обслуживания сети.

Выполним поиск, чтобы найти в каком файле находится секция [mariadbd] или [mariadb]

grep -s -r -F -e '[mariadbd]' -e '[mariadb]' /etc/mysql/
В терминале Debian выполнена команды “grep -s -r -F -e '[mariadbd]' -e '[mariadb]' /etc/mysql/”, секции [mariadbd] найдена в файле /etc/mysql/mariadb.conf.d/50-server.cnf

Если секции [mariadbd] или [mariadb] не существует, то ее необходимо создать в конфигурационном файле MariaDB сервера или можно поискать секцию [mysqld] и тогда уже использовать ее.

Открываем файл конфигурации с секцией [mariadbd]

nano /etc/mysql/mariadb.conf.d/50-server.cnf

Находим секцию [mariadbd] и добавляем в нее параметр

skip-networking = 1
В текстовом редакторе nano открыт файл /etc/mysql/mariadb.conf.d/50-server.cnf и добавлен параметр “skip-networking = 1” в секцию [mariadbd]

Сохраняем и закрываем файл.

Перезагружаем MariaDB сервер

systemctl restart mariadb

Проверяем что MariaDB сервер слушает только unix-сокет

ss -lnp | grep mariadb
В терминале Debian выполнена команды “ss -lnp | grep mariadb” и видно, что MariadDB сервер работает только  через unix-сокет по адресу /run/mysqld/mysqld.sock

Теперь подключится к серверу возможно только через /run/mysqld/mysqld.sock сокет.