web-dev-qa-db-ja.com

ローカル開発用の検索および置換スクリプトを使用せずに本番サイトからMySQLダンプを作成する方法

私は自分のローカル開発環境にインポートするために私のWordPress本番データベースのMySQLダンプを実行しました。このデータベースのダンプとインポートを頻繁に実行する予定です。すべてのパーマリンク、サイトURLなどを更新する検索と置換スクリプトまたはMySQLクエリを実行することを避けることはできますか?

上記のリンクを上書きするために、wp-config.phpに次のようなものを含めることができますか。

define('WP_HOME',    'http://localhost.com:8888/example');
define('WP_SITEURL', 'http://localhost:8888/example');

私の目標は、本番サイトからローカルに定期的にデータベースダンプを実行することをできるだけ簡単にすることです。

2
Matt

あなたが投稿したものは、WordPressによって生成されたすべてのリンク(パーマリンク、ローカルファイル用のスクリプト/スタイルエンキュー、特集画像など)に対してうまく機能します。

私は自分のサイトURLとホームURLを次のように動的に定義します。

<?php
define('WP_HOME', 'http://' . $_SERVER['HTTP_Host']);
define('WP_SITEURL', WP_HOME . '/wp');

注:HTTP_Hostは常に存在するわけではありません。注意して使用してください

他の記事へのリンクや画像へのリンクなど、コンテンツ、リンク、URLに関しては、データベース内にあるため変更されず、動的に生成されません。ただし、おそらくpreg_replaceフィルタを使ってthe_contentマジックを行うことができます。

<?php
// probably too simplistic and will break things.
add_filter('the_content', 'wpse75106_change_Host');
function wpse75106_change_Host($c)
{
    return preg_replace(
        '#(https?://)production_site.com#u',
        '{$1}local_site.com',
        $c
    );
}

そうは言っても、重要なのはWPが生成するものです、私はあなたのローカルマシン上のコンテンツリンク/画像であまり心配しないでしょう。

3
chrisguitarguy

単純検索と置換は、DB内のデータ(ウィジェットなど)の一部がシリアル化されているため、単純に十分ではありません。シリアル化されたデータ内のテキストを置き換えるには、まずシリアル化を解除します。

あなたができる最善のことはあなたのテストサーバーのIPアドレスにプロダクションドメインを指すように少なくともあなたのhostsファイルを変更することを含むべきであるあなたの開発サーバー上でプロダクション環境を完全に複製することです。これを設定したら、ソースファイルとDBを同期させておくと、良い開発環境が得られます。

0
Mark Kaplun