MySQL простыми словами: где хранятся заказы, пользователи и товары на вашем сайте
MySQL - одна из самых распространённых баз данных в мире веба. Именно в ней на большинстве хостингов лежат пользователи (логины, email, пароли), товары (названия, цены, остатки) и заказы (состав корзины, сумма, статус оплаты). Если у вас WordPress, OpenCart, Bitrix или типовой интернет-магазин на PHP, с высокой вероятностью «память» сайта - это MySQL. Владельцу бизнеса не нужно писать SQL-запросы, но понимать, где и как хранятся данные клиентов - значит не терять заказы при смене хостинга, вовремя делать бэкапы и не путать «файлы на диске» с «таблицами в базе».
- MySQL - реляционная база данных: данные лежат в таблицах со связями
- Пользователи - отдельная таблица: email, хеш пароля, роль, дата регистрации
- Товары - каталог: артикул, цена, описание, остаток на складе
- Заказы - связка клиента, товаров, суммы и статуса доставки
- Где встречается - WordPress, WooCommerce, OpenCart, Bitrix, Laravel, многие хостинги
- Главный риск - нет бэкапа БД, один логин на все проекты, устаревшая версия MySQL
Что такое MySQL простыми словами
MySQL - программа на сервере, которая хранит данные в таблицах. Таблица похожа на Excel: строки - записи, столбцы - поля. Разница в том, что MySQL одновременно обслуживает сайт, админку и JavaScript-корзину, не даёт двум менеджерам «перезаписать» одну ячейку и умеет связывать таблицы между собой.
Схема для типичного сайта:
- Посетитель нажимает «Оформить заказ».
- PHP (или другой backend) получает данные формы.
- PHP отправляет в MySQL команды: «создай заказ», «спиши остаток», «сохрани email клиента».
- MySQL записывает данные на диск сервера - в файлы базы, а не в HTML-страницу.
- Пользователь видит «Спасибо за заказ» - это уже результат чтения из MySQL.
Важно: картинки товаров, PDF и логотип лежат в файловой системе (папки на сервере). MySQL хранит ссылку на файл и метаданные: цена, название, SEO-заголовок. Удалить папку uploads - и в базе останутся «битые» пути к картинкам.
| Что хранится | Где физически | Пример |
|---|---|---|
| Текст страницы, цена, email | MySQL (таблицы) | wp_posts, oc_product |
| Фото товара, видео | Папки на диске | /uploads/2026/07/photo.jpg |
| Код сайта | PHP-файлы | index.php, плагины |
| Кеш страниц | Файлы или Redis | ускорение, не «источник правды» |
Где хранятся пользователи, товары и заказы
Пользователи (users)
Таблица пользователей - «картотека клиентов и сотрудников». Типичные поля:
- id - уникальный номер записи;
- email / login - для входа в личный кабинет;
- password_hash - не сам пароль, а его хеш (так безопаснее);
- role - клиент, менеджер, администратор;
- created_at - дата регистрации.
В WordPress это таблица wp_users, в OpenCart - oc_customer, в Bitrix - свои таблицы с префиксом. Один пользователь - одна строка. Если клиент оформил пять заказов, в таблице users он всё равно один, а заказы ссылаются на его id.
Товары (products)
Каталог - отдельная таблица (или несколько связанных):
- sku / артикул - внутренний код;
- name, description - название и описание для сайта;
- price - цена; часто отдельно
special_priceдля акций; - quantity / stock - остаток на складе;
- category_id - связь с категорией «Обувь», «Электроника».
Категории, бренды, фильтры - другие таблицы, связанные через внешние ключи. Именно поэтому «просто поправить цену в Excel» на живом сайте не работает: цена в MySQL, а сайт читает её через PHP при каждом просмотре карточки.
Заказы (orders)
Заказ - это событие, которое связывает клиента, товары и деньги:
| Таблица | Что хранит |
|---|---|
orders |
Номер заказа, user_id, сумма, статус, адрес доставки |
order_items |
Какие товары в заказе, количество, цена на момент покупки |
payments |
Статус оплаты, ID транзакции Payme/Stripe/Click |
order_status_history |
«Создан → Оплачен → Отправлен → Доставлен» |
Почему отдельная таблица позиций: цена товара в каталоге меняется, а в заказе должна остаться та, что была при покупке. Поэтому order_items хранит снимок цены, а не только ссылку на текущую карточку.
Как MySQL работает вместе с вашим сайтом
Сайт не открывает MySQL напрямую. Цепочка такая:
Браузер → PHP/Python/Node.js → MySQL → ответ → HTML/JSON → пользователь
PHP (WordPress, Bitrix, OpenCart) - самый частый «переводчик». Он:
- проверяет логин и пароль по таблице users;
- выбирает товары для каталога:
SELECT * FROM products WHERE category_id = 5; - создаёт заказ в транзакции: либо всё записалось, либо откат при ошибке.
JavaScript в браузере обычно не ходит в MySQL напрямую - это было бы дырой в безопасности. JS вызывает API (PHP-скрипт), а тот уже работает с базой. Исключение - редкие антипаттерны; нормальная архитектура всегда через backend.
Где физически лежит MySQL
На shared-хостинге (Timeweb, Beget, Hostinger) MySQL - отдельный сервис: вам дают хост, имя базы, логин и пароль. Данные лежат на дисках провайдера; вы управляете через phpMyAdmin или панель хостинга.
На VPS/VDS MySQL ставит администратор или подрядчик; файлы базы - в /var/lib/mysql/ (Linux).
В облаке (AWS RDS, DigitalOcean Managed DB) - managed-сервис: меньше возни с обновлениями, плата по подписке.
Типичные таблицы интернет-магазина
Упрощённая схема, которую можно показать директору на одном слайде:
users ──────┬──── orders ────── order_items ────── products
│ │
│ └──── payments
│
└──── addresses (адреса доставки)
categories ─── products
brands ─────── products
users → orders: один клиент, много заказов.
orders → order_items → products: один заказ, несколько позиций, каждая ссылается на товар.
products → categories: товар в одной или нескольких категориях.
Когда спрашивают «сколько мы продали кроссовок Nike за март» - это SQL-запрос к таким таблицам. Подробнее о языке запросов и роли SQL для руководства - в отдельной статье.
MySQL и популярные CMS
| CMS / платформа | База по умолчанию | Где заказы и клиенты |
|---|---|---|
| WordPress | MySQL / MariaDB | wp_users, wp_posts, WooCommerce: wp_wc_* |
| WooCommerce | MySQL | wp_posts (заказы как тип записи), мета-таблицы |
| OpenCart | MySQL | oc_order, oc_customer, oc_product |
| 1C-Bitrix | MySQL | Собственная схема, интеграция с 1С |
| Laravel / PHP custom | MySQL или PostgreSQL | Таблицы по миграциям разработчика |
| Django | PostgreSQL чаще | MySQL тоже возможен |
MariaDB - форк MySQL, совместимый «из коробки». На многих хостингах в панели написано «MySQL», а под капотом MariaDB - для сайта разницы почти нет.
Если сайт на Django или современном Python-стеке, чаще выбирают PostgreSQL, но принцип тот же: таблицы users, products, orders - просто другие имена и типы полей.
Чем MySQL отличается от PostgreSQL и Excel
| Критерий | Excel | MySQL | PostgreSQL |
|---|---|---|---|
| Одновременные заказы с сайта | Нет | Да | Да |
| Типичный WordPress-хостинг | - | Включён | Реже |
| Сложная аналитика | Ограничена | Хорошо | Очень хорошо |
| Стоимость старта | $0 | $0 - $20/мес на хостинге | Аналогично |
| Кто выбирает | Менеджер «на коленке» | CMS, PHP-магазины | Новые веб-проекты, SaaS |
Для владельца бизнеса: MySQL - не «хуже» PostgreSQL, а стандарт экосистемы PHP-CMS. Менять MySQL на PostgreSQL «просто так» при работающем WordPress - лишние расходы. Менять имеет смысл при новой разработке или когда упираетесь в лимиты и нужна другая архитектура.
Excel оставьте для разовых расчётов. Операционные заказы и клиенты - в MySQL (или другой БД), иначе сайт и склад живут в разных мирах.
Что должен знать владелец бизнеса
Бэкап базы - не опция, а обязанность
Потеря MySQL без бэкапа = потеря всех заказов, клиентов и паролей (хешей). Файлы темы WordPress можно скачать по FTP; заказы восстановить нельзя, если не было дампа .sql или автобэкапа хостинга.
Минимум:
- ежедневный автобэкап через панель хостинга;
- перед обновлением CMS и плагинов - ручной дамп;
- хранить копию не только на том же сервере.
Доступы к MySQL
Логин и пароль к базе - как ключ от сейфа. Не вставлять в публичный GitHub, не слать в общий чат с подрядчиками «навсегда». Отдельный пользователь БД для каждого проекта; права «только чтение» для аналитика, если нужен прямой доступ.
Версия MySQL
Устаревший MySQL 5.7 (или 5.6) - риск безопасности и несовместимости с новыми версиями PHP и CMS. При SEO-аудите и техосмотре сайта версию БД проверяют вместе с версией PHP.
Миграция на другой хостинг
Перенос сайта = файлы + дамп MySQL + настройка config (хост, логин, пароль, имя базы). «Скопировали только папку public_html» - сайт откроется, но заказов не будет. Это частая ошибка при смене хостинга «своими силами».
Типичные проблемы и риски
«Сайт тормозит» - виноват MySQL?
Иногда да: нет индексов на таблице заказов за три года, каталог на 50 000 SKU без оптимизации, дешёвый хостинг с перегруженным общим MySQL. Иногда нет - виноваты тяжёлые плагины, отсутствие кеша, картинки по 5 MB. Диагностику делает разработчик; владельцу достаточно знать, что база - часть производительности, не только «скорость интернета».
Дубли клиентов и «потерянные» заказы
Бывает при ручном импорте Excel в MySQL, при двух формах заказа (сайт + Telegram без синхронизации), при сбое оплаты: деньги списались, а PHP не успел записать заказ. Решение - транзакции, webhooks платёжки, интеграция с CRM, а не «ещё одна таблица в Google Sheets».
Взлом через SQL-инъекцию
Если подрядчик пишет «сырой» PHP без параметризованных запросов, злоумышленник может прочитать или удалить таблицы. Признак зрелости - использование ORM, prepared statements, регулярные обновления CMS. После взлома WordPress первым делом проверяют админов в wp_users и посторонние записи в базе.
Рост данных
100 заказов в месяц MySQL переваривает на любом хостинге. 10 000 заказов в день - нужны индексы, архивация старых логов, возможно отдельный сервер БД. Планируйте архив заказов старше 2-3 лет, если отчётность уже в BI или 1С.
Когда MySQL «не видно», но она есть
- Конструкторы (Tilda, Wix) - данные форм на их серверах, не ваш MySQL.
- SaaS CRM (amoCRM, HubSpot) - клиенты в облаке CRM; сайт связан через API.
- Маркетплейсы (Wildberries, Ozon) - заказы на стороне площадки; ваш сайт может вообще без MySQL, если это только визитка.
Если же у вас собственный домен, WordPress, OpenCart, Bitrix - MySQL почти наверняка есть. Уточните у подрядчика: «Где хранятся заказы и есть ли ежедневный бэкап базы?»
Итог
MySQL - место, где на типичном PHP-сайте живут пользователи, товары и заказы. Это не папка на диске и не «настройка в админке» - отдельная программа на сервере с таблицами и правилами целостности. PHP читает и пишет в MySQL; JavaScript показывает результат пользователю; картинки лежат отдельно в файлах.
Владельцу бизнеса стоит:
- знать, что бэкап базы так же важен, как бэкап файлов сайта;
- не хранить единственную копию заказов в Excel;
- при смене хостинга требовать перенос дампа MySQL, а не только FTP;
- понимать разницу между «упал сайт» (PHP/хостинг) и «пропали данные» (MySQL без бэкапа).
Хорошая MySQL незаметна - пока есть актуальный бэкап и доступы под контролем. Плохая - когда об этом вспоминают после исчезновения трёх лет заказов.
Часто задаваемые вопросы
Где физически хранятся данные MySQL на моём хостинге?
На серверах хостинг-провайдера - в специальных файлах базы данных, обычно на тех же машинах, что и сайт (shared) или на выделенном DB-сервере (VPS/облако). Вы не видите их как обычные папки в FTP: доступ через phpMyAdmin, панель хостинга или команду экспорта. Бэкап - это скачанный .sql-файл или автоматическая копия в панели; без него «где лежит» не спасёт при поломке диска.
Можно ли посмотреть заказы в MySQL без программиста?
Частично да. В phpMyAdmin можно открыть таблицу заказов и увидеть строки - номер, сумму, дату. Но имена таблиц (wp_wc_orders, oc_order) и связи между ними знает разработчик; случайное редактирование может сломать сайт или показать неверные суммы. Для ежедневной работы лучше админка CMS или CRM; прямой доступ к MySQL - для техподдержки, миграций и аудита.
Чем MySQL отличается от MariaDB?
MariaDB - ответвление MySQL, созданное после смены владельца Oracle. Для WordPress, OpenCart и Bitrix они взаимозаменяемы в типичной конфигурации. Хостинг часто пишет «MySQL» в тарифе, а ставит MariaDB - это нормально. Владельцу важнее версия (не ниже 8.0 / 10.6+) и наличие бэкапов, а не название на логотипе.
Потеряю ли я заказы, если сменю хостинг?
Нет, если перенесёте дамп базы. Алгоритм: экспорт MySQL со старого хостинга → импорт на новом → обновление логина/пароля/хоста в wp-config.php или аналоге → проверка тестового заказа. Да, потеряете, если скопируете только файлы сайта без .sql. Перед миграцией сделайте полный бэкап и проверьте количество заказов в админке до и после.
Нужен ли MySQL, если у меня только лендинг на Tilda?
Нет для самого Tilda - заявки хранятся у конструктора или уходят на email/CRM. Да, если параллельно есть WordPress-блог, OpenCart или самописный личный кабинет на поддомене. Уточните архитектуру: один «красивый лендинг» без CMS может обходиться без MySQL; интернет-магазин с историей заказов - без базы данных не обойтись.