web-dev-qa-db-ja.com

データベース内の文字列のすべてのインスタンスを検索して置き換える方法は?

wordpress install(サーバーの名前)の中に、複数の列、レコード、テーブルにわたって何千回も含まれている文字列があります。

別のサーバーの場所で更新したいのですが、コンテンツを移動しています。

したがって、ソースは http:// my-server1/some/link/to/something のようになり、 http:// my-other)に置き換えたいと思います。 -server/some/link/to/something 。私は基本的に、 http:// my-server1 のすべてのインスタンスに対してこのプロセスを繰り返すことを探しています。

MySQLでこれを行う簡単な方法はありますか?道具?それとも、悲しいことにすべてのレコードを問題なく更新する必要がありますか?

ありがとうございました、

22
barfoon

それを行うための大まかな(しかし効果的な)方法は、スキーマをファイルにダンプし、検索と置換を注意深く適用してから、再インポートすることです。

実際のところ、私は今日それをしました:)

40
cherouvim

グーグル検索でこれに出くわしました、しかしこれは何人かの人々を助けるかもしれません。テーブルと列がわかっている場合(phpMyAdminのワイルドカード検索を使用してこれを見つけることができます)、

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

太字パーツを自分のものに置き換えます。

大規模なデータベースがある場合は、これをスクリプトに適用して、各テーブルと列をループすることができます。

18
Enbee

データベース全体を再インポートすることに満足している場合は、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');
11
Code Synthesis

あなたの質問は2009年に投稿され、その年の間に別の男が特定のデータベースのすべてのテーブル全体で文字列を検索するための基本的なphpツールを開発しました。オプションで、すべてのオカレンスを別の文字列に置き換えることもできます。

それでも5年後(執筆時点)、Wordpressインストールに対するこのツールの使用は効果的であり、私の意見ではmysqlダンプを使用するよりもはるかに簡単です(ただし、ダンプを作成することをお勧めします)バックアップの目的でスクリプトを実行する前にも)。

詳細については、作成者のブログ Eric Amundson およびプロジェクトのランチパッドのページ MySQL Search&Replace を参照してください。

まだ答えを探しているとは思いませんが、この問題の解決策を探している他の誰かが将来ここにやってくるのに役立つことを願って、ヒントも投稿することにしました。

2
Luca Borrione

Wordpressプラグイン Search Regex と呼ばれるものもあります。これにより、データベース全体でgrep検索と置換を実行できます。

1
markratledge

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 );
0
Alexey Vorobyov

MySQLのREPLACEまたはWordPressのsqlファイルまたはdbの文字列を手動で置き換えることは良い方法ではありません。 WordPressシリアル化されたフィールドを使用しているため、文字列を置き換えると破損する可能性があります(私の場合)

私は使用しました Better Search Replace 私のために完全に機能したプラグイン

0
Ondrej