Команды работы с базой данных
Команды для получения информации о базе данных.
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 - автоматизация мониторинга БД