본문으로 건너뛰기
도구

검색 및 치환 SQL

직렬화된 데이터를 손상시키지 않고 사이트 URL 변경하기

브라우저 안에서 돌아갑니다. 아무것도 업로드되지 않습니다.

The change

Read this before you run anything

WordPress stores many options as PHP-serialized strings, and a serialized string records its own byte length — s:19:"http://old-site.com". A plain SQL replace changes the text but not the length, so PHP can no longer unserialize the row. It does not error. The value just silently becomes empty.

What you lose: widget configuration, theme mods, and most plugin settings. Usually you do not notice until days later, and by then the backup you would have restored is gone too.

This is why the queries below deliberately do not touch wp_options.

What are you moving?
search-replace.sql

Take a database backup first. Not 'consider taking one' — take one. There is no undo for an UPDATE.

검색 및 치환 SQL 소개

WordPress 데이터베이스에서 무작정 SQL 찾기·바꾸기를 하면 저장된 문자열 길이가 더 이상 맞지 않게 되어, 건드리는 모든 직렬화된 옵션이 깨집니다. 이 도구는 안전한 쿼리를 생성하고, 어떤 쿼리가 안전하지 않은지 정확히 설명합니다.

FAQ

질문

SQL 찾아 바꾸기로 워드프레스 사이트 URL을 바꿀 수 있나요?

안전하게는 안 됩니다. 이건 워드프레스에서 가장 많이 공유되는 나쁜 조언입니다. 많은 옵션이 자신의 바이트 길이를 기록하는 PHP 직렬화 문자열로 저장됩니다. 평범한 SQL 바꾸기는 텍스트는 바꾸지만 길이는 바꾸지 않으므로, PHP가 그 행을 역직렬화하는 데 조용히 실패하고 값이 그냥 사라집니다 — 위젯 설정, 테마 수정, 플러그인 설정까지 함께 데려가면서요.

대신 무엇을 써야 하나요?

WP-CLI입니다: 먼저 'wp search-replace old new --all-tables --dry-run', 그다음 --dry-run 없이 실행하세요. 이건 직렬화를 이해하고 길이 접두사를 올바르게 다시 씁니다. CLI 접근이 없다면 Better Search Replace 플러그인이 관리자 화면에서 같은 일을 해줍니다.

GUID 열도 업데이트해야 하나요?

아니요. GUID는 글의 영구적인 고유 식별자이지 링크가 아니며, 피드 리더가 이걸 기준으로 삼습니다. 이걸 다시 쓰면 모든 구독자가 모든 옛 글을 완전히 새 글로 보게 됩니다. 워드프레스 문서는 이걸 바꾸지 말라고 명시적으로 말합니다.