К основному содержимому

MySQL/MariaDB на VPS: установка, настройка, безопасность

VDS / VPS · 02.04.2025 · 4 мин чтения
Иллюстрация к статье «MySQL/MariaDB на VPS: установка, настройка, безопасность»

MariaDB — форк MySQL с улучшенной производительностью. На большинстве VPS-серверов ZevsHost доступна из официальных репозиториев Ubuntu.

Установка MariaDB

sudo apt update
sudo apt install -y mariadb-server mariadb-client

# Запустить и включить автозапуск
sudo systemctl start mariadb
sudo systemctl enable mariadb

# Начальная защита
sudo mysql_secure_installation

В ходе mysql_secure_installation рекомендуется:

  • Установить пароль root — Yes
  • Удалить анонимных пользователей — Yes
  • Запретить root вход удалённо — Yes
  • Удалить тестовую БД — Yes

Создание базы данных и пользователя

sudo mysql -u root -p

-- Создать базу данных
CREATE DATABASE myapp CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- Создать пользователя
CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'сложный_пароль';

-- Выдать права
GRANT ALL PRIVILEGES ON myapp.* TO 'myuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;

Настройка удалённого доступа

⚠️ Открывайте удалённый доступ только если это необходимо. Используйте firewall (UFW) для ограничения IP.
# Открыть порт только для конкретного IP
sudo ufw allow from 203.0.113.10 to any port 3306

# Разрешить bind в MariaDB
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
# Изменить: bind-address = 0.0.0.0
sudo systemctl restart mariadb

Автоматическое резервное копирование

# Создать скрипт бэкапа
cat > /usr/local/bin/db-backup.sh << 'EOF'
#!/bin/bash
DATE=$(date +%Y-%m-%d)
mysqldump -u root -p'ВАШ_ПАРОЛЬ' myapp | gzip > /backups/myapp-$DATE.sql.gz
find /backups -name "*.sql.gz" -mtime +7 -delete
EOF
chmod +x /usr/local/bin/db-backup.sh
mkdir -p /backups

# Добавить в cron (каждый день в 3:00)
echo "0 3 * * * root /usr/local/bin/db-backup.sh" >> /etc/crontab
✅ ZevsHost делает ежедневные снапшоты VPS автоматически. Настройте дополнительный бэкап БД для максимальной надёжности.

Разбор типичных ошибок

"ERROR 1698 (28000): Access denied for user 'root'@'localhost'" при попытке зайти под root сразу после установки — на Ubuntu/Debian MariaDB по умолчанию использует плагин unix_socket, и пароль root вообще не проверяется, если подключаться не через sudo.

mysql -u root -p
ERROR 1698 (28000): Access denied for user 'root'@'localhost'

Решение — подключайтесь как sudo mysql (без пароля, через unix_socket) или явно смените метод аутентификации: ALTER USER 'root'@'localhost' IDENTIFIED VIA mysql_native_password USING PASSWORD('пароль');.

Удалённое подключение падает с "ERROR 2003: Can't connect to MySQL server" — при том что bind-address изменён и порт открыт в UFW, часто причина в том, что сам пользователь MySQL создан с хостом localhost, а не с конкретным IP или %.

ERROR 2003 (HY000): Can't connect to MySQL server on '203.0.113.10' (111)
-- Ошибка 111 = Connection refused: порт закрыт или сервис не слушает его

Проверьте одновременно три вещи: bind-address в конфиге, правило UFW и хост в определении пользователя (SELECT host FROM mysql.user WHERE user='myuser';) — без совпадения всех трёх подключение не пройдёт.

Варианты установки СУБД: сравнение

СУБДСовместимость с MySQLПроизводительность на VPSКогда выбрать
MariaDB (из репозитория Ubuntu)ПолнаяХорошая, оптимизирована по умолчаниюБольшинство проектов на VPS
MySQL Community Server—СопоставимаяТребование конкретного ПО (например, Oracle-специфика)
PostgreSQLНет, другой диалект SQLЛучше для сложных запросов и JSONАналитика, сложная бизнес-логика
SQLiteНетОтличная для малой нагрузки, без сервераНебольшие приложения, один процесс записи

Когда локальной MariaDB недостаточно

  • Нагрузка растёт быстрее, чем один VPS может обработать — потребуется отдельный сервер БД или репликация master-slave.
  • Приложению нужны сложные JSON-запросы или оконные функции — PostgreSQL часто удобнее для такой нагрузки, чем MariaDB.
  • Нужна высокая доступность без ручного вмешательства при падении сервера — потребуется кластер (Galera) или managed-решение, а не одиночный инстанс MariaDB.

Проверка результата

  1. Проверьте, что сервис запущен и добавлен в автозагрузку: systemctl is-enabled mariadb && systemctl is-active mariadb — оба должны вернуть положительный статус.
  2. Подключитесь под новым пользователем: mysql -u myuser -p myapp — вход должен пройти без ошибок.
  3. Проверьте права: SHOW GRANTS FOR 'myuser'@'localhost'; должен показать именно те права, что вы выдали.
  4. Проверьте, что бэкап действительно создаётся: ls -lh /backups/ должен содержать свежий файл после ручного запуска /usr/local/bin/db-backup.sh.

Резервное копирование конкретно для больших нагруженных баз описано отдельно в статье про автоматизацию бэкапов MySQL, а базовые права пользователей — в руководстве по привилегиям MySQL.

Статья помогла?
← Назад в базу знаний Задать вопрос поддержке