programing

데이터베이스 내의 모든 문자열 인스턴스를 검색 및 치환하려면 어떻게 해야 합니까?

telebox 2023. 3. 28. 21:35
반응형

데이터베이스 내의 모든 문자열 인스턴스를 검색 및 치환하려면 어떻게 해야 합니까?

워드프레스 설치(서버 이름)에 포함된 문자열이 여러 열, 레코드 및 테이블에 걸쳐 수천 번 포함되어 있습니다.

다른 서버의 위치로 업데이트하고 싶습니다. 콘텐츠를 옮기고 있습니다.

소스는 http://my-server1/some/link/to/something 이며 http://my-other-server/some/link/to/something 이 됩니다.기본적으로 http://my-server1의 모든 인스턴스에 대해 이 프로세스를 반복하려고 합니다.

MySQL에서 쉽게 할 수 있는 방법이 있나요?도구?아니면 슬프게도 모든 레코드를 업데이트해야 하나요?

감사해요.

대략적인(그러나 효과적인) 방법은 스키마를 파일에 덤프하고 검색 및 치환한 후 다시 가져오는 것입니다.

사실 오늘 그걸 했어요:)

구글 검색에서 이걸 발견했지만, 몇몇 사람들에게 도움이 될 수도 있어요.테이블과 컬럼을 알고 있는 경우(phpMyAdmin의 와일드카드 검색을 사용하여 찾을 수 있습니다),

UPDATE table_name SET column_name = REPLACE(column_name, 'http://oldsite.com',http://newsite.com');

굵은 부품을 자신의 부품으로 교체합니다.

대규모 데이터베이스가 있는 경우 이를 각 테이블과 열을 루프할 수 있는 스크립트에 적용할 수 있습니다.

전체 데이터베이스를 다시 가져오려면 MySQL 덤프 방법을 사용하는 것이 가장 좋습니다.WordPress 코어 설치는 실제로 11개의 테이블로 구성되며, 그 중 컨텐츠 열은 거의 없으므로 열로 교체하는 것도 마찬가지로 쉽습니다.링크 또는 문자열을 참조하는 플러그인 테이블이 로드되지 않은 경우 SQL이 됩니다.

UPDATE wp_commentmeta SET meta_value = REPLACE(meta_value,'xcurrentx','xreplacementx');
UPDATE wp_comments SET comment_content = REPLACE(comment_content,'xcurrentx','xreplacementx');
UPDATE wp_links SET link_description = REPLACE(link_description,'xcurrentx','xreplacementx');
UPDATE wp_options SET option_value = REPLACE(option_value,'xcurrentx','xreplacementx');
UPDATE wp_postmeta SET meta_value = REPLACE(meta_value,'xcurrentx','xreplacementx');
UPDATE wp_posts SET post_content = REPLACE(post_content,'xcurrentx','xreplacementx');
UPDATE wp_posts SET post_title = REPLACE(post_title,'xcurrentx','xreplacementx');
UPDATE wp_posts SET post_excerpt = REPLACE(post_excerpt,'xcurrentx','xreplacementx');
UPDATE wp_term_taxonomy SET description = REPLACE(description,'xcurrentx','xreplacementx');
UPDATE wp_usermeta SET meta_value = REPLACE(meta_value,'xcurrentx','xreplacementx');

당신의 질문은 2009년에 게시되었고, 그 해 동안 다른 사람이 특정 데이터베이스의 모든 테이블에서 문자열을 검색하기 위한 기본 php 도구를 개발했습니다.임의로 모든 항목을 다른 문자열로 바꿀 수도 있습니다.

5년이 지난 후에도 Wordpress 설치에 대해 이 도구를 사용하는 것이 mysql 덤프를 사용하는 것보다 효과적이고 훨씬 쉽다고 생각합니다(단, 스크립트를 백업용으로 실행하기 전에 덤프를 작성하는 것이 좋습니다).

자세한 내용은 Eric Amundson의 블로그 및 MySQL Search & Replace 프로젝트의 Launchpad 페이지를 참조하십시오.

저는 당신이 지금까지 답을 찾고 있다고는 생각하지 않지만, 이 문제에 대한 해결책을 찾고 있는 다른 누군가가 앞으로 여기에 불쑥 찾아오는 데 도움이 되기를 바라며 힌트도 올리기로 했습니다.

Brad Larson의 답변에 덧붙여서 다음과 같은 변수를 설정합니다.

SET @what_to_be_replaced = "what_to_be_replaced", @to_be_replaced_by = "to_be_replaced_by";

다음으로 다음과 같이 사용합니다.

UPDATE wp_commentmeta SET meta_value = REPLACE(meta_value, @what_to_be_replaced, @to_be_replaced_by );

또한 Search Regex라고 불리는 워드프레스 플러그인이 있으며, 이 플러그인은 다음을 실행할 수 있습니다.grep데이터베이스 전체에서 검색 및 치환합니다.

MySQL의 REPLACE를 사용하거나 WordPress의 sql 파일이나 db에서 수동으로 문자열을 교체하는 것은 좋지 않습니다.WordPress는 직렬화된 필드를 사용합니다. 이 필드는 문자열을 바꾸면 끊어질 수 있습니다(이 경우).

나에게 딱 맞는 Better Search Replace 플러그인을 사용했습니다.

최근 워드프레스 이행으로 사이트의 도메인 이름을 변경해야 했습니다(포스트 데이터 등에서 사이트 이름이 1012건 발생).mysqldump 메서드를 사용하여 이전 도메인 이름을 새 도메인 이름으로 대체했습니다.이는 재 Import 후 워드프레스 레코드에 있는 직렬 어레이 데이터(새 도메인 이름이 이전 도메인 이름보다 2자 짧음) 때문에 크게 실패했습니다.wp-cli는 관리 태스크용 워드프레스 명령줄 인터페이스로, 직렬화된 레코드도 처리하는 데이터베이스 문자열에 대한 검색 치환 기능이 내장되어 있습니다.wp-config.php에 저장된 credential을 사용하기 때문에 워드프레스 데이터베이스를 직접 대상으로 합니다(mariadb 인스턴스가 다른 데이터베이스도 호스트하는 경우).경로의 폴더에 다운로드하여 저장하는 단일 php 파일입니다.https://wp-cli.org/ 를 참조해 주세요.

언급URL : https://stackoverflow.com/questions/836083/how-to-search-and-replace-all-instances-of-a-string-within-a-database

반응형