Установка 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-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

Прошло успешное подключение пользователя 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](https://notby.net/images/07/debian-console-grep-s-r-f-e-mariadbd-e-mariadb-etc-mysql.webp)
Если секции [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]](https://notby.net/images/07/debian-nano-50-server-cnf-add-default-time-zone-utc.webp)
Сохраняем и закрываем файл.
Загрузим информацию обо всех временных зонах в таблицу, если было указано значение 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;

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/

Необходим файл в котором параметр 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, для проверки соединения.

Произошло успешное подключение к удаленному 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](https://notby.net/images/07/debian-console-grep-s-r-f-e-mariadbd-e-mariadb-etc-mysql.webp)
Если секции [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]](https://notby.net/images/07/debian-nano-50-server-cnf-add-skip-networking-1.webp)
Сохраняем и закрываем файл.
Перезагружаем MariaDB сервер
systemctl restart mariadb
Проверяем что MariaDB сервер слушает только unix-сокет
ss -lnp | grep mariadb

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