Планирование — фундамент успеха. Прежде чем устанавливать что-либо, определите аппаратные требования. Для production-сервера MariaDB критически важны: быстрые диски (предпочтительно NVMe SSD), достаточный объем оперативной памяти (правило "чем больше, тем лучше", минимум 16 ГБ для средних нагрузок) и многоядерный процессор. Отделите сервер БД от веб-сервера. Выберите операционную систему: Rocky Linux, AlmaLinux, Ubuntu LTS или Debian Stable — все они отлично поддерживаются. Настройте статические IP-адреса и убедитесь, что имена хостов разрешаются корректно.
Шаг 1: Установка последней стабильной версии. Не используйте устаревшие версии из стандартных репозиториев. Добавьте официальный репозиторий MariaDB для вашей ОС. Для Ubuntu 22.04 это будет выглядеть так:
sudo apt-get install apt-transport-https curl
sudo curl -o /etc/apt/trusted.gpg.d/mariadb_release_signing_key.asc 'https://mariadb.org/mariadb_release_signing_key.asc'
sudo sh -c 'echo "deb [arch=amd64,arm64,ppc64el] https://mirror.mariadb.org/repo/10.11/ubuntu jammy main" > /etc/apt/sources.list.d/mariadb.list'
sudo apt-get update
sudo apt-get install mariadb-server mariadb-client
Для RHEL-совместимых систем используйте официальный репозиторий через `yum` или `dnf`. После установки запустите и включите службу: `sudo systemctl start mariadb; sudo systemctl enable mariadb`.
Шаг 2: Первоначальная настройка безопасности. Запустите скрипт `mysql_secure_installation`. Он предложит:
- Установить пароль для root (создавайте сложный и используйте его только для администрирования).
- Удалить анонимных пользователей.
- Запретить удаленный вход root (это важно!).
- Удалить тестовую базу `test`.
- Перезагрузить таблицы привилегий.
[mysqld]
# Движок по умолчанию и поддержка UTF-8
default-storage-engine = InnoDB
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
# Сетевые настройки
bind-address = 127.0.0.1 # Слушаем только localhost. Для удаленного доступа настройте позже через SSH-туннель или прокси.
port = 3306
# Настройки InnoDB - сердце производительности
innodb_buffer_pool_size = 12G # 70-80% от доступной оперативной памяти, если сервер выделен под БД.
innodb_log_file_size = 2G
innodb_flush_log_at_trx_commit = 1 # Для максимальной надежности (ACID). Если нужна скорость и есть реплика, можно 2.
innodb_flush_method = O_DIRECT
innodb_file_per_table = ON
# Кэши и лимиты
query_cache_type = 0 # В современных версиях кэш запросов deprecated, используйте его аналоги с осторожностью.
query_cache_size = 0
max_connections = 200 # Настройте в зависимости от ожидаемой нагрузки и мониторинга.
thread_cache_size = 50
table_open_cache = 2000
# Логирование
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mariadb-slow.log
long_query_time = 2
log_error = /var/log/mysql/mariadb-error.log
После изменения `innodb_log_file_size` вам может потребоваться остановить MariaDB, удалить старые лог-файлы (`ib_logfile0`, `ib_logfile1`) в директории данных и перезапустить сервер, чтобы он создал их заново.
Шаг 4: Создание пользователей и настройка прав. Никогда не используйте root для приложений. Создайте отдельного пользователя для каждого сервиса.
CREATE DATABASE appdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'StrongPassword123!';
GRANT ALL PRIVILEGES ON appdb.* TO 'app_user'@'localhost';
FLUSH PRIVILEGES;
Для удаленного доступа (с осторожностью) используйте `'app_user'@'192.168.1.%'` для диапазона IP или настройте VPN/SSH-туннель.
Шаг 5: Настройка репликации для отказоустойчивости и чтения. Репликация Master-Slave (теперь Primary-Replica) — must-have для продакшена. На Primary-сервере:
- В конфиге: `server-id = 1`, `log_bin = /var/log/mysql/mariadb-bin.log`, `binlog_format = ROW`.
- Создайте пользователя для репликации: `CREATE USER 'replicator'@'%' IDENTIFIED BY 'ReplicaPass!'; GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'%';`
- Заблокируйте таблицы для дампа: `FLUSH TABLES WITH READ LOCK;` (в отдельной сессии, быстро сделайте дамп `mysqldump -u root -p --all-databases --master-data > full_dump.sql` и запишите позицию бинарного лога: `SHOW MASTER STATUS;`). После дампа разблокируйте: `UNLOCK TABLES;`.
- Импортируйте дамп: `mysql -u root -p < full_dump.sql`.
- В конфиге: `server-id = 2`.
- Настройте подключение к мастеру:
- Запустите репликацию: `START SLAVE;`. Проверьте статус: `SHOW SLAVE STATUS\G` — убедитесь, что `Slave_IO_Running` и `Slave_SQL_Running` имеют значение `Yes`.
0 2 * * * /usr/bin/mysqldump -u backup_user -p'password' --all-databases --single-transaction | gzip > /backup/mariadb_full_$(date +\%Y\%m\%d).sql.gz
Внедрите мониторинг. Используйте Prometheus с экспортером `mysqld_exporter` и Grafana для визуализации ключевых метрик: количество подключений, скорость запросов, использование буферного пула InnoDB, lag реплики.
Шаг 7: План масштабирования. По мере роста нагрузки рассмотрите:
- Вертикальное шардирование: выделите отдельные серверы для аналитических запросов (используя движок ColumnStore).
- Горизонтальное шардирование на уровне приложения или с помощью прокси-сервера типа MariaDB MaxScale.
- Использование Galera Cluster для синхронной многомастер-репликации, если требуется высочайшая доступность и запись в несколько узлов.
Комментарии (13)