Yandex Metrika
sanches.free

Режимы mysqldump для копии базы 1С‑Битрикс

Зачем администратору Битрикса раскладывать режимы mysqldump

Одна база обслуживает ядро, инфоблоки, торговый каталог и журналы. Для переноса на новый сервер, для песочницы разработчика или для выборочного восстановления удобно заранее выбрать что попадёт в дамп: только определения таблиц, данные без массивных логов, отдельные таблицы с префиксом b_iblock_. Ниже — практичные шаблоны под связку mysqldump + типовая схема 1С‑Битрикс, без копирования чужих скриптов буква в букву.

Схема, процедуры и события без строк

Когда нужен «каркас» для сравнения миграций или быстрый просмотр индексов на копии, достаточно дампа структуры. Флаг --no-data исключает строки; --routines и --events подтягивают процедуры и события — уточняйте по политике хостинга, часть площадок ограничивает восстановление процедур от непривилегированного пользователя.

mysqldump --no-data --routines --events имя_базы > schema_only.sql

Построчные INSERT и «полный» список столбцов

По умолчанию mysqldump группирует строки в длинные INSERT — быстрее для импорта, но неудобно, если нужно прогнать grep или вырезать одну запись из текста. Включают построчный режим и явные имена колонок:

  • --extended-insert=FALSE — по одному VALUES на строку таблицы;
  • --complete-insert=TRUE — в каждом INSERT перечислены столбцы (удобнее при смене схемы на приёмнике).

Кодировку лучше зафиксировать, чтобы кириллица в свойствах инфоблоков не «поехала» при переносе между серверами.

mysqldump --default-character-set=utf8mb4 \
  --extended-insert=FALSE --complete-insert=TRUE \
  имя_базы > dump_postrochno.sql

Исключить одну таблицу

Тяжёлую или чужую таблицу можно выложить из дампа повтором ключа --ignore-table для каждого исключения. Имя всегда в формате база.таблица.

mysqldump имя_базы \
  --ignore-table=имя_базы.b_search_content \
  --ignore-table=имя_базы.b_user_statistics \
  > bez_poiska_i_stat.sql

Выбирайте исключения по факту профилирования: на одном проекте больше всего весит история поиска, на другом — временный импорт в промежуточную таблицу.

Несколько пользовательских баз без служебных схем

Вариант ниже собирает список баз из information_schema, отбрасывает системные имена и передаёт его в mysqldump --databases. Так проще, чем вручную перечислять десяток схем на shared-хостинге. Если имён очень много, помните про лимит длины аргумента в оболочке и при необходимости бейте выгрузку на части.

SQL="SELECT schema_name FROM information_schema.schemata \
  WHERE schema_name NOT IN ('information_schema','mysql','performance_schema','sys')"
MYSQLDUMP_DBS="--databases"
for DB in $(mysql -N -e "$SQL"); do
  MYSQLDUMP_DBS="$MYSQLDUMP_DBS $DB"
done
mysqldump --routines --triggers $MYSQLDUMP_DBS > all_user_databases.sql

Альтернатива через GROUP_CONCAT в одном запросе упирается в group_concat_max_len; для длинных списков баз это не надёжнее цикла.

Каждая таблица в свой файл и префикс инфоблоков

Для точечного сравнения или параллельного сжатия удобно складывать таблицы по отдельности. Обход SHOW TABLES в цикле — универсальный приём. Для среза только таблиц инфоблоков в базе Битрикса фильтруйте имена в запросе к information_schema.tables:

DB_NAME='имя_базы'
OUT_DIR='./dumps_iblock'
mkdir -p "$OUT_DIR"
mysql -N information_schema -e \
"SELECT table_name FROM tables
 WHERE table_schema = '$DB_NAME' AND table_name LIKE 'b_iblock_%'" \
| while read -r TBL; do
  echo "$TBL"
  mysqldump "$DB_NAME" "$TBL" | gzip > "$OUT_DIR/${TBL}.sql.gz"
done

Пароль и хост передавайте стандартно (--host, --user, --defaults-extra-file), избегайте -pPAROL в истории команд. На копии проекта проверяйте размер и целостность архивов до пересылки.

«Умный» дамп без перекачивания гигантских логов

На продакшене порой нужна бизнес-логика и справочники целиком, а из таблиц вида журналов — только хвост по первичному ключу. Универсального флага нет: для каждой «тяжёлой» таблицы имеет смысл отдельный вызов mysqldump с условием --where, если достаточно последних N записей по монотонному ключу. Остальной объём базы выгружайте обычным списком таблиц без этих исключений, затем накладывайте суженный дамп сверху или импортируйте по порядку на тестовый стенд. Так вы сокращаете время и место на диске по сравнению с полным клоном — ровно в духе ускорения работы с копией, а не боя.

При накате на другой инстанс проверяйте совместимость опций: при ошибках из-за статистики столбцов в mysqldump 8 при работе с более старым сервером иногда добавляют --column-statistics=0. Перед восстановлением на живом сайте согласуйте окно обслуживания и при необходимости отключите запись в кеш и сессии на время импорта.

Итог

Для окружения с 1С‑Битрикс mysqldump — базовый инструмент: от чистой схемы до выборочных таблиц b_iblock_* и аккуратных исключений. Смысл ускорения здесь — меньше лишних данных в файле и быстрее воспроизводимый стенд для отладки SQL и обменов.

Не хотите копаться сами?

Починю за 1-3 дня. Без предоплаты — оплата по результату.

15+ лет опыта с 1С-Битрикс · Без предоплаты · 7 дней гарантии