Programing

MySQL 쿼리를 사용하여 전체 테이블에서 텍스트 찾기 및 바꾸기

lottogame 2020. 4. 20. 19:15
반응형

MySQL 쿼리를 사용하여 전체 테이블에서 텍스트 찾기 및 바꾸기


일반적으로 phpmyadmin을 사용하여 MySQL 데이터베이스의 텍스트를 바꾸려면 수동 찾기를 사용합니다. 나는 지금 피곤합니다 .phpmyadmin의 전체 테이블에서 텍스트를 찾아 새로운 텍스트로 바꾸는 쿼리를 어떻게 실행할 수 있습니까?

예 : 키워드 찾기 domain.com,로 교체하십시오 www.domain.com.


A에 대한 single table갱신

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

부터 multiple tables-

모든 테이블에서 편집 할 경우, 가장 좋은 방법은 걸릴 것입니다 dump다음 find/replace다시 업로드합니다.


내가 찾은 가장 쉬운 방법은 데이터베이스를 텍스트 파일로 덤프하고 sed 명령을 실행하여 교체를 수행 한 다음 데이터베이스를 MySQL로 다시로드하는 것입니다.

모든 명령은 메모리에서 Linux의 bash입니다.

데이터베이스를 텍스트 파일로 덤프

mysqldump -u user -p databasename > ./db.sql

sed 명령을 실행하여 대상 문자열 찾기 / 바꾸기

sed -i 's/oldString/newString/g' ./db.sql

데이터베이스를 MySQL로 다시로드

mysql -u user -p databasename < ./db.sql

쉬워요.


이것을 PHP 파일에 넣고 실행하면 원하는 작업을 수행해야합니다.

// Connect to your MySQL database.
$hostname = "localhost";
$username = "db_username";
$password = "db_password";
$database = "db_name";

mysql_connect($hostname, $username, $password);

// The find and replace strings.
$find = "find_this_text";
$replace = "replace_with_this_text";

$loop = mysql_query("
    SELECT
        concat('UPDATE ',table_schema,'.',table_name, ' SET ',column_name, '=replace(',column_name,', ''{$find}'', ''{$replace}'');') AS s
    FROM
        information_schema.columns
    WHERE
        table_schema = '{$database}'")
or die ('Cant loop through dbfields: ' . mysql_error());

while ($query = mysql_fetch_assoc($loop))
{
        mysql_query($query['s']);
}

mysite.com/wordpress 찾기 및 mysite.com/news로 바꾸기와 같은 모든 wordpress 블로그 게시물에서 텍스트를 찾아서 바꾸기 위해 PHPmyadmin에서 SQL 쿼리 실행

UPDATE `tj_posts`
SET `post_content` = replace(post_content, 'mysite.com/wordpress', 'mysite.com/news')

 UPDATE table SET field = replace(field, text_needs_to_be_replaced, text_required);

예를 들어, John의 모든 발생을 Mark로 바꾸려면 아래에서 사용합니다.

UPDATE student SET student_name = replace(student_name, 'John', 'Mark');

다른 옵션은 데이터베이스의 각 열에 대한 명령문을 생성하는 것입니다.

SELECT CONCAT(
    'update ', table_name , 
    ' set ', column_name, ' = replace(', column_name,', ''www.oldDomain.com'', ''www.newDomain.com'');'
) AS statement
FROM information_schema.columns
WHERE table_schema = 'mySchema' AND table_name LIKE 'yourPrefix_%';

그러면 실행할 수있는 업데이트 문 목록이 생성됩니다.


"swapnesh"답변이 최고라고 생각합니다! 불행히도 나는 phpMyAdmin (4.5.0.2)에서 그것을 실행할 수 없었습니다.

따라서 동일한 문제가 발생하고 PMA 이외의 다른 데이터베이스에 액세스 할 수없는 경우 다음과 같은 솔루션이 유용했습니다.

UPDATE `wp_posts` AS `toUpdate`,
(SELECT `ID`,REPLACE(`guid`,'http://old.tld','http://new.tld') AS `guid` 
 FROM `wp_posts` WHERE `guid` LIKE 'http://old.tld%') AS `updated`
SET `toUpdate`.`guid`=`updated`.`guid`
WHERE `toUpdate`.`ID`=`updated`.`ID`;

예상되는 결과를 테스트하려면 다음을 사용하십시오.

SELECT `toUpdate`.`guid` AS `old guid`,`updated`.`guid` AS `new guid`
FROM `wp_posts` AS `toUpdate`,
(SELECT `ID`,REPLACE(`guid`,'http://old.tld','http://new.tld') AS `guid`
 FROM `wp_posts` WHERE `guid` LIKE 'http://old.tld%') AS `updated`
WHERE `toUpdate`.`ID`=`updated`.`ID`;

업데이트 할 필드가 직렬화되지 않았다고 확신하면 위의 솔루션이 제대로 작동합니다.

그러나 업데이트해야하는 필드에 직렬화 된 데이터가 포함 된 경우, 대체 된 문자열이 검색된 문자열과 정확히 같은 수의 문자를 가지지 않으면 SQL 파일 또는 덤프 파일에서 간단한 검색 / 대체가 직렬화를 중단합니다.

"직렬화 된"필드는 다음과 같습니다.

a:1:{s:13:"administrator";b:1;}  

관련 데이터의 문자 수는 데이터의 일부로 인코딩됩니다. "객체"를 데이터베이스에 쉽게 저장된 형식으로 쉽게 변환하는 방법입니다. 다음은 객체 데이터를 직렬화 하는 방법, 이유 및 다양한 방법에 대한 설명입니다 . 다음은 평범한 언어로 된 또 다른 설명 입니다.

MySQL에 직렬화 된 데이터를 올바르게 처리 할 수있는 도구가 내장되어 있다면 놀라운 일이지만 그렇지 않습니다.
(이전 링크는 공정하지 않은 이유를 나타냅니다.)

wp-cli
위의 답변 중 일부는 WordPress 데이터베이스에만 해당되는 것으로 보였으며 많은 데이터를 직렬화합니다. 워드 프레스는 명령 행 도구를 제공, 검색-교체 WP 즉, 수행 핸들 직렬화.
기본 명령은 다음과 같습니다.

    wp search-replace 'an-old-string' 'a-new-string' --dry-run

그러나 워드 프레스는 guid변경해서는 안된다는 점을 강조 하므로 해당 열을 건너 뛰는 것이 좋습니다. 또한 종종 wp_users테이블 을 건너 뛰고 싶을 때가 있습니다 . 그 모습은 다음과 같습니다.

wp search-replace 'https://old-domain.com' 'https://shiney-new-domain.com' --skip-columns=guid --skip-tables=wp_users --dry-run

참고 : --dry-run플래그를 추가하여 복사하여 붙여 넣기가 자동으로 다른 사람의 데이터베이스를 망칠 수는 없습니다. 스크립트가 원하는 작업을 수행 한 후 해당 플래그없이 다시 실행하십시오.

플러그인
WordPress를 사용하는 경우 GUI 인터페이스를 제공하는 많은 무료 및 상용 플러그인이 많이 있으며 추가 기능이 많이 포함되어 있습니다.

Interconnect / it PHP 스크립트
Interconnect / it는 WordPress 사이트에서 사용하기 위해 작성된 직렬화 된 데이터, 세이프 서치 및 대체 도구 를 처리하는 PHP 스크립트를 제공 하지만 PHP로 직렬화 된 모든 데이터베이스에서 사용할 수있는 것처럼 보입니다. WordPress를 포함한 많은 회사에서이 도구를 권장합니다. 여기에 지침 은 페이지 아래 약 3/4입니다.


FAST (변경 SQL 쿼리) 생성

mysql -e "SELECT CONCAT ( 'update', table_name, 'set', column_name, '= replace (', column_name, ',' 'www.oldsite.com' ',' 'www.newsite.com' '); ') AS_FROM information_schema.columns WHERE table_name LIKE'wp_ % ' "-u root -p your_db_name_here> upgrade_script.sql

파일 시작시 모든 쓰레기를 제거하십시오. 나는 몇 가지를했다.

nano upgrade_script.sql

--force 옵션으로 생성 된 스크립트를 실행하여 오류를 건너 뜁니다. (느리게-큰 DB라면 커피를 잡아라)

mysql -u root -p your_db_name_here --force <upgrade_script.sql


SQL 파일로 내보내고 Visual Studio 코드와 같은 편집기로 파일을 열고 단어를 찾아서 다시 배치하는 것이 가장 좋습니다. 나는 총 1,4600 단어 16 단어에 1 분에 1 공연 파일 SQL에서 바꿉니다. 최선의 방법. 교체 후 저장하고 다시 가져옵니다. 가져 오기 위해 zip으로 압축하는 것을 잊지 마십시오.

참고 URL : https://stackoverflow.com/questions/11839060/find-and-replace-text-in-the-entire-table-using-a-mysql-query

반응형