В этой статье разберём на примере Ubuntu/Debian:
- чем отличается MariaDB от MySQL на VPS;
- как установить сервер и проверить, что он запустился;
- как выполнить базовую «зачистку» через
mysql_secure_installation; - как создать отдельную базу и пользователя для проекта;
- как включить корректную кодировку
utf8mb4; - какие ошибки чаще всего вылезают и как из них выкарабкаться.
MariaDB или MySQL на VPS: что именно ставим
На современных Ubuntu/Debian по умолчанию ставится MariaDB — форк MySQL, полностью совместимый по протоколу и большинству команд. Для обычного сайта (WordPress, Bitrix, самописный PHP) нет разницы: как правило, достаточно MariaDB из стандартных репозиториев.
-
Если базы ещё нет — проще и безопаснее поставить MariaDB стандартным пакетом.
-
Если MySQL уже стоит (на старом сервере) — не нужно ставить MariaDB поверх, работайте с тем, что есть.
Дальше в статье будем говорить «MariaDB/MySQL», но команды будут даны так, чтобы они нормально отработали на типичной Ubuntu-VPS с MariaDB.
Установка MariaDB на Ubuntu/Debian
Сначала обновим список пакетов и поставим сервер и клиент:
sudo apt update
sudo apt install -y mariadb-server mariadb-client
Проверим, что служба запустилась:
sudo systemctl status mariadb
Если статус active (running) — всё ок. Если службы mariadb нет, на вашем образе может использоваться сервис mysql:
sudo systemctl status mysql
На всякий случай проверим, слушается ли порт 3306:
ss -tulpn | grep 3306 || echo "Порт 3306 не слушается"
Первичный вход в консоль и важный момент с root
На Ubuntu чаще всего root MySQL не имеет пароля, а авторизация идёт через Unix-сокет. Поэтому команда:
mysql -u root -p
может дать Access denied, хотя всё установлено правильно.
Правильный способ зайти после установки:
sudo mariadb
# или, если службы mariadb нет:
sudo mysql
Вы должны попасть в консоль вида:
MariaDB [(none)]>
Запомни: если что-то пошло не так с паролями и пользователями, почти всегда можно зайти так: sudo mariadb и уже внутри всё поправить.
Базовая защита: mysql_secure_installation
Скрипт mysql_secure_installation помогает удалить мусорные записи и при желании задать пароль root.
sudo mysql_secure_installation
Дальше по шагам (вариант для типичной новой установки MariaDB):
-
Enter current password for root (enter for none): На свежей Ubuntu чаще всего пароля нет — просто жмём Enter.
-
Set root password? [Y/n] Если хочешь логиниться как
rootс паролем, ответь Y, введи и запомни пароль. Если планируешь пользоваться толькоsudo mariadbи отдельным админ-юзером — можно ответить n. -
Remove anonymous users? [Y/n] — жми Y.
-
Disallow root login remotely? [Y/n] — лучше Y, root по сети обычно не нужен.
-
Remove test database and access to it? [Y/n] — Y.
-
Reload privilege tables now? [Y/n] — Y.
Если где-то ошибся — не страшно, дальше покажем, как создать нормального админа и базу.
Создаём отдельного администратора вместо root
Работать от root в базе — плохая идея. Гораздо безопаснее завести отдельного пользователя-администратора и уже от него создавать базы для сайтов.
Заходим в MariaDB:
sudo mariadb
Создаём админа (замени пароль на нормальный):
CREATE USER 'dbadmin'@'localhost' IDENTIFIED BY 'SlozhnyjParol_2025!';
GRANT ALL PRIVILEGES ON *.* TO 'dbadmin'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
Проверяем, что вход работает (из обычного пользователя):
mysql -u dbadmin -p
С этого момента для админских задач лучше использовать пользователя dbadmin, а не root.
Создание базы данных и пользователя для сайта
Допустим, у нас есть проект myproject. Для него создадим отдельную базу и пользователя.
Заходим под админом (root или dbadmin):
mysql -u dbadmin -p
Создаём базу в нормальной кодировке:
CREATE DATABASE myproject
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
Создаём пользователя только для этой базы:
CREATE USER 'myproject'@'localhost' IDENTIFIED BY 'SaitParol_2025!';
GRANT ALL PRIVILEGES ON myproject.* TO 'myproject'@'localhost';
FLUSH PRIVILEGES;
Проверяем вход:
mysql -u myproject -p
SHOW DATABASES;
В списке должна быть база myproject.
Настройка кодировки по умолчанию (utf8mb4)
Чтобы не ловить проблемы с эмодзи и русскими символами, лучше сразу включить utf8mb4 по умолчанию.
Открываем основной конфиг сервера MariaDB/MySQL (на Ubuntu обычно так):
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
Внутри ищем блок [mysqld] и добавляем в него строки (если их нет):
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
Сохраняем и перезапускаем сервер:
sudo systemctl restart mariadb
# или
sudo systemctl restart mysql
Проверяем в консоли:
SHOW VARIABLES LIKE 'character_set_server';
SHOW VARIABLES LIKE 'collation_server';
Должно быть utf8mb4 и utf8mb4_unicode_ci.
Удалённый доступ к базе: bind-address и фаервол
По умолчанию MariaDB слушает только 127.0.0.1 — это безопасно и правильно для обычного сайта. Если подключаться будет только PHP на этом же VPS, ничего менять не нужно.
Если же нужна удалённая админка (например, с рабочего компьютера через MySQL Workbench):
-
Открываем конфиг:
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf -
Находим строку:
bind-address = 127.0.0.1И меняем на IP сервера или
0.0.0.0(осторожно):bind-address = 0.0.0.0 -
Открываем порт в фаерволе только для своего IP (пример для UFW):
sudo ufw allow from YOUR.IP.ADDR.HERE to any port 3306 proto tcp -
Перезапускаем сервер:
sudo systemctl restart mariadb
Если не уверен, что делаешь — лучше вообще не открывать 3306 наружу, а подключаться через SSH-туннель.
Частые ошибки и как их чинить
-
Access denied for user ‘root’@’localhost’
Заходим так:
sudo mariadbИ меняем пароль root (если он нужен):
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NovyjParol_2025!'; FLUSH PRIVILEGES; -
ERROR 2002 (HY000): Can’t connect to local MySQL server through socket
Скорее всего, сервер не запущен:
sudo systemctl status mariadb sudo systemctl start mariadbЕсли не стартует — смотрим лог:
sudo journalctl -u mariadb -xe -
Не получается зайти под новым пользователем
Проверь хост в пользователе: если создал
'user'@'localhost', то зайти с другого сервера не получится — нужно'user'@'%'или конкретный IP. -
Проблемы с кодировкой (кракозябры)
Проверь:
SHOW VARIABLES LIKE 'char%';Если где-то
latin1— вернись к шагу сutf8mb4и настрой всё по умолчанию.
Итоги
-
Установили MariaDB/MySQL из стандартных репозиториев Ubuntu/Debian.
-
Зашли в консоль через
sudo mariadbи провели начальную «зачистку». -
Создали отдельного админа и пользователя/базу для проекта.
-
Настроили кодировку utf8mb4 и разобрались с bind-address.
-
Разобрали типичные ошибки: Access denied, проблемы с сокетом и кодировкой.
Вывод: главное — не работать под root, сразу заводить отдельные базы/пользователей и держать базу закрытой от внешнего мира. Тогда MariaDB/MySQL на VPS будет вести себя предсказуемо и безопасно.