Со временем в базе данных WordPress накапливаются таблицы, которые уже не используются. Это происходит после установки и удаления плагинов, тем или миграций. Ненужные таблицы занимают место и могут замедлять работу сайта. В этой статье расскажу, как безопасно найти и удалить такие таблицы, минимизируя риски потери данных.
Почему появляются неиспользуемые таблицы в базе данных WordPress
Каждый плагин WordPress зачастую создаёт собственные таблицы для хранения данных. При удалении плагина не всегда происходит очистка базы от этих таблиц, так как многие разработчики не добавляют функцию удаления данных при деактивации или удалении. В результате база со временем разрастается и содержит мёртвые таблицы.
Также неиспользуемые таблицы могут появляться после тестов, миграций и ручных изменений. Их накопление приводит к:
- Увеличению размера базы данных;
- Повышенной нагрузке при бэкапах и оптимизациях;
- Потенциальным конфликтам или ошибкам при обновлениях.
Поэтому регулярная проверка и очистка базы важна для стабильности и скорости сайта.
Как определить, какие таблицы не используются
Для начала нужно получить список всех таблиц базы данных WordPress. Обычно префикс таблиц — wp_, но у каждого сайта он может отличаться. Чтобы получить список, можно использовать phpMyAdmin или подключиться к базе через консоль:
SHOW TABLES LIKE 'wp_%';
Далее стоит сопоставить таблицы с активными плагинами и темой. Если таблица относится к плагину, который уже не установлен или деактивирован — это кандидат на удаление.
Для упрощения можно использовать плагины, которые сканируют базу и показывают неактивные таблицы, например:
- Clearfy Pro — оптимизатор и очиститель базы, умеет искать мёртвые таблицы;
- WP-Optimize — бесплатный плагин с функцией очистки базы;
- Advanced Database Cleaner — специализированный плагин для поиска и удаления неиспользуемых таблиц и записей.
Но плагин — не всегда панацея, особенно если база большая или плагин может ошибочно удалить нужные данные. Поэтому ниже разберём ручной и программный подход.
Как безопасно удалить неиспользуемые таблицы через код
Ручное удаление через phpMyAdmin или консоль — это быстро, но рискованно. Лучше автоматизировать, добавив функцию в functions.php вашей темы или в отдельный плагин, которая проверит и удалит только те таблицы, которые точно не нужны.
Пример функции wpeasy_delete_unused_tables():
function wpeasy_delete_unused_tables() {
global $wpdb;
// Префикс таблиц, измените под свой
$prefix = $wpdb->prefix;
// Список таблиц, которые точно нужно оставить
$whitelist = [
$prefix . 'posts',
$prefix . 'postmeta',
$prefix . 'users',
$prefix . 'usermeta',
$prefix . 'options',
$prefix . 'terms',
$prefix . 'termmeta',
$prefix . 'term_relationships',
$prefix . 'term_taxonomy',
$prefix . 'comments',
$prefix . 'commentmeta'
];
// Получаем все таблицы с префиксом
$all_tables = $wpdb->get_col( "SHOW TABLES LIKE '{$prefix}%';" );
// Определяем таблицы для удаления
$to_delete = array_diff($all_tables, $whitelist);
foreach ($to_delete as $table) {
// Здесь можно добавить дополнительные проверки
// Например, проверять, к какому плагину таблица относится
// Удаляем таблицу
$wpdb->query( "DROP TABLE IF EXISTS {$table}" );
}
return $to_delete; // Возвращаем список удалённых
}
Эту функцию не стоит запускать автоматически. Лучше вызвать её вручную один раз через админ-панель или временный крон. Перед запуском обязательно сделайте резервную копию базы!
Как проверить, к какому плагину принадлежит таблица
Определить принадлежность таблицы к плагину можно по названию (часто плагин использует собственный префикс), или изучив документацию плагина. Можно также выполнить запросы:
SELECT option_value FROM wp_options WHERE option_name LIKE '%plugin_name%';
Или поискать в коде плагина вызовы $wpdb->prefix . 'название_таблицы'.
Как автоматизировать очистку и предотвратить появление неиспользуемых таблиц
Чтобы в будущем база не разрасталась, рекомендуется:
- Использовать проверенные плагины с функцией чистого удаления данных;
- Перед удалением плагина проверить, есть ли у него опция «Удалить данные при удалении»;
- Регулярно делать резервные копии базы;
- Использовать плагин Clearfy Pro, который умеет автоматически очищать базу от мусора и оптимизировать её;
- Настроить мониторинг размера базы и использовать WP-CLI для периодической проверки таблиц.
Для примера можно написать WP-CLI команду, которая покажет неиспользуемые таблицы:
if ( class_exists( 'WP_CLI' ) ) {
WP_CLI::add_command( 'wpeasy unused-tables', function() {
global $wpdb;
$prefix = $wpdb->prefix;
$all_tables = $wpdb->get_col( "SHOW TABLES LIKE '{$prefix}%';" );
$whitelist = [
$prefix . 'posts',
$prefix . 'postmeta',
$prefix . 'users',
$prefix . 'usermeta',
$prefix . 'options',
$prefix . 'terms',
$prefix . 'termmeta',
$prefix . 'term_relationships',
$prefix . 'term_taxonomy',
$prefix . 'comments',
$prefix . 'commentmeta'
];
$to_delete = array_diff($all_tables, $whitelist);
if (empty($to_delete)) {
WP_CLI::success('Неиспользуемых таблиц не найдено.');
} else {
WP_CLI::line('Неиспользуемые таблицы:');
foreach ($to_delete as $table) {
WP_CLI::line($table);
}
}
});
}
Таким образом, можно быстро получить список и принять решение об удалении.
Резервное копирование базы перед очисткой
Удаление таблиц — операция необратимая. Поэтому настоятельно рекомендую перед любыми манипуляциями с базой сделать резервную копию. Для этого удобно использовать:
- WPRemark — плагин для управления резервными копиями и их восстановлением;
- Плагины UpdraftPlus, BackWPup;
- Ручное копирование через phpMyAdmin или команду mysqldump.
Без резервной копии при ошибке вы рискуете потерять важные данные и столкнуться с восстановлением сайта из сложных ситуаций.
Выводы и рекомендации
Удаление неиспользуемых таблиц базы данных WordPress — важная задача для поддержания скорости и чистоты сайта. Используйте проверенные методы: сначала анализируйте, потом удаляйте, и обязательно делайте резервные копии.
Комбинируйте ручной анализ с помощью SQL и специализированные плагины, такие как Clearfy Pro и Advanced Database Cleaner. Если вы разработчик, автоматизируйте процессы через функции и WP-CLI команды, чтобы упростить регулярное обслуживание.