これについてWordpressフォーラムを見回しましたが、何も見つからなかったので、ここで試してみようと思いました.
新しいプラグインなどのテストに使用されるステージング/開発用の Wordpress セットアップがある場合、ステージング データベースのデータを本番データベースに戻すにはどうすればよいでしょうか? これを行うための「Wordpress のベスト プラクティス」の方法はありますか、それとも、あるデータベースから別のデータベースにテーブルを手動で移行する必要がありますか?
本番Wordpress DBのコピーをmysqldumpし、テストWordpressインストールに復元してから、テストDBのすべての「本番」設定とURLを修正するスクリプトがあります。
私の運用データベースとテスト データベースは同じサーバー上にありますが、mysqldump の設定を変更して、リモートの mysql サーバーからダンプし、ローカル サーバーに復元することは非常に簡単です。
ここに私のスクリプトがあります:
overwrite_test.coach_db_with_coache_db.sh
#!/bin/bash
dbUser="co*******"
dbPassword="*****"
dbSource="coach_production"
dbDest="coach_test"
tmpDumpFile="/tmp/$dbSource.sql"
mysqldump --add-drop-table --extended-insert --user=$dbUser --password=$dbPassword --routines --result-file=$tmpDumpFile $dbSource
mysql --user=$dbUser --password=$dbPassword $dbDest < $tmpDumpFile
mysql --user=$dbUser --password=$dbPassword $dbDest < /AdminScripts/change_coach_to_test.coach.sql
change_coach_to_test.coach.sql
-- Change all db references from @oldDomain to @newDomain
SET @oldDomain = 'coach.co.za';
SET @newDomain = 'test.coach.co.za';
SET @testUsersPassword = 'password';
UPDATE `wp_1_options` SET `option_value` = REPLACE(`option_value`,@oldDomain,@newDomain) WHERE `option_name` IN ('siteurl','home','fileupload_url');
UPDATE `wp_1_posts` SET `post_content` = REPLACE(`post_content`,@oldDomain,@newDomain);
UPDATE `wp_1_posts` SET `guid` = REPLACE(`guid`,@oldDomain,@newDomain);
UPDATE `wp_blogs` SET `domain` = @newDomain WHERE `domain` = @oldDomain;
UPDATE `wp_users` SET `user_pass` = MD5( @testUsersPassword );
-- Only valid for main wpmu site
UPDATE `wp_site` SET `domain` = @newDomain WHERE `domain` = @oldDomain;
2つの方法は、ツールでエクスポート/インポート機能を使用するか、データベースをコピーすることです。WordPressデータベースバックアッププラグインを使用して、本番データベースのコピーを毎週自分宛にメールで送信します。
ホストされたphp実装でアップロードできるファイルのデフォルト値はデフォルトで小さすぎる傾向があるため、php.iniファイルを頻繁に構成する必要があるため、インポート機能はワードプレスのブログを移動する際に問題になる可能性があります。
おそらく、あなたは間違ったものを探しているだけです。バックアッププラグインはこれを簡単に処理できませんか? 私はそれらがすべての大きなCMSパッケージに存在することを知っています...
私は、本番用のワードプレス Web サイトからデータベースをデスクトップ マシン上のオフライン開発コピーにプルして、サイトを変更し、既存のブログ コンテンツと履歴の完全なセットでテストできるようにしたいと考えていました。
データベースのオフライン バックアップを作成し、それをローカルの開発データベースにインポートするだけでは機能しないため、これは問題であることが判明しました。
本番データベースから開発データベースにデータを移動する際のこれらの問題を克服することは、おそらく他の方法にも使用できます-したがって、これらのガイドラインを使用して、やりたいことにも使用できると思います-開発データから始めて移動するだけですそれを生産する。
ここでの問題は次のとおりです。
これを正しく行っていることを確認するために、ローカル マシンにインストールしていた wordpress を吹き飛ばし、最初からやり直しました。
クリーンで新しいワードプレスのインストールと、そのための真新しいデフォルトの新しく作成されたローカルデータベースができたら、phpMyAdminでデータベースを開き、wp_postsを調べました
テーブル。その中に、各レコード (つまり、各投稿) には、その投稿の場所を示す "guid" というタイトルの列があります。たとえば、新しいデフォルトの最初のもの
インストールには、次の「guid」値が含まれています。
http://localhost/wordpress/?p=1
オンライン バージョンの wp_posts テーブルを見ると、代わりにこの場所にオンラインのサイトへの URL が表示されます。
これらすべての外部参照をインポートすることになるため、テーブルをローカル インストールに大量にインポートすることはできません。ローカル バージョンをローカルでナビゲートできなくなります。
そこで、オンライン サイトのデータベースのバックアップ コピーを作成し、.sql ファイルとしてローカルに保存しました。次に、そのファイルをテキスト エディターで開きました (素晴らしいフリー ソフトウェアである notepad++ を使用しましたが、任意のテキスト エディターを使用できます)。私が気をつけなければならなかったこと:
シンプルにするために、投稿だけを行いましょう。オンライン データベースから作成した .sql のバックアップ コピーで、wp_posts テーブルの先頭を見つけます。次のようになります。
--
-- Table structure for table `wp_posts`
--
DROP TABLE IF EXISTS `wp_posts`;
CREATE TABLE `wp_posts` (
...等々。その上から、ファイルの先頭にあるデータベースの開始を示すコメントのすぐ下まですべてを強調表示し ( -- Database: 'your database name' と表示されます)、削除します。次に、wp_posts テーブルの最後に移動し、それ以降のすべてを削除してから、ファイルの最後まで削除します。これで、ファイルには投稿のみが含まれ、他には何も含まれなくなりました。
これを別のドキュメントとして保存します。それをposts.sqlなどと呼んでください。
さて、このposts.sqlファイルでは、2 つの検索/置換アクションを実行する必要があります。
このファイルを再度保存して、これらの変更が設定されていることを確認します。
これで、phpMyAdmin を使用してローカル マシンの wordpress データベースにアクセスし、[インポート] タブを選択して、作成したposts.sqlファイルにセレクターを移動し、インポートします。これにより、そのファイル内のすべてのデータがローカルの wp_posts テーブルに取り込まれます。
それが終了したら、ローカルのワードプレス サイトを参照します。そこにすべての投稿が表示されます。万歳!
作成したコメント、タグ、カテゴリ、および静的ページなどを取り込みたい場合は、他のいくつかのテーブルに対して同様のことを行う必要がある場合があります。
これは複雑なプロセスであることを認識しています。おそらく、この作業を簡単にするツールがどこかにあるので、誰かがそのツールを知っているなら、私はそれについて知りたいです. 私が説明した方法よりも手動でこれを行うためのより良い方法を誰かが知っている場合は、それも知りたいです!
それまでは、これが私がそれを行う方法を見つけた方法です。うまくいけば、それがあなたを正しい方向に導くのに役立ちます.
シリアル化されたオブジェクトを処理する必要があります。これを処理するためのクライアント側のHTML5ユーティリティを次に示します。すべてjavascriptであるため、非常に高速です。
別の方法は、bashスクリプトをデプロイメントにフックすることです。したがって、サイトがデプロイされると、dbはバックアップされ、新しいドメインで逆シリアル化されます。
これは、ワードプレスのコアアーキテクチャの問題を要約したものです...しかし、データベースに保存されているドメイン名と絶対URLの問題を解決するプラグインを作成しました。
http://wordpress.org/extend/plugins/root-relative-urls/
これにより、@oddbillで概説されている問題が解決されます。ただし、そのフィールドがリンク生成に使用されることはないため、GUID列にURLが含まれていることについてはあまり心配しないでください。
@markratledgeは、基本的に次のような長いドキュメントへのリンクをいくつか提供します。
//書き出す
mysqldump -u[username] -p[password] [database] > backup.sql
//輸入
mysql -u[username] -p[password] [database] < backup.sql
コメントとトラックバックのすべてが失われないように、ステージングから本番環境にプッシュする場合は、comments / messages_metaテーブルを除外する必要があります(@DavidLaingのアプローチはそれらを一掃します)。これは、コンテンツの変更のみを行うことを前提としています。ステージング環境。本番環境とステージング環境に変更を加える場合は、データを大規模に上書きするのではなく、データを同期するスクリプトを作成する必要があります...そのタスクを頑張ってください。投資する前に、作成および変更されたタイムスタンプ列を追加することをお勧めします。現在のスキーマでは時間がかかりすぎます。
そして最後に、@ RussellStueverのアプローチはほとんどの状況に適しています。ホストにマップされたサイトと本番サイトを閲覧しているときは、必ず知っておいてください。一部のブラウザは、物理的に閉じて新しいプロセスを開始するまで、DNSルックアップを数日間キャッシュするためです。その時点で、ホストの切り替えには時間がかかる場合があり、頻繁に切り替えるとイライラする場合があります。また、iPhoneでテストする必要がある場合は、最初にサイトをライブで公開するか、ほとんどのモバイルデバイスでhostsファイルを変更できないため、アウトバウンドインターネットリクエストをローカルサーバーに再マッピングできる優れたルーターを使用する必要があります。
私のプラグインを使用すると、通常の落とし穴なしに、http:// localhost /、http://staging.server.local/、またはhttp://www.production.comから開発およびテストできます。そして、データを移行するには、データのエクスポートとインポートと同じくらい簡単で、検索と置換の手順やデータベース設定の微調整は必要ありません。
また、インポート/エクスポートツールに依存しないでください。通常のワードプレスのインストールですべてをキャプチャするわけではなく、不必要な検索と置換の手順が必要です。