IT Share you

전체 mysql 데이터베이스 찾기 및 바꾸기

shareyou 2020. 12. 13. 11:28
반응형

전체 mysql 데이터베이스 찾기 및 바꾸기


테이블뿐만 아니라 전체 데이터베이스 내에서 찾기 및 바꾸기를하고 싶습니다.

작동하도록 아래 스크립트를 어떻게 변경할 수 있습니까?

 update [table_name] set [field_name] = replace([field_name],'[string_to_find]','[string_to_replace]');

별표 만 사용하나요?

 update * set [field_name] = replace([field_name],'[string_to_find]','[string_to_replace]');

sqldump를 텍스트 파일에 추가하고, sqldump를 찾고 / 바꾸고, 다시 가져옵니다.

데이터베이스를 텍스트 파일로 덤프
mysqldump -u root -p[root_password] [database_name] > dumpfilename.sql

변경 한 후 데이터베이스를 복원하십시오.
mysql -u root -p[root_password] [database_name] < dumpfilename.sql


워드 프레스 mysql 쿼리에서 이전 URL을 새 URL로 업데이트 :

UPDATE wp_options SET option_value = replace(option_value, 'http://olddomain.com', 'http://newdomain.com') WHERE option_name = 'home' OR option_name = 'siteurl';

UPDATE wp_posts SET guid = replace(guid, 'http://olddomain.com','http://newdomain.com');

UPDATE wp_posts SET post_content = replace(post_content, 'http://olddomain.com', 'http://newdomain.com');

UPDATE wp_posts SET post_excerpt = replace(post_excerpt, 'http://olddomain.com', 'http://newdomain.com');

UPDATE wp_postmeta SET meta_value = replace(meta_value, 'http://olddomain.com', 'http://newdomain.com');

이것은 귀하의 데이터가 처음부터 정규화되지 않았 음을 의미합니다.

이와 같은 것이 작동합니다 (다른 언어를 사용하는 것에 대해 언급하지 않았으므로 MySQL 저장 프로 시저로 작성 됨)

 create procedure replace_all(find varchar(255), 
        replce varchar(255), 
        indb varcv=char(255))
 DECLARE loopdone INTEGER DEFAULT 0;
 DECLARE currtable varchar(100);
 DECLARE alltables CURSOR FOR SELECT t.tablename, c.column_name 
    FROM information_schema.tables t,
    information_schema.columns c
    WHERE t.table_schema=indb
    AND c.table_schema=indb
    AND t.table_name=c.table_name;

 DECLARE CONTINUE HANDLER FOR NOT FOUND
     SET loopdone = 1;

 OPEN alltables;

 tableloop: LOOP
    FETCH alltables INTO currtable, currcol; 
    IF (loopdone>0) THEN LEAVE LOOP;
    END IF;
         SET stmt=CONCAT('UPDATE ', 
                  indb, '.', currtable, ' SET ',
                  currcol, ' = word_sub(\'', find, 
                  '\','\'', replce, '\') WHERE ',
                  currcol, ' LIKE \'%', find, '%\'');
         PREPARE s1 FROM stmt;
         EXECUTE s1;
         DEALLOCATE PREPARE s1;
     END LOOP;
 END //

word_sub 함수를 선언하는 방법에 대해서는 여러분에게 맡기겠습니다.


짧은 대답 : 할 수 없습니다.

긴 대답 : INFORMATION_SCHEMA사용하여 테이블 정의를 가져오고이를 사용하여 필요한 UPDATE 문을 동적으로 생성 할 수 있습니다. 예를 들어 다음과 같이 시작할 수 있습니다.

SELECT TABLE_NAME, COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'your_schema'

나는 가능하다면 이것을 피하려고 노력할 것입니다.


REPLACE 명령으로 대체 할 때주의하십시오!

왜?

데이터베이스에 직렬화 된 데이터 (특히 wp_options 테이블)가 포함될 가능성이 높기 때문에 "replace"만 사용하면 데이터가 손상 될 수 있습니다.

권장 직렬화 사용 : https://puvox.software/tools/wordpress-migrator


MySQL 검색 및 바꾸기 도구

PHP로 작성된 매우 유용한 웹 기반 도구로 MySQL 데이터베이스에서 텍스트 문자열을 쉽게 검색하고 교체 할 수 있습니다.


이것은 불가능합니다. 각 테이블에 대해 개별적으로 UPDATE를 수행해야합니다.

경고 : 이중이지만 작동 할 것입니다 (아마도) 솔루션은 다음과 같습니다.

또는 mysqldump 를 통해 데이터베이스를 덤프 하고 결과 SQL 파일에서 검색 / 바꾸기를 수행 할 수 있습니다. (이 작업이 진행되는 동안 데이터베이스에 영향을 줄 수있는 모든 항목을 오프라인으로 설정하고 --add-drop-table 및 --extended-insert 플래그를 사용하는 것이 좋습니다.) 그러나 다음을 확인해야합니다. 검색 / 바꾸기 텍스트는 데이터 자체 외에는 아무것도 변경하지 않았으며 (즉, 교체하려는 텍스트가 SQL 구문의 일부로 발생하지 않을 수 있음) 실제로 다시 삽입하려고합니다. 먼저 빈 테스트 데이터베이스 .)


간단한 해결

UPDATE `table_name`
 SET `field_name` = replace(same_field_name, 'unwanted_text', 'wanted_text')

phpMyAdmin에 있고 최소한의 변경 만있는 경우 쉬운 방법으로이를 수행 할 수 있습니다.

  • phpMyAdmin에 로그인하십시오.
  • 변경을 수행하는 데 필요한 데이터베이스를 선택하십시오.
  • 검색 옵션을 클릭하십시오

    여기에 이미지 설명 입력

항상 모든 테이블 또는 임의의 테이블을 선택할 수 있습니다. 검색 키워드를 지정하는 것을 잊지 마십시오. 와일드 카드 (%)로 사용됩니다.

  • 이제 이동을 클릭하십시오.
  • 이렇게하면 검색 한 항목이있는 모든 테이블이 제공됩니다.

여기에 이미지 설명 입력

  • 이제 각 테이블을 하나씩 열고 업데이트를 수행 할 수 있습니다. 생성 된 샘플 쿼리는 다음과 같습니다.

    SELECT * FROM sibeecst_passion.wp_ewwwio_images WHERE (CONVERT(id USING utf8) LIKE '%sibee%' OR CONVERT(path USING utf8) LIKE '%sibee%' OR CONVERT(image_md5 USING utf8) LIKE '%sibee%' OR CONVERT(results USING utf8) LIKE '%sibee%' OR CONVERT(gallery USING utf8) LIKE '%sibee%' OR CONVERT(image_size USING utf8) LIKE '%sibee%' OR CONVERT(orig_size USING utf8) LIKE '%sibee%' OR CONVERT(updates USING utf8) LIKE '%sibee%' OR CONVERT(updated USING utf8) LIKE '%sibee%' OR CONVERT(trace USING utf8) LIKE '%sibee%' OR CONVERT(attachment_id USING utf8) LIKE '%sibee%' OR CONVERT(resize USING utf8) LIKE '%sibee%' OR CONVERT(converted USING utf8) LIKE '%sibee%' OR CONVERT(level USING utf8) LIKE '%sibee%' OR CONVERT(pending USING utf8) LIKE '%sibee%' OR CONVERT(backup USING utf8) LIKE '%sibee%')


I just wanted to share how I did this find/replace thing with sql database, because I needed to replace links from Chrome's sessionbuddy db file.

  • So I exported sql database file as .txt file by using SQLite Database Browser 2.0 b1
  • Find/replace in notepad++
  • Imported the .txt file back on SQLite Database Browser 2.0 b1

Another option (depending on the use case) would be to use DataMystic's TextPipe and DataPipe products. I've used them in the past, and they've worked great in the complex replacement scenarios, and without having to export data out of the database for find-and-replace.

참고URL : https://stackoverflow.com/questions/4822638/find-and-replace-entire-mysql-database

반응형