REPLACE в MySQL: массовая замена строк в WordPress
Зачем это нужно
Иногда нужно глобально заменить ссылки или фрагменты HTML в базе данных — например, при переходе сайта на HTTPS или при массовой правке путей к изображениям. Одна SQL-команда заменит тысячи записей за секунды, вместо ручной правки.
Краткий синтаксис
REPLACE в этом контексте — это строковая функция MySQL, а не команда REPLACE INTO. Правильный формат для массовой замены в колонке:
UPDATE table SET column1 = REPLACE(column1, 'SEARCH', 'REPLACE');Пример для WordPress (замена http на https в содержимом постов):
UPDATE wp_posts SET post_content = REPLACE(post_content, 'http://www.howtogeek.com', 'https://www.howtogeek.com');Important: REPLACE() работает на уровне строк — она просто заменяет последовательности символов внутри значения колонки.
Как подключиться к базе
Откройте терминал и используйте данные из wp-config.php (имя пользователя, пароль, хост, имя БД):
mysql -uUser -pPassword -hHost databasenameСовет по безопасности: лучше запускать просто mysql -uUser -p -hHost databasename и вводить пароль при запросе, чтобы не оставлять пароль в истории команд.
Мини‑методология перед выполнением
- Сделайте полный бэкап базы (mysqldump или экспорт через панель).
- Выполните SELECT с LIKE, чтобы увидеть, что будет меняться:
SELECT ID, post_content FROM wp_posts WHERE post_content LIKE ‘%http://www.howtogeek.com%’; - Выполните UPDATE в тестовой копии базы или в транзакции на dev-сервере.
- Проверяйте на разных URL‑вариациях (с/без слэша, с другими поддоменами).
- После проверки выполните обновление в продакшне.
Когда подход не работает или опасен
- Сериализованные данные PHP: WordPress хранит в опциях и виджетах сериализованные строки, где длина строки закодирована. Простая текстовая замена может исказить длину и сломать данные.
- JSON в колонках может требовать парсинга.
- Если URL встречается в разных вариантах (HTTP, HTTPS, без www, с портом), простая замена только одного варианта не охватит все случаи.
- Бинарные колонки или сжатые поля: не применять.
Альтернативные подходы
- WP-CLI search-replace — умеет корректно менять сериализованные данные и безопаснее для WordPress.
- Писать скрипт на PHP/Python, который парсит и обновляет данные, понимая формат (JSON, сериализация).
- Экспорт XML/CSV, массовая обработка и импорт обратно (длинный путь, но безопаснее при сложных структурах).
Быстрый чек-лист ролей
- Администратор: создать бэкап, дать доступ к тестовой базе, отключить кэш.
- Разработчик: прогнать SELECT-проверки, выполнить UPDATE в стейджинге, подготовить откат.
- QA: проверить страницы с типичными шаблонами постов, изображения, виджеты, формы.
Критерии приёмки
- Изменённые ссылки ведут на правильный протокол и работают.
- Нет ошибок PHP/Notice в логах на страницах с изменёнными данными.
- Виджеты и настройки сохраняют работоспособность (нет сломанных сериализованных данных).
- Бэкап восстановим и откат проверен.
Откат и инцидентный план
- Если обнаружили проблему — немедленно выключите кэш и уведомите команду.
- Восстановите базу из свежего дампа: mysql -uUser -p databasename < backup.sql
- Если откат невозможен, примените корректирующий UPDATE, но убедитесь в тестах на dev.
Тестовые случаи
- Замена одного URL в посте.
- Замена нескольких в одном поле.
- Проверка сериализованных опций до и после.
- Проверка изображений с и без завершающего слеша.
- Стресс-тест: применение на копии базы с 10k+ записей.
Полезные подсказки и эвристики
- Mental model: REPLACE() — как «Найти и заменить» в текстовом редакторе, но для каждой отдельной ячейки.
- Сначала ищите (SELECT … LIKE), затем заменяйте.
- Всегда думайте о разных вариантах строки: верхний/нижний регистр, www, слэши, параметры запроса.
Краткий глоссарий
- REPLACE() — строковая функция MySQL, заменяет подстроки внутри значения.
- REPLACE INTO — отдельная DML-команда MySQL для вставки/замены строк (не то же самое).
- Сериализация — способ кодирования структуры данных в строку (PHP serialize).
Короткое объявление для команды (100–200 слов)
Нужно быстро обновить ссылки в контенте сайта? Вместо ручной правки используйте встроенную строковую функцию MySQL REPLACE в операторе UPDATE. Перед запуском сделайте бэкап и протестируйте на копии БД: сначала выполните SELECT с LIKE, чтобы увидеть, что изменится, затем примените UPDATE. В WordPress учтите сериализованные данные: если в базе есть PHP-serialize, лучше использовать WP-CLI search-replace или другой инструмент, который корректно пересчитывает длины строк. План отката включает восстановление дампа и проверку виджетов и опций. Всегда проверяйте результат на стейджинге перед продакшеном.
Итог
REPLACE внутри UPDATE — мощный и простой инструмент для массовой текстовой замены в базе MySQL. Он экономит время, но требует осторожности: делайте бэкапы, проверяйте сериализованные данные и тестируйте изменения на копии базы. При работе с WordPress рассмотрите WP-CLI как безопасную альтернативу.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента