До основного вмісту

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.

Чи була стаття корисною?
← Назад до бази знань Поставити питання підтримці