Создание базы данных MySQL для сайта через командную строку
Хочу себе такие же кнопкиВведение
Вы уже запустили виртуальный сервер на VDSina и хотите, чтобы ваш сайт мог хранить данные – пользователи, товары, комментарии и т.д. Самый популярный способ – это MySQL. В этом уроке вы узнаете, как за несколько минут создать базу данных и пользователя, настроить доступ через командную строку и проверить, что всё работает. Всё без графических панелей, только терминал – так вы получаете полное понимание того, что происходит «под капотом».
1. Подготовка к работе
| Шаг | Что делаем | Почему это важно |
|---|---|---|
| 1.1 | Подключаемся к серверу по SSH | Без доступа к терминалу нельзя управлять MySQL |
| 1.2 | Проверяем, установлен ли MySQL | На новых VPS‑инстансах иногда MySQL не предустановлен |
| 1.3 | Обновляем список пакетов | Чтобы установить последнюю стабильную версию |
Команды
# 1.1 Подключаемся (замените user и ip на свои)
ssh user@your-vds-ip
# 1.2 Проверяем наличие mysql
mysql --version
# 1.3 Обновляем пакеты (для Debian/Ubuntu)
sudo apt update && sudo apt upgrade -y
Если mysql не найден, установим его:
sudo apt install mysql-server -y
Совет: При установке MySQL на Ubuntu вы будете предложены задать пароль для пользователя
root. Запомните его – он понадобится позже.
2. Заходим в MySQL под администратором
sudo mysql -u root -p
После ввода пароля вы окажетесь в интерактивной оболочке MySQL, где будет подсказка mysql>.
Аналогия: Это как открыть «пульт управления» вашего сайта, где вы можете создавать и менять «комнаты» (базы данных) и «ключи» (пользователей).
3. Создание базы данных
Синтаксис
CREATE DATABASE имя_базы CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CHARACTER SET utf8mb4– поддержка всех символов Юникода, включая эмодзи.COLLATE utf8mb4_unicode_ci– правильная сортировка и сравнение строк.
Пример
CREATE DATABASE shop CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Проверим, что база появилась:
SHOW DATABASES;
Вы должны увидеть строку shop.
4. Создание пользователя и выдача прав
Для безопасности лучше не использовать root в приложении. Создадим отдельного пользователя shop_user.
CREATE USER 'shop_user'@'localhost' IDENTIFIED BY 'Сложный_пароль_123';
Зачем
localhost? Пользователь сможет подключаться только с самого сервера. Если нужен удалённый доступ, заменитеlocalhostна%(все хосты) или на конкретный IP.
Выдача прав
GRANT ALL PRIVILEGES ON shop.* TO 'shop_user'@'localhost';
FLUSH PRIVILEGES;
ALL PRIVILEGES– полный набор прав (создание таблиц, вставка, обновление, удаление).shop.*– все таблицы в базеshop.FLUSH PRIVILEGES– сообщаем серверу, что список прав изменился.
Проверка прав:
SHOW GRANTS FOR 'shop_user'@'localhost';
5. Тестовый вход под новым пользователем
Выйдите из текущей сессии:
EXIT;
Затем войдите под shop_user:
mysql -u shop_user -p shop
Введите пароль, который задали ранее. Если всё ок, вы сразу окажетесь в базе shop. Попробуйте выполнить простую команду:
SHOW TABLES;
Поскольку таблиц ещё нет, результат будет пустым – это нормально.
6. Создание первой таблицы
Для примера создадим таблицу products (товары).
CREATE TABLE products (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
price DECIMAL(10,2) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
INT UNSIGNED AUTO_INCREMENT– автоматический идентификатор без отрицательных значений.DECIMAL(10,2)– точные денежные суммы (10 цифр, 2 после запятой).InnoDB– транзакционный движок, поддерживает внешние ключи.
Проверим структуру:
DESCRIBE products;
7. Вставка и чтение данных
INSERT INTO products (name, price) VALUES
('Товар А', 199.99),
('Товар Б', 49.50),
('Товар В', 1234.00);
Читаем:
SELECT * FROM products;
Вы должны увидеть три строки с автогенерированными id.
8. Резервное копирование (бэкап) через mysqldump
Бэкап – это «сохранить копию» вашей базы, чтобы в случае сбоя быстро восстановить данные.
mysqldump -u shop_user -p shop > shop_backup.sql
Файл shop_backup.sql содержит все DDL и DML‑операции, необходимые для восстановления.
Восстановление
mysql -u shop_user -p shop < shop_backup.sql
9. Настройка удалённого доступа (по желанию)
Если ваш веб‑приложение находится на отдельном сервере, потребуется открыть доступ из внешней сети.
-
Разрешаем соединения в MySQL
CREATE USER 'shop_user'@'%' IDENTIFIED BY 'Сложный_пароль_123'; GRANT ALL PRIVILEGES ON shop.* TO 'shop_user'@'%'; FLUSH PRIVILEGES; -
Открываем порт 3306 в брандмауэре (пример для
ufw)sudo ufw allow 3306/tcp -
Настраиваем
mys.cnf– отключаем привязку только к127.0.0.1
Откройте файл/etc/mysql/mysql.conf.d/mysqld.cnfи найдите строкуbind-address = 127.0.0.1Замените на
bind-address = 0.0.0.0Затем перезапустите сервис:
sudo systemctl restart mysql
Внимание: Открывать MySQL в интернет безопасно только при надёжных паролях и ограничении доступа по IP (через
firewallилиmy.cnf).
10. Проверка работы из PHP (кратко)
Если ваш сайт написан на PHP, подключение выглядит так:
<?php
$dsn = 'mysql:host=127.0.0.1;dbname=shop;charset=utf8mb4';
$user = 'shop_user';
$pass = 'Сложный_пароль_123';
try {
$pdo = new PDO($dsn, $user, $pass, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
]);
echo "Подключение успешно!";
} catch (PDOException $e) {
echo "Ошибка: " . $e->getMessage();
}
?>
Сохраните файл как test.php в корень сайта и откройте в браузере – должно вывести Подключение успешно!.
11. Полезные команды для администрирования
| Команда | Описание |
|---|---|
systemadmin |
Показать статус сервера MySQL |
SHOW PROCESSLIST; |
Список текущих запросов (полезно для поиска «зависших» запросов) |
EXPLAIN SELECT … |
Показать план выполнения запроса (оптимизация) |
SELECT NOW(); |
Текущее время сервера (полезно для отладки тайм‑зон) |
SHOW VARIABLES LIKE 'max_connections'; |
Максимальное количество одновременных соединений |
Практика для закрепления
-
Создайте новую базу
blogс кодировкойutf8mb4. Затем создайте пользователяblog_userс паролемMyBlog2026!и дайте ему все права только на эту базу. Проверьте вход подblog_user. -
Сделайте таблицу
postsсо столбцами:id(auto‑increment),title(VARCHAR 150),content(TEXT),author_id(INT),published_at(DATETIME). Вставьте три записи и выполните запрос, который выводит только опубликованные посты (published_atне NULL). -
Сделайте бэкап базы
blogв файлblog_backup.sql. Затем удалите таблицуpostsи восстановите её из бэка. Убедитесь, что данные вернулись. -
Откройте удалённый доступ для пользователя
blog_userтолько с IP‑адреса203.0.113.45. Проверьте, что попытка подключения с другого IP‑адреса завершается ошибкой. -
Оптимизируйте запрос: у вас есть таблица
ordersс колонкойorder_date. Напишите запрос, который считает количество заказов за каждый месяц текущего года, и объясните, почему стоит добавить индекс поorder_date.
Заключение
Теперь у вас есть полностью рабочая MySQL‑база, готовая обслуживать любой веб‑сайт, запущенный на VDSina. Вы умеете создавать базы, управлять пользователями, делать бэкапы и открывать безопасный удалённый доступ. Эти навыки – фундамент для дальнейшего роста: репликация, шардирование, мониторинг и оптимизация запросов. Удачной разработки!
Ссылка на 🏰 VDSina с партнёрским кодом: https://vdsina.ru?partner=5095
Введение: чем VDS отличается от шаред-хостинга и зачем это веб-мастеру
Как правильно выбрать тариф: CPU, RAM, NVMe или SSD, канал
Выбор операционной системы: почему Ubuntu 22.04/24.04 — стандарт индустрии
Регистрация домена и первичная настройка DNS-записей (A, AAAA, CNAME)
Генерация SSH-ключей на локальном компьютере (Windows/Mac/Linux)
Добавление публичного ключа на сервер и первый вход по SSH
Отключение входа по паролю и запрет авторизации для root
Смена стандартного порта SSH для снижения шума в логах
Создание основного рабочего пользователя с правами sudo
Базовое обновление системы и установка необходимых утилит (curl, wget, git, htop)
Настройка часового пояса и синхронизация времени (NTP)
Установка и базовая настройка фаервола UFW
Разрешение только необходимых портов (SSH, HTTP, HTTPS)
Установка Fail2Ban для защиты от перебора паролей
Настройка правил Fail2Ban для SSH и веб-сервера
Знакомство с Docker: установка движка и CLI
Установка Docker Compose для управления мульти-контейнерными приложениями
Основы изоляции: почему каждый проект должен быть в своем контейнере
Подготовка файловой структуры сервера для удобного хранения проектов
Развертывание Nginx как обратного прокси-сервера через Docker
Настройка конфигурации Nginx для статических сайтов
Установка PHP-FPM в отдельном контейнере
Связка Nginx и PHP-FPM через внутреннюю Docker-сеть
Оптимизация настроек PHP-FPM (pm.max_children, memory_limit) под нагрузку
Установка MariaDB/MySQL в изолированном контейнере
Безопасное хранение паролей от БД через переменные окружения (.env)
Подключение к базе данных из внешнего клиента (DBeaver/Navicat) через туннель
Установка Redis для кэширования запросов и сессий
Интеграция Redis с PHP-приложением для ускорения работы
Автоматическая выдача SSL-сертификатов через Certbot (Let's Encrypt)
Настройка автопродления SSL-сертификатов по крону
Принудительный редирект с HTTP на HTTPS в Nginx
Включение gzip и brotli сжатия для ускорения загрузки страниц
Настройка кэширования статики (browser caching) в заголовках Nginx
Защита от простых DDoS и ботов: модуль limit_req в Nginx
Настройка резервного копирования баз данных (mysqldump) по расписанию
Настройка резервного копирования файлов проектов (tar)
Отправка бэкапов на удаленное хранилище (S3-compatible storage или другой сервер)
Ротация и очистка старых логов, чтобы не забить диск
Мониторинг нагрузки: установка и настройка htop и iotop
Просмотр логов в реальном времени: tail, grep и journalctl
Установка простого мониторинга доступности (Uptime Kuma или скрипт в Telegram)
Изоляция арбитражных инструментов: запуск ботов в отдельных контейнерах
Установка SOCKS5/HTTP прокси (3proxy) внутри Docker для мультиаккаунтинга
Настройка аутентификации и ограничения доступа к прокси по IP
Проверка анонимности и работы прокси-сервера
Оптимизация ядра Linux (sysctl.conf) для высоких нагрузок и сетевых соединений
Настройка swap-файла: когда он нужен, а когда вредит
Чек-лист финальной проверки безопасности перед запуском проекта
План действий при взломе или падении сервера: восстановление из бэкапа
АПТЕЧКА ДЛЯ ЖИВОТНЫХ
Автомобили Германии — FORD, MERSEDES, VW, IVECO
Чат рулетка 2026: чаты, где каждый момент — шанс
Чат рулетка онлайн
Чат с Аней: психологический разговор
Чатрулетка: новый способ общения
Чай и кофе: сила вкуса
Детские игрушки из безопасных материалов
Эксплуатация шин: Рекомендации по использованию
Фототехника для пейзажей
Как Aptum хостинг помогает малым бизнесам в управлении CRM-системами
Как выбрать Vdsina вечный хостинг для своего проекта
Компоненты безопасности IP
Конкуренция на российском автомобильном рынке
Онлайн генератор паролей для Windows
Оптимизация обработки форм GEO проекта
Сервер для социальных сетей: Безопасность, Скорость, Изоляция
Смешные моменты
Сравнение Arsys хостинг сервисов для блогеров с WordPress на 2023 год
Весь экран под циферблат