Skip to content

Команды работы с базой данных

Команды для получения информации о базе данных.

db:info

Выводит информацию о базе данных: тип, версия, количество таблиц и размер.

Синтаксис

bash
php bitrix.php db:info [опции]

Опции

  • -v, -vv - подробный вывод с дополнительной информацией
  • --show-tables - показать список всех таблиц
  • --show-size-details - показать размер каждой таблицы

Примеры использования

bash
# Базовая информация о БД
php bitrix.php db:info

# С подробной информацией
php bitrix.php db:info -v

# Со списком таблиц
php bitrix.php db:info --show-tables

# С размерами таблиц
php bitrix.php db:info --show-size-details

# Полная информация
php bitrix.php db:info -vv --show-tables --show-size-details

Вывод команды

Команда выводит следующую информацию:

Основная информация:

  • Тип СУБД (MySQL, PostgreSQL, MSSQL, Oracle)
  • Версия СУБД
  • Хост подключения
  • Имя базы данных
  • Пользователь подключения

Статистика:

  • Общее количество таблиц
  • Количество таблиц Битрикс (префикс b_)
  • Общий размер базы данных
  • Размер данных
  • Размер индексов

Дополнительная информация (с опцией -v):

  • Кодировка базы данных
  • Кодировка подключения
  • Режим SQL
  • Максимальный размер пакета
  • Параметры буферизации

Список таблиц (с опцией --show-tables):

  • Имя таблицы
  • Количество строк
  • Размер данных
  • Размер индексов
  • Общий размер

Использование в мониторинге

Мониторинг размера базы данных

bash
#!/bin/bash
# Проверка размера БД и предупреждение при превышении лимита

cd /var/www/bitrix

# Получить размер БД в МБ
DB_SIZE=$(php bitrix.php db:info | grep "Общий размер" | grep -oP '\d+' | head -1)

# Установить лимит (например, 5 ГБ = 5120 МБ)
LIMIT_MB=5120

if [ "$DB_SIZE" -gt "$LIMIT_MB" ]; then
    echo "ВНИМАНИЕ: Размер БД ($DB_SIZE МБ) превышает лимит ($LIMIT_MB МБ)" | \
        mail -s "Database Size Alert" admin@example.com
fi

Создание отчета о БД

bash
#!/bin/bash
# Создание подробного отчета о базе данных

cd /var/www/bitrix

REPORT="/tmp/db_report_$(date +%Y%m%d).txt"

{
    echo "=== Отчет о базе данных ==="
    echo "Дата: $(date)"
    echo ""
    
    echo "=== Основная информация ==="
    php bitrix.php db:info -v
    echo ""
    
    echo "=== Самые большие таблицы ==="
    php bitrix.php db:info --show-size-details | sort -k4 -n -r | head -20
    echo ""
    
    echo "=== Статистика по модулям ==="
    # Группировка таблиц по префиксам
    php bitrix.php db:info --show-tables | grep "^b_" | \
        awk '{print $1}' | cut -d'_' -f2 | sort | uniq -c | sort -rn
    echo ""
    
} > "$REPORT"

cat "$REPORT"

Ежедневный мониторинг

bash
#!/bin/bash
# Ежедневный мониторинг состояния БД

cd /var/www/bitrix

LOG_FILE="/var/log/bitrix-db-monitor.log"

{
    echo "=== $(date) ==="
    
    # Размер БД
    DB_SIZE=$(php bitrix.php db:info | grep "Общий размер" | grep -oP '[\d.]+')
    echo "Размер БД: $DB_SIZE МБ"
    
    # Количество таблиц
    TABLE_COUNT=$(php bitrix.php db:info | grep "таблиц" | grep -oP '\d+' | head -1)
    echo "Количество таблиц: $TABLE_COUNT"
    
    # Проверка подключения
    if php bitrix.php db:info > /dev/null 2>&1; then
        echo "Статус: OK"
    else
        echo "Статус: ОШИБКА"
        echo "ОШИБКА подключения к БД" | mail -s "Database Error" admin@example.com
    fi
    
    echo ""
    
} >> "$LOG_FILE"

Сравнение с предыдущим состоянием

bash
#!/bin/bash
# Отслеживание роста базы данных

cd /var/www/bitrix

CURRENT="/tmp/db_current.txt"
PREVIOUS="/var/cache/db_previous.txt"

# Получить текущую информацию
php bitrix.php db:info > "$CURRENT"

if [ -f "$PREVIOUS" ]; then
    # Извлечь размеры
    CURRENT_SIZE=$(grep "Общий размер" "$CURRENT" | grep -oP '[\d.]+' | head -1)
    PREVIOUS_SIZE=$(grep "Общий размер" "$PREVIOUS" | grep -oP '[\d.]+' | head -1)
    
    # Вычислить изменение
    CHANGE=$(echo "$CURRENT_SIZE - $PREVIOUS_SIZE" | bc)
    
    echo "Изменение размера БД: $CHANGE МБ"
    
    if (( $(echo "$CHANGE > 100" | bc -l) )); then
        echo "ВНИМАНИЕ: Значительный рост БД (+$CHANGE МБ)" | \
            mail -s "Database Growth Alert" admin@example.com
    fi
fi

# Сохранить текущее состояние
cp "$CURRENT" "$PREVIOUS"

Оптимизация базы данных

Поиск больших таблиц

bash
#!/bin/bash
# Поиск таблиц, занимающих больше всего места

cd /var/www/bitrix

echo "=== Топ-20 самых больших таблиц ==="
php bitrix.php db:info --show-size-details | sort -k4 -n -r | head -20

# Найти таблицы больше 100 МБ
echo ""
echo "=== Таблицы размером более 100 МБ ==="
php bitrix.php db:info --show-size-details | awk '$4 > 100 {print}'

Оптимизация таблиц

bash
#!/bin/bash
# Оптимизация больших таблиц

cd /var/www/bitrix

# Получить список больших таблиц
BIG_TABLES=($(php bitrix.php db:info --show-size-details | \
              awk '$4 > 100 {print $1}'))

if [ ${#BIG_TABLES[@]} -gt 0 ]; then
    echo "Найдено ${#BIG_TABLES[@]} больших таблиц"
    echo "Начало оптимизации..."
    
    # Получить данные подключения
    DB_HOST=$(php bitrix.php debug:config --key=connections | grep -oP 'host:\s*\K[^\s]+')
    DB_NAME=$(php bitrix.php debug:config --key=connections | grep -oP 'database:\s*\K[^\s]+')
    DB_USER=$(php bitrix.php debug:config --key=connections | grep -oP 'login:\s*\K[^\s]+')
    
    for table in "${BIG_TABLES[@]}"; do
        echo "Оптимизация таблицы: $table"
        mysql -h "$DB_HOST" -u "$DB_USER" -p "$DB_NAME" \
              -e "OPTIMIZE TABLE $table;"
    done
    
    echo "Оптимизация завершена"
fi

Анализ таблиц логов

bash
#!/bin/bash
# Анализ и очистка таблиц логов

cd /var/www/bitrix

echo "=== Анализ таблиц логов ==="

# Таблицы логов Битрикс
LOG_TABLES=(
    "b_event_log"
    "b_stat_session"
    "b_stat_event"
    "b_stat_hit"
    "b_search_suggest_log"
)

for table in "${LOG_TABLES[@]}"; do
    SIZE=$(php bitrix.php db:info --show-size-details | grep "^$table" | awk '{print $4}')
    ROWS=$(php bitrix.php db:info --show-size-details | grep "^$table" | awk '{print $2}')
    
    if [ -n "$SIZE" ]; then
        echo "$table: $ROWS строк, $SIZE МБ"
        
        # Предупреждение если таблица больше 500 МБ
        if [ "${SIZE%%.*}" -gt 500 ]; then
            echo "  ⚠ ВНИМАНИЕ: Таблица очень большая, рекомендуется очистка"
        fi
    fi
done

Резервное копирование

Создание дампа БД

bash
#!/bin/bash
# Создание резервной копии базы данных

cd /var/www/bitrix

# Получить информацию о БД
DB_INFO=$(php bitrix.php db:info)
DB_NAME=$(echo "$DB_INFO" | grep "База данных" | awk '{print $NF}')

BACKUP_DIR="/backup/database"
mkdir -p "$BACKUP_DIR"

DUMP_FILE="$BACKUP_DIR/${DB_NAME}_$(date +%Y%m%d_%H%M%S).sql"

echo "Создание дампа БД: $DB_NAME"
echo "Размер БД: $(echo "$DB_INFO" | grep "Общий размер")"

# Создать дамп
mysqldump --single-transaction --routines --triggers \
          -u user -p "$DB_NAME" | gzip > "$DUMP_FILE.gz"

if [ $? -eq 0 ]; then
    echo "✓ Дамп создан: $DUMP_FILE.gz"
    ls -lh "$DUMP_FILE.gz"
else
    echo "✗ Ошибка создания дампа"
    exit 1
fi

Мониторинг бэкапов

bash
#!/bin/bash
# Проверка актуальности резервных копий БД

BACKUP_DIR="/backup/database"
MAX_AGE_HOURS=24

# Найти последний бэкап
LATEST_BACKUP=$(ls -t "$BACKUP_DIR"/*.sql.gz 2>/dev/null | head -1)

if [ -z "$LATEST_BACKUP" ]; then
    echo "✗ Резервные копии не найдены" | \
        mail -s "Database Backup Missing" admin@example.com
    exit 1
fi

# Проверить возраст
BACKUP_AGE=$(($(date +%s) - $(stat -f %m "$LATEST_BACKUP")))
BACKUP_AGE_HOURS=$((BACKUP_AGE / 3600))

if [ $BACKUP_AGE_HOURS -gt $MAX_AGE_HOURS ]; then
    echo "⚠ Последний бэкап устарел ($BACKUP_AGE_HOURS часов)" | \
        mail -s "Database Backup Outdated" admin@example.com
else
    echo "✓ Резервная копия актуальна"
fi

Troubleshooting

Ошибка подключения

Проблема: Команда не может подключиться к базе данных

Решения:

  1. Проверьте настройки в .settings.php: php bitrix.php debug:config --key=connections
  2. Проверьте доступность БД: mysql -h host -u user -p database
  3. Проверьте права пользователя БД
  4. Проверьте firewall и сетевые настройки

Медленное выполнение

Проблема: Команда выполняется очень долго

Решения:

  1. Не используйте опцию --show-size-details для больших БД
  2. Оптимизируйте таблицы БД
  3. Проверьте нагрузку на сервер БД
  4. Увеличьте ресурсы сервера БД

Неправильный размер

Проблема: Размер таблиц не соответствует действительности

Решения:

  1. Выполните OPTIMIZE TABLE для таблиц
  2. Проверьте фрагментацию таблиц
  3. Обновите статистику таблиц: ANALYZE TABLE

Полезные советы

💡 Регулярно мониторьте - отслеживайте рост базы данных

💡 Оптимизируйте таблицы - регулярно выполняйте OPTIMIZE TABLE

💡 Очищайте логи - удаляйте старые записи из таблиц логов

💡 Создавайте бэкапы - регулярно делайте резервные копии

💡 Индексируйте - проверяйте наличие необходимых индексов

💡 Архивируйте - переносите старые данные в архивные таблицы


Смотрите также

Документация BXMax CLI