Каждый опытный разработчик WordPress рано или поздно сталкивается с необходимостью почистить базу данных от мусора, устаревших записей и ошибок. Многие сразу ищут плагины для оптимизации, но в некоторых случаях лучше выполнить чистку вручную — это безопаснее и дает полный контроль над процессом. В этой статье разберём, как удалить проблемы с базой данных WordPress без плагинов, какие запросы использовать и на что обратить внимание.
Почему важно чистить базу данных WordPress
База данных — это сердце вашего сайта на WordPress. С течением времени в ней накапливаются:
- старые ревизии записей, которые занимают место;
- автоматически сохранённые версии постов (auto-drafts);
- неактивные метаданные и устаревшие опции;
- спам-комментарии и помеченные как мусор;
- транзиенты, которые уже не актуальны.
Все эти данные замедляют работу базы и увеличивают время отклика сайта. Очистка вручную позволяет удалить именно то, что действительно мешает, без риска случайного удаления нужного функционала.
Подготовка к чистке базы данных
Перед тем как приступать к удалению данных, обязательно сделайте полную резервную копию базы данных. Это можно сделать через phpMyAdmin или используя команду MySQL:
mysqldump -u username -p database_name > backup.sqlТакже рекомендуется временно отключить кэширование и плагины, которые могут вмешиваться в базу во время очистки.
Удаление старых ревизий и автоматических сохранений
Ревизии записей полезны при редактировании, но их количество может быть огромным. Для удаления всех ревизий, кроме текущих версий постов, используйте следующий SQL-запрос:
DELETE FROM wp_posts WHERE post_type = 'revision';Чтобы удалить автоматические сохранения (auto-drafts), выполните:
DELETE FROM wp_posts WHERE post_status = 'auto-draft';Эти запросы удалят ненужные записи и освободят пространство. Важно убедиться, что префикс таблиц wp_ соответствует вашему префиксу в базе.
Удаление спама и мусорных комментариев
Спам и мусорные комментарии не нужны и только нагружают базу. Чтобы удалить их все, используйте:
DELETE FROM wp_comments WHERE comment_approved = 'spam'; DELETE FROM wp_comments WHERE comment_approved = 'trash';Если хотите очистить только очень старый спам, добавьте условие по дате:
DELETE FROM wp_comments WHERE comment_approved = 'spam' AND comment_date < DATE_SUB(NOW(), INTERVAL 30 DAY);<Удаление устаревших и неиспользуемых метаданных
Мета-данные постов и пользователей часто остаются после удаления плагинов или тем. Для удаления мета с определённым ключом, например _old_plugin_data, выполните:
DELETE FROM wp_postmeta WHERE meta_key = '_old_plugin_data';Чтобы найти потенциально неиспользуемые ключи, сначала вы можете сделать выборку:
SELECT meta_key, COUNT(*) AS count FROM wp_postmeta GROUP BY meta_key ORDER BY count ASC LIMIT 20;Внимание: удаляйте только те метаданные, в назначении которых вы уверены.
Очистка транзиентов WordPress
Транзиенты — это временные кешированные данные, которые автоматически удаляются после истечения срока, но иногда остаются в базе. Чтобы удалить все устаревшие транзиенты, используйте:
DELETE FROM wp_options WHERE option_name LIKE '_transient_%' OR option_name LIKE '_site_transient_%';Для удаления только просроченных транзиентов можно использовать более сложные запросы, но обычно этот способ очищает базу эффективно.
Пример создания функции для автоматической чистки базы данных wp-blog
Если вы хотите автоматизировать очистку без плагинов, можно добавить в functions.php темы следующий код с префиксом вашего сайта, например wpblog_:
function wpblog_clean_database() {
global $wpdb;
// Удаление ревизий
$wpdb->query("DELETE FROM {$wpdb->posts} WHERE post_type = 'revision'");
// Удаление авто-сохранений
$wpdb->query("DELETE FROM {$wpdb->posts} WHERE post_status = 'auto-draft'");
// Удаление спама и мусора в комментариях
$wpdb->query("DELETE FROM {$wpdb->comments} WHERE comment_approved IN ('spam', 'trash')");
// Удаление всех транзиентов
$wpdb->query("DELETE FROM {$wpdb->options} WHERE option_name LIKE '_transient_%' OR option_name LIKE '_site_transient_%'");
}
// Запуск очистки при активации темы
add_action('after_switch_theme', 'wpblog_clean_database');Этот простой пример можно доработать, добавив логи и условия по времени, чтобы избежать удаления нужных данных.
Дополнительные советы по безопасности и оптимизации базы данных
Перед выполнением любых операций с базой данных:
- создавайте резервные копии;
- работайте на тестовом сервере;
- используйте транзакции, если ваша СУБД поддерживает;
- следите за префиксами таблиц;
- проверяйте результаты запросов перед и после выполнения.
Регулярное выполнение ручной очистки базы позволяет избежать излишней нагрузки и замедления сайта. Если хотите расширить функционал, можно обратиться к плагинам вроде Clearfy Pro, которые облегчают оптимизацию, но при этом ручной контроль часто незаменим.