Очистка базы данных WordPress: автоматизация через cron и плагины
Почему регулярная очистка базы данных важна для WordPress
С каждым обновлением, публикацией и комментарием в WordPress в таблицах накапливаются данные, которые уже не нужны. Переполненная wp_posts и wp_options замедляют запросы, увеличивают время резервного копирования и повышают риск сбоев. Автоматизация очистки позволяет поддерживать базу в «чистом» состоянии без ручных вмешательств.
Что безопасно удалять из базы данных
Ревизии постов
WordPress сохраняет каждую правку записи как отдельную ревизию. При активном блоге их количество может вырасти до нескольких тысяч. Удалять их можно без потери контента, оставив только последнюю версию.
Спам‑комментарии и мусор
Таблица wp_comments часто заполняется спам‑сообщениями, а статус «trash» оставляет их в базе. Очистка этих записей освобождает место и ускоряет запросы к комментариям.
Транзиенты
Транзиенты (_transient_*) используются для кэширования временных данных. Если они не удаляются после истечения срока, они «засоряют» wp_options. Автоматическое удаление просроченных транзиентов – обязательный пункт.
Очищаемые таблицы
Таблицы wp_termmeta, wp_postmeta часто содержат «мусорные» записи от удалённых плагинов. Их можно безопасно очистить, если убедиться, что данные не нужны.
Автоматизация через WP‑Cron
WordPress имеет встроенный планировщик задач – WP‑Cron. С его помощью можно запускать функцию очистки раз в сутки.
function wpb_db_cleanup() {
global $wpdb;
// 1. Удаляем ревизии
$wpdb->query("DELETE FROM {$wpdb->posts} WHERE post_type = 'revision'");
// 2. Спам‑комментарии и мусор
$wpdb->query("DELETE FROM {$wpdb->comments} WHERE comment_approved = 'spam' OR comment_approved = 'trash'");
// 3. Просроченные транзиенты
$wpdb->query("DELETE FROM {$wpdb->options} WHERE option_name LIKE '_transient_%' AND option_name NOT LIKE '_transient_timeout_%'");
// 4. Оптимизируем таблицы
$tables = $wpdb->get_col('SHOW TABLES');
foreach ( $tables as $table ) {
$wpdb->query("OPTIMIZE TABLE $table");
}
}
add_action('wpb_daily_cleanup', 'wpb_db_cleanup');
// Планируем событие каждый день в 02:00
if ( ! wp_next_scheduled('wpb_daily_cleanup') ) {
wp_schedule_event(strtotime('02:00:00'), 'daily', 'wpb_daily_cleanup');
}
Код помещаем в файл functions.php темы или в отдельный «must‑use» плагин. Для контроля можно добавить логирование через WordPress логирование.
Автоматизация через WP‑CLI
Если у вас есть доступ к SSH, WP‑CLI позволяет выполнять очистку в один клик. Это удобно для серверных задач и интеграции в CI/CD.
# Удаляем ревизии
wp post delete $(wp post list --post_type='revision' --format=ids) --force
# Удаляем спам‑комментарии и мусор
wp comment delete $(wp comment list --status=spam --format=ids) --force
wp comment delete $(wp comment list --status=trash --format=ids) --force
# Очищаем просроченные транзиенты
wp transient delete --all
# Оптимизируем таблицы
wp db optimize
Эти команды можно добавить в cron‑задачу сервера:
0 3 * * * /usr/bin/wp --path=/var/www/site cleanup-db.sh
Где cleanup-db.sh содержит выше‑приведённые команды. Такой подход часто используется в проектах, где требуется минимальный overhead.
Плагины для автоматической очистки
Если вы предпочитаете готовое решение, на рынке есть несколько надёжных плагинов. Выбирайте те, которые позволяют задать расписание и поддерживают логирование.
- WP‑Optimize – удаляет ревизии, автосохранения, спам‑комментарии и оптимизирует таблицы. Планировщик встроен.
- Advanced Database Cleaner – более гибкий, позволяет выбирать типы метаданных для удаления.
- Clean Up Optimizer – фокусируется на транзиентах и «orphaned» meta.
При выборе плагина учитывайте совместимость с вашими темами и другими плагинами. Подробнее о том, как ускорить WordPress без лишних плагинов, читайте в статье Ускорение WordPress без плагинов.
Контроль и мониторинг процесса очистки
После внедрения автоматизации важно убедиться, что задачи действительно выполняются. Для этого:
- Проверьте запись в таблице
wp_options– там хранится время последнего запуска WP‑Cron. - Настройте email‑уведомления в функции
wp_mail()при ошибках. - Используйте Memcached для снижения нагрузки во время очистки.
Если вы работаете на VPS, не забудьте проверить, хватает ли ресурсов для выполнения задач. Советы по выбору VPS можно найти в статье Как правильно выбрать VPS для WordPress.
Лучшие практики и частые ошибки
Не делайте полное удаление без бэкапа
Перед первой автоматической очисткой создайте полную резервную копию базы. В случае ошибки вы сможете восстановить данные.
Не забывайте про мультисайты
Если у вас сеть сайтов, убедитесь, что скрипт учитывает префиксы таблиц каждого сайта.
Регулярно проверяйте логи
Логи помогут понять, какие записи удаляются и нет ли конфликтов с плагинами, использующими свои собственные таблицы.
Следуя этим рекомендациям, вы сможете поддерживать базу данных WordPress в оптимальном состоянии, экономя ресурсы сервера и ускоряя работу сайта.
❓ Часто задаваемые вопросы
Можно ли полностью отключить WP‑Cron и использовать системный cron?
Да, отключив WP‑Cron в wp-config.php (define(‘DISABLE_WP_CRON’, true);) и настроив системный cron, вы получите более надёжный планировщик.
Как убедиться, что удалённые ревизии не нужны?
Перед удалением сохраните последние несколько ревизий (например, 2‑3) и проверьте, что они содержат нужные изменения. Автоматический скрипт обычно оставляет последнюю ревизию.
Влияет ли очистка транзиентов на работу кэша?
Нет, удаляются только просроченные транзиенты. Активные транзиенты остаются, поэтому кэш продолжает работать без перебоев.
Можно ли объединить очистку базы с резервным копированием?
Да, рекомендуется сначала выполнить резервное копирование, а затем запускать скрипт очистки, чтобы в случае ошибки восстановить данные из бэкапа.