Смена префикса таблиц wp_ в WordPress — как исправить
wp_. Полная смена занимает 20–30 минут: переименовать таблицы через SQL, поправить wp-config.php, обновить ссылки в usermeta. Ниже — пошаговая инструкция для хостингов Beget, Timeweb и Reg.ru.Зачем менять префикс таблиц
WordPress по умолчанию создаёт таблицы с префиксом wp_. Это знают все: злоумышленники и автоматические сканеры в первую очередь проверяют wp_users, wp_options и wp_usermeta. Если сайт уязвим к SQL-инъекции, смена префикса усложняет атаку: запрос с жёстко зашитым wp_ просто перестанет работать.
Это не панацея. Префикс не закрывает уязвимости в плагинах и темах, не защищает от брутфорса и не мешает опытному атакующему. Но это дешёвый и безболезненный уровень защиты — за 20 минут вы убираете целый класс автоматических атак.
Если сайт уже взломали, сначала зачистите его — инструкция в статье «WordPress взломали — что делать пошагово». Менять префикс на заражённом сайте нет смысла.
Подготовка: бэкап и доступ
До любых манипуляций с базой сделайте бэкап. На Beget это раздел «Базы данных» → нужная БД → «Резервная копия». На Timeweb — «Базы данных» → «Бэкап». На Reg.ru — аналогичный пункт в панели хостинга.
# Или через SSH, если доступен
mysqldump -u USER -p DBNAME > ~/backup-wp.sql
Вам понадобятся:
- Логин и пароль от БД (лежат в wp-config.php)
- Доступ к файлам сайта (FTP или файловый менеджер)
- Путь к панели управления БД (phpMyAdmin на Beget и Reg.ru, собственный инструмент на Timeweb)
Новый префикс выбирайте короткий и неочевидный: wp_ → bx47_. Не используйте wp_ с суффиксом вроде wp_new_ — сканеры проверяют и такие варианты.
Как исправить — пошаговая инструкция
Шаг 1. Переименуйте таблицы через SQL
Откройте phpMyAdmin (или аналог), выберите базу и выполните запрос, который переименует все таблицы с префиксом wp_:
RENAME TABLE wp_commentmeta TO bx47_commentmeta, wp_comments TO bx47_comments, wp_links TO bx47_links, wp_options TO bx47_options, wp_postmeta TO bx47_postmeta, wp_posts TO bx47_posts, wp_term_relationships TO bx47_term_relationships, wp_term_taxonomy TO bx47_term_taxonomy, wp_termmeta TO bx47_termmeta, wp_terms TO bx47_terms, wp_usermeta TO bx47_usermeta, wp_users TO bx47_users;
Список таблиц стандартного WordPress выше. Если у вас стоят плагины, добавляющие свои таблицы (WooCommerce — wp_woocommerce_*, All in One SEO — wp_aioseo_*), переименуйте и их по тому же образцу.
Альтернатива для тех, кто не хочет писать запросы руками, — SQL-скрипт:
SET @old = 'wp_';
SET @new = 'bx47_';
SELECT CONCAT('RENAME TABLE ', GROUP_CONCAT(CONCAT(@old, table_name, ' TO ', @new, table_name)), ';')
FROM information_schema.tables
WHERE table_schema = DATABASE() AND table_name LIKE CONCAT(@old, '%');
Этот запрос сгенерирует готовый RENAME TABLE — скопируйте вывод и выполните его отдельной командой.
Шаг 2. Поправьте wp-config.php
В корне сайта откройте wp-config.php и замените строку:
// было
$table_prefix = 'wp_';
// стало
$table_prefix = 'bx47_';
Сохраните файл. Этот шаг обязателен: WordPress строит запросы на основе этой константы, и без неё он будет искать таблицы bx47_* вхолостую.
Шаг 3. Обновите сериализованные данные в usermeta
В таблице wp_usermeta хранятся настройки пользователей, включая сериализованные массивы со ссылками на wp_capabilities. Просто переименовать таблицу недостаточно — эти значения нужно обновить, иначе у пользователей «слетят» роли.
UPDATE wp_usermeta SET meta_key = REPLACE(meta_key, 'wp_', 'bx47_') WHERE meta_key LIKE '%wp_%';
После выполнения проверьте, что у всех пользователей на месте bx47_capabilities, bx47_user_level и bx47_user-settings.
Шаг 4. Проверьте доступ и обновите кэш
Зайдите в админку. Если видите ошибку «Error establishing a database connection» — проверьте, что в wp-config.php нет лишних пробелов и префикс записан без кавычек.
# Для проверки списка таблиц в MySQL
SHOW TABLES;
Если сайт работает под Cloudflare, сбросьте кэш и там — старые страницы могут отдаваться из кэша. О том, почему Cloudflare часто показывает устаревший контент, мы писали в статье «Cloudflare ломает админку WordPress — как исправить».
Проверка результата
Прогнать сайт по простым сценариям — этого достаточно, чтобы убедиться, что ничего не сломалось:
- Главная и любая внутренняя страница открываются
- Авторизация в админке работает, права пользователей на месте
- Формы отправляются (Contact Form 7 и другие)
- Комментарии публикуются
- Резервные копии (UpdraftPlus и т.п.) создаются заново
Особое внимание — правам пользователей. Если после смены префикса кто-то потерял роль администратора, верните права через phpMyAdmin: откройте таблицу bx47_usermeta, найдите bx47_capabilities у нужного пользователя и вставьте a:1:{s:13:"administrator";b:1;} в поле meta_value.
Когда способ не сработает
Сайт на мультисайте. В WordPress Multisite кроме общего префикса есть префиксы блогов (wp_2_, wp_3_). Смена префикса вручную почти наверняка сломает сеть — используйте плагин вроде iThemes Security, который умеет менять префикс на мультисайтах корректно, или оставьте как есть.
На заражённом сайте. Смена префикса не удалит уже внедрённый код и бэкдоры. Сначала зачистите сайт, потом думайте о смене префикса.
Ошибка в сериализованных данных. Если в usermeta хранятся сериализованные строки с длинами, «голый» REPLACE может сломать данные. Аккуратно работайте с wp_capabilities: лучше обновить одно поле через phpMyAdmin, чем массово заменить префикс во всех полях.
Плагины, хранящие префикс в коде. Некоторые плагины и темы хардкодят wp_ в запросах. После смены префикса такие места отвалятся с ошибками SQL. Проверьте журнал ошибок PHP после смены — на Beget он в разделе «Логи», на Timeweb — в «Журнале ошибок».
Частые вопросы
wp config set table_prefix bx47_ --path=/home/user/site и скрипт переименования таблиц. Но WP-CLI есть не на всех хостингах — на Beget и Timeweb его можно запросить через поддержку. Без WP-CLI проще всего работать через phpMyAdmin.Не уверены, что справитесь сами?
Сменим префикс таблиц, проверим целостность базы и закроем другие дыры безопасности — за 1 день.