はあなたの開発ボックス、シンプルなダンプから直接本番システムへのアクセス権を持っていると復元と仮定するのは簡単です:
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変更であり、データではありません。
ありがとうございます!あなたの答えは非常に詳細で徹底的です! – wrecktangle