Шаг 1: Установка MariaDB.
Процесс установки зависит от операционной системы. Мы рассмотрим Ubuntu/Debian и CentOS/RHEL как наиболее популярные варианты.
Для Ubuntu/Debian:
Обновите индекс пакетов и установите сервер:
`sudo apt update`
`sudo apt install mariadb-server`
Для CentOS/RHEL 8/9:
Добавьте официальный репозиторий MariaDB (или используйте AppStream), затем установите:
`sudo dnf install mariadb-server mariadb`
После установки запустите и включите службу:
`sudo systemctl start mariadb`
`sudo systemctl enable mariadb`
Шаг 2: Первоначальная настройка безопасности (mysql_secure_installation).
Сразу после установки запустите скрипт безопасности:
`sudo mysql_secure_installation`
Он проведет вас через ряд важных шагов:
- Установка пароля для root-пользователя: Ответьте 'Y' и задайте надежный пароль. В MariaDB 10.4 и выше аутентификация root через socket включена по умолчанию, но пароль для сетевого доступа все равно нужен.
- Удаление анонимных пользователей: Ответьте 'Y'. Эти пользователи существуют только для тестирования и представляют угрозу.
- Запрет удаленного входа под root: Ответьте 'Y'. Это критически важно. Root должен подключаться только с localhost.
- Удаление тестовой базы данных: Ответьте 'Y'. База 'test' часто используется в примерах и не нужна в production.
- Перезагрузка привилегий: Ответьте 'Y' для применения изменений.
Основной файл конфигурации обычно находится по пути `/etc/mysql/my.cnf` (Debian/Ubuntu) или `/etc/my.cnf.d/server.cnf` (RHEL/CentOS). Перед редактированием создайте резервную копию.
Откройте файл в редакторе (например, `sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf`). Мы настроим раздел `[mysqld]`.
- Привязка к адресу: Для локального использования оставьте `bind-address = 127.0.0.1`. Если серверу нужно слушать внешние подключения (например, от веб-сервера на другом хосте), укажите `0.0.0.0`, но обязательно настройте брандмауэр и доступ по паролю.
- Кодировка по умолчанию: Убедитесь, что установлена универсальная кодировка utf8mb4, поддерживающая все символы Unicode, включая эмодзи.
- Настройки InnoDB (движок по умолчанию):
- `innodb_buffer_pool_size`: Это самый важный параметр для производительности. Он определяет, сколько памяти MariaDB выделяет для кэширования данных и индексов. Для сервера с 4 ГБ ОЗУ можно начать с 1ГБ (1G). Для 8 ГБ — 4ГБ. Никогда не устанавливайте более 80% от доступной физической памяти.
- `innodb_log_file_size`: Размер файла журнала транзакций. Больший размер уменьшает частоту записи на диск, что полезно для write-нагрузки. Рекомендуемое значение — 256М-1Г.
- Общие настройки:
- `max_connections`: Максимальное число одновременных подключений. По умолчанию 151. Для среднего веб-приложения можно установить 200-300. Слишком высокое значение может привести к исчерпанию памяти.
- `query_cache_type` и `query_cache_size`: Начиная с MariaDB 10.1.7, кэш запросов (query cache) по умолчанию отключен (`query_cache_type = 0`), и его не рекомендуется включать для современных версий. Лучше полагаться на кэш InnoDB Buffer Pool.
Никогда не используйте root-пользователь для работы приложения. Создайте отдельного пользователя для каждой базы данных.
Войдите в консоль MariaDB: `sudo mysql -u root -p`
Выполните следующие команды, заменив `your_database`, `app_user` и `strong_password` на свои значения:
`CREATE DATABASE your_database CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;`
`CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'strong_password';`
`GRANT ALL PRIVILEGES ON your_database.* TO 'app_user'@'localhost';`
`FLUSH PRIVILEGES;`
`EXIT;`
Если ваш веб-сервер находится на том же хосте, используйте `'app_user'@'localhost'`. Если на другом — укажите IP-адрес или используйте `'app_user'@'%'` (что менее безопасно).
Шаг 5: Настройка брандмауэра (если нужен удаленный доступ).
Если вы разрешили внешние подключения (`bind-address = 0.0.0.0`), настройте брандмауэр, чтобы разрешить трафик только с доверенных IP-адресов (например, IP вашего веб-сервера).
Для UFW (Ubuntu): `sudo ufw allow from 192.168.1.100 to any port 3306`
Для firewalld (CentOS): `sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="3306" accept'`
Шаг 6: Базовая оптимизация и мониторинг.
После применения изменений в конфигурации перезапустите MariaDB: `sudo systemctl restart mariadb`
Проверьте логи на наличие ошибок: `sudo tail -f /var/log/mysql/error.log`
Подключитесь с новым пользователем и проверьте кодировку и настройки:
`mysql -u app_user -p`
Внутри консоли выполните:
`SHOW VARIABLES LIKE 'character_set%';`
`SHOW VARIABLES LIKE 'innodb_buffer_pool_size';`
Для мониторинга производительности в реальном времени можно использовать встроенные команды:
`SHOW STATUS LIKE 'Threads_connected';` — текущие подключения.
`SHOW ENGINE INNODB STATUS\G` — детальная информация по InnoDB (смотреть в раздел BUFFER POOL AND MEMORY).
Также настройте сбор основных метрик (количество запросов, использование соединений, нагрузка на CPU) в вашу систему мониторинга (Prometheus, Zabbix).
Шаг 7: Резервное копирование (cron-задание).
Настройте регулярное резервное копирование с помощью `mysqldump`. Создайте простой скрипт:
`#!/bin/bash`
`mysqldump -u app_user -p'strong_password' your_database | gzip > /backup/your_database_$(date +%Y%m%d_%H%M%S).sql.gz`
Добавьте задание в cron (`crontab -e`), например, для ежедневного бэкапа в 2:00 ночи:
`0 2 * * * /path/to/your/backup_script.sh`
Не храните пароли в скрипте в plain text — используйте файлы конфигурации с ограниченными правами доступа.
Следуя этим шагам, вы получите безопасный, правильно сконфигурированный и оптимизированный для старта сервер MariaDB, готовый к работе с вашим приложением. Помните, что тонкая настройка (тюнинг) — это итеративный процесс, который следует продолжать, анализируя реальную нагрузку и метрики производительности.
Комментарии (5)