일반적으로 phpmyadmin을 사용하여 MySQL 데이터베이스의 텍스트를 바꾸려면 수동 찾기를 사용합니다. 나는 지금 피곤합니다 .phpmyadmin의 전체 테이블에서 텍스트를 찾아 새로운 텍스트로 바꾸는 쿼리를 어떻게 실행할 수 있습니까?
예 : 키워드 찾기 domain.com
,로 교체하십시오 www.domain.com
.
일반적으로 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
다시 업로드합니다.
If you want to edit from all tables, best way is to take the dump and then find/replace and upload it back.
찾기 / 바꾸기를 위해 덤프에서 sed를 사용하십시오.sed "s:unwanted_text:wanted_text:g" dump.sql
내가 찾은 가장 쉬운 방법은 데이터베이스를 텍스트 파일로 덤프하고 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
쉬워요.
\/\/domain.com
sed -i
명령이 unterminated substitute pattern
오류를 발생 시킬 수 있음을 상기 시킵니다. sed -i '' -e 's/oldString/newString/g' ./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 쿼리를 실행합니다.이 예제에서 tj_posts
UPDATE `tj_posts`
SET `post_content` = replace(post_content, 'mysite.com/wordpress', 'mysite.com/news')
wp_posts
쿼리처럼 보입니다UPDATE `wp_posts` SET `post_content` = replace(post_content, 'mysite.com/wordpress', 'mysite.com/news')
다른 옵션은 데이터베이스의 각 열에 대한 명령문을 생성하는 것입니다.
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;}
관련 데이터의 문자 수는 데이터의 일부로 인코딩됩니다.
직렬화는 "개체"를 데이터베이스에 쉽게 저장되는 형식으로 변환하거나 다른 언어간에 개체 데이터를 쉽게 전송하는 방법입니다.
다음은 객체 데이터를 직렬화 하는 데 사용되는 여러 가지 방법에 대한 설명 과 그 이유는 무엇이며, WordPress 중심의 게시물은 직렬화 된 데이터, 그 의미는 무엇이며 왜 그렇게 중요합니까? 일반 언어로.
MySQL에 직렬화 된 데이터를 자동으로 처리하는 도구가 내장되어 있으면 놀랍지 만 그렇지 않습니다. 직렬화 형식이 다르기 때문에 그렇게하는 것도 의미가 없습니다.
wp-cli
위의 답변 중 일부는 WordPress 데이터베이스에만 해당되는 것으로 보였으며 많은 데이터를 직렬화합니다. 워드 프레스는 명령 행 도구를 제공, 검색-교체 WP 즉, 수행 핸들 직렬화.
기본 명령은 다음과 같습니다.
wp search-replace 'an-old-string' 'a-new-string' --dry-run
그러나 WordPress에서는 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는 직렬화 된 데이터를 처리 할 수있는 PHP 스크립트 ( 안전 검색 및 바꾸기 도구)를 제공합니다. WordPress 사이트에서 사용하기 위해 만들어졌지만 PHP로 직렬화 된 모든 데이터베이스에서 사용할 수있는 것처럼 보입니다.
WordPress 자체를 포함한 많은 회사에서이 도구를 권장합니다. 여기에 지침 은 페이지 아래 약 3/4입니다.
SQL 파일로 내보내고 Visual Studio 코드와 같은 편집기로 파일을 열고 단어를 찾아서 다시 배치하는 것이 가장 좋습니다. 나는 총 1,4600 단어 16 단어에 1 분에 1 공연 파일 SQL에서 바꿉니다. 최선의 방법. 교체 후 저장하고 다시 가져옵니다. 가져 오기 위해 zip으로 압축하는 것을 잊지 마십시오.
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
mysql -u root -p your_db_name_here --force <upgrade_script.sql