2017-02-08 6 views
1

本番データベースに存在するデータを分析したいと思います。MantainテストのためにリモートプロダクションDBと同期するローカルのmysqlデータベース

  1. 私は本番DB簡単でローカルDBを同期したいと思います:明白な理由のために私は、しかし、私はいくつかの追加要件があり、DB(MySQLの)のローカルコピーを維持します。最後のデータが含まれているべき

    • ダウンロードすべきではありません:私はCLI経由で実行できることを 手動同期が

    • 結構です、私はテーブルを指定できるようにしたいのですがX日

    • は、データセット全体

任意のアイデアが含まれているべきです/ toolsどのようにこれを行うには?私の地元のセットアップは次のとおりです。MacOSの、続編Proは、MySQLサーバ

答えて

1

はあなたの開発ボックス、シンプルなダンプから直接本番システムへのアクセス権を持っていると復元と仮定するのは簡単です:

mysqldump --single-transaction --host production -A \ 
    | mysql --host localhost 

-Aオプションは、すべてのことを意味しデータベース、すべてのテーブルあなたが特定のデータベースをしたい場合は、それらを指定することができます。

mysqldump --single-transaction --host production \ 
    --databases eenie meenie miney moe \ 
    | mysql --host localhost 

その方法は、あなたがMySQLのパスワードと権限が保存されているあなたのmysqlデータベースをダンプし、復元されませんので、データベースを指定するために良いでしょう。

--tablesオプションありますが、それの使用は、ドキュメントから明らかではない、と私はめったにそのオプションを使用していません。構文が何であるかは不明です。

mysqldump --single-transaction --databases eenie meenie miney moe \ 
    > dump.sql 

が次にダウンロード:あなたは本番への直接アクセスを持っていない場合

、あなたがサーバー上で実行される1つのステップは、ファイルにデータをダンプするために、二段階でこれを行う必要があるでしょうローカルのワークステーションにファイルをした後、MySQLデータベースにダンプファイルをロードします。

mysql --host localhost < dump.sql 

あなたはより多くの柔軟性をしたい場合は、あなたがにデータベース&テーブルのリストを配置することができますmydumperと呼ばれるコミュニティツールは、ありますファイル。このツールは無料ですが、ソースから直接コンパイルする必要があります。

残念ながら、唯一の最後のX日を取得することは、よりトリッキーです。を作成したときのデータには、の暗黙の概念はありません。

mysqldumpをので、あなたがデータをダンプ各クエリに条件を追加することができますオプション--whereを持っています。しかし、列名でデータの値をに設定することしかできません。たとえば、すべてのテーブルに同じ名前のタイムスタンプ列がある場合は、データが最後に変更された時刻を確実に示します(つまり、常にトリガーなどでその時刻を維持しています)。

mysqldump --single-transaction --host production \ 
    --databases eenie meenie miney moe \ 
    --where "updatedAt > NOW() - INTERVAL 6 DAY" \ 
    | mysql --host localhost 

すべての表にその列がない場合、これは機能しません。

もう1つの方法は、データではなくテーブル定義のみをダンプして復元することです。

mysqldump --single-transaction --host production --no-data \ 
    --databases eenie meenie miney moe \ 
    | mysql --host localhost 

はその後、別のステップとして、6日前mysqlbinlogツールを使用しているため、データへのすべての変更をつかむために、サーバのバイナリログを使用します。これはサーバー上で実行する必要があります。

mysqlbinlog --start-datetime="2017-02-02 00:00:00" mysql-binlog.* \ 
    > replay.sql 

...download replay.sql... 

その後、ローカルデータベースにそれらの変更を読み込む:「データの最後の6日間」は何を意味しているため

mysql --host localhost < replay.sql 

これは、あなたが欲しいものを本当にはおそらくないでしょうか?過去4日間でUPDATEを使用してデータを変更したが、変更したデータが最初に作成されたのは16日前の場合です。 binlogは一連のSQL変更であり、データではありません。

+0

ありがとうございます!あなたの答えは非常に詳細で徹底的です! – wrecktangle

関連する問題