В Debian и Ubuntu вместо MySQL обычно ставят MariaDB — совместимый форк с теми же командами и протоколом. Большинство приложений для MySQL работают с ней без изменений.
Установка
$ apt update$ apt install -y mariadb-server$ systemctl enable --now mariadb$ mariadb --versionБазовая защита
$ mariadb-secure-installationВ Ubuntu 22.04 команда называется mysql_secure_installation. Скрипт удаляет анонимных пользователей и тестовую базу, запрещает удалённый вход root. Root по умолчанию входит через unix_socket — без пароля, но только от системного root. Это безопасно, менять не обязательно.
База и пользователь
Для каждого приложения — своя база и свой пользователь с правами только на неё:
$ mariadbCREATE DATABASE appdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;CREATE USER 'app'@'localhost' IDENTIFIED BY 'надёжный-пароль';GRANT ALL PRIVILEGES ON appdb.* TO 'app'@'localhost';FLUSH PRIVILEGES;Для отчётов или бэкапов заведите отдельного пользователя только на чтение:
CREATE USER 'reader'@'localhost' IDENTIFIED BY 'другой-пароль';GRANT SELECT, SHOW VIEW, LOCK TABLES, TRIGGER, EVENT ON appdb.* TO 'reader'@'localhost';Где настройки
Основной файл — /etc/mysql/mariadb.conf.d/50-server.cnf. Там задаётся адрес (по умолчанию bind-address = 127.0.0.1) и размер буфера InnoDB. На небольшом сервере, где рядом работает приложение, оставьте под буфер примерно четверть памяти:
[mysqld]bind-address = 127.0.0.1innodb_buffer_pool_size = 512M$ systemctl restart mariadbПроверьте результат
$ mariadb -u app -p -h 127.0.0.1 appdb -e 'SELECT CURRENT_USER();'$ ss -tlnp | grep 3306Частые ошибки
- «Access denied for user 'app'@'127.0.0.1'» — пользователь создан для хоста localhost (сокет), а приложение ходит по TCP. Подключайтесь к localhost или создайте пользователя и для 127.0.0.1.
- Кракозябры вместо кириллицы — база или таблицы в latin1. Создавайте с utf8mb4 и указывайте charset в строке подключения.
- MariaDB не стартует после правки конфига — смотрите
journalctl -u mariadb -n 50, чаще всего опечатка или буфер больше доступной памяти.