cp.lv — VPS, выделенные и облачные серверы

cp.lv (LANGMARKET LLP) — хостинг-провайдер: VPS, выделенные и облачные серверы на NVMe с выбором ОС, полным root-доступом и поддержкой 24/7. Тест-период до оплаты: выделенные серверы — 5 дней, VPS и облако — 5 часов.

Contact Info
LANGMARKET LLP
Rīga, Latvija

+371 00 000 000

Follow Us

Личный кабинет

Язык

Установка MySQL/MariaDB: mysql_secure_installation и создание базы

Установка 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 для баз данных.

Роман Соколов

Роман Соколов

Системный администратор. Обслуживает серверные узлы и мониторинг инфраструктуры 24/7, реагируя на инциденты.