Команды работы с базой данных 
Команды для получения информации о базе данных.
db:info 
Выводит информацию о базе данных: тип, версия, количество таблиц и размер.
Синтаксис 
php bitrix.php db:info [опции]Опции 
-v,-vv- подробный вывод с дополнительной информацией--show-tables- показать список всех таблиц--show-size-details- показать размер каждой таблицы
Примеры использования 
# Базовая информация о БД
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):
- Имя таблицы
 - Количество строк
 - Размер данных
 - Размер индексов
 - Общий размер
 
Использование в мониторинге 
Мониторинг размера базы данных 
#!/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Создание отчета о БД 
#!/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"Ежедневный мониторинг 
#!/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"Сравнение с предыдущим состоянием 
#!/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"Оптимизация базы данных 
Поиск больших таблиц 
#!/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}'Оптимизация таблиц 
#!/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Анализ таблиц логов 
#!/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Резервное копирование 
Создание дампа БД 
#!/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Мониторинг бэкапов 
#!/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 "✓ Резервная копия актуальна"
fiTroubleshooting 
Ошибка подключения 
Проблема: Команда не может подключиться к базе данных
Решения:
- Проверьте настройки в 
.settings.php:php bitrix.php debug:config --key=connections - Проверьте доступность БД: 
mysql -h host -u user -p database - Проверьте права пользователя БД
 - Проверьте firewall и сетевые настройки
 
Медленное выполнение 
Проблема: Команда выполняется очень долго
Решения:
- Не используйте опцию 
--show-size-detailsдля больших БД - Оптимизируйте таблицы БД
 - Проверьте нагрузку на сервер БД
 - Увеличьте ресурсы сервера БД
 
Неправильный размер 
Проблема: Размер таблиц не соответствует действительности
Решения:
- Выполните OPTIMIZE TABLE для таблиц
 - Проверьте фрагментацию таблиц
 - Обновите статистику таблиц: 
ANALYZE TABLE 
Полезные советы 
💡 Регулярно мониторьте - отслеживайте рост базы данных
💡 Оптимизируйте таблицы - регулярно выполняйте OPTIMIZE TABLE
💡 Очищайте логи - удаляйте старые записи из таблиц логов
💡 Создавайте бэкапы - регулярно делайте резервные копии
💡 Индексируйте - проверяйте наличие необходимых индексов
💡 Архивируйте - переносите старые данные в архивные таблицы
Смотрите также 
- Команды отладки - просмотр конфигурации подключения к БД
 - Команды резервного копирования - создание бэкапов
 - Примеры cron - автоматизация мониторинга БД