본문으로 건너뛰기
도구

검색 및 치환 SQL

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

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

변경 내용

실행하기 전에 반드시 읽으세요

WordPress는 많은 옵션을 PHP-serialized 문자열로 저장하며, 직렬화된 문자열은 자체 바이트 길이를 함께 기록합니다 — s:19:"http://old-site.com". 단순한 SQL 치환은 텍스트만 바꾸고 길이는 그대로 두기 때문에, PHP가 더 이상 해당 행을 역직렬화할 수 없게 됩니다. 오류는 발생하지 않습니다. 값이 그냥 조용히 비어 버릴 뿐입니다.

잃게 되는 것: 위젯 설정, 테마 커스터마이징(theme mods), 그리고 대부분의 플러그인 설정입니다. 보통 며칠이 지나서야 알아차리게 되고, 그때쯤이면 복원했을 백업마저 이미 사라진 뒤입니다.

아래 쿼리들이 의도적으로 wp_options를 건드리지 않는 이유가 바로 이것입니다.

무엇을 옮기고 있나요?
search-replace.sql

먼저 데이터베이스를 백업하세요. '백업을 고려해 보라'는 게 아니라, 반드시 하세요. UPDATE에는 되돌리기가 없습니다.

검색 및 치환 SQL 소개

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

자주 묻는 질문

질문

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

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

대신 무엇을 써야 하나요?

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

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

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