Установка MySQL/MariaDB: mysql_secure_installation и создание базы
Запустить на сервере одной командой (сначала проверьте содержимое скрипта ниже):
curl -sSL https://cp.lv/scripts/ustanovit-mysql-mariadb.sh | sudo bash…или через wget:
wget -qO- https://cp.lv/scripts/ustanovit-mysql-mariadb.sh | sudo bashСодержимое скрипта ustanovit-mysql-mariadb.sh:
#!/usr/bin/env bash
# Установка MySQL, создание базы данных и пользователя
set -e
export DEBIAN_FRONTEND=noninteractive
DB_NAME=app_db
DB_USER=app_user
DB_PASS='СложныйПароль123!'
# 1. Установка сервера (для MariaDB замените на mariadb-server)
sudo apt-get update
sudo apt-get install -y mysql-server
sudo systemctl enable --now mysql
# 2. База в utf8mb4 и пользователь с правами только на неё
sudo mysql << EOF
CREATE DATABASE IF NOT EXISTS ${DB_NAME} CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER IF NOT EXISTS '${DB_USER}'@'localhost' IDENTIFIED BY '${DB_PASS}';
GRANT ALL PRIVILEGES ON ${DB_NAME}.* TO '${DB_USER}'@'localhost';
FLUSH PRIVILEGES;
EOF
echo "Готово: база ${DB_NAME} и пользователь ${DB_USER} созданы."
MySQL и совместимая с ней MariaDB — самые распространённые реляционные СУБД для веб-приложений. Команды почти идентичны, поэтому гайд подходит для обеих. Ниже — установка на Ubuntu, защита и создание базы под сайт.
Шаг 1. Установка сервера
Для MySQL:
sudo apt update
sudo apt install mysql-server -y
Для MariaDB (лёгкая альтернатива, полностью совместима):
sudo apt install mariadb-server -y
Включите автозапуск:
sudo systemctl enable --now mysql # для MariaDB: mariadb
Проверьте статус:
sudo systemctl status mysql
Шаг 2. Защита сервера
Скрипт mysql_secure_installation закрывает типовые дыры конфигурации по умолчанию:
sudo mysql_secure_installation
Отвечайте так:
- Validate password plugin — по желанию (включает проверку сложности паролей).
- Set root password — задайте надёжный пароль root.
- Remove anonymous users — Yes.
- Disallow root login remotely — Yes.
- Remove test database — Yes.
- Reload privilege tables — Yes.
Шаг 3. Вход в консоль
В свежей установке root входит через сокет без пароля:
sudo mysql
Если вы задали пароль и хотите входить обычным способом:
mysql -u root -p
Шаг 4. Создание базы и пользователя
Создайте базу с кодировкой utf8mb4 (поддержка эмодзи и всех языков) и отдельного пользователя:
CREATE DATABASE app_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'СложныйПароль123!';
GRANT ALL PRIVILEGES ON app_db.* TO 'app_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;
Выдавайте права только на нужную базу (app_db.*), а не на все (*.*) — это принцип наименьших привилегий.
Шаг 5. Проверка подключения
mysql -u app_user -p app_db
Введите пароль. Приглашение mysql> означает успешный вход. Проверьте список баз:
SHOW DATABASES;
Шаг 6. Удалённый доступ (опционально)
Если бэкенд на другом сервере, создайте пользователя с привязкой к конкретному IP и разрешите прослушивание. Откройте конфиг в редакторе (nano, vim или mcedit):
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
В секции [mysqld] укажите адрес прослушивания:
bind-address = 10.0.0.5
Либо создайте отдельный файл-override одной командой — скопируйте и вставьте в консоль (MySQL подхватит все .cnf из каталога):
sudo tee /etc/mysql/mysql.conf.d/zz-bind-address.cnf > /dev/null << 'EOF'
[mysqld]
bind-address = 10.0.0.5
EOF
CREATE USER 'app_user'@'10.0.0.10' IDENTIFIED BY 'СложныйПароль123!';
GRANT ALL PRIVILEGES ON app_db.* TO 'app_user'@'10.0.0.10';
FLUSH PRIVILEGES;
Откройте порт только для доверенного источника:
sudo ufw allow from 10.0.0.10 to any port 3306
sudo systemctl restart mysql
Частые вопросы
MySQL или MariaDB — что выбрать? Для большинства сайтов разница незаметна. MariaDB чуть легче и полностью совместима с приложениями под MySQL. MySQL от Oracle имеет некоторые корпоративные функции. Синтаксис SQL идентичен.
Почему root входит только через sudo mysql?
По умолчанию используется аутентификация через сокет (auth_socket). Чтобы включить вход по паролю: ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'пароль';.
Ошибка «Access denied for user» — что проверить?
Сверьте имя пользователя, хост ('user'@'localhost' ≠ 'user'@'%') и пароль. Хост в записи пользователя должен совпадать с источником подключения.
Зачем нужна кодировка utf8mb4?
Старая utf8 в MySQL хранит максимум 3 байта на символ и не поддерживает эмодзи. utf8mb4 — полноценный UTF-8, используйте её по умолчанию.
Базам данных нужен быстрый диск и стабильный ресурс. Под MySQL/MariaDB подойдут тарифы на странице аренда VPS и профильный VPS для баз данных.
