CSVおよびSELECTINTOOUTFILE
http://dev.mysql.com/doc/refman /5.7/en/select-into.html
SELECT ... INTO OUTFILEは、選択した行をファイルに書き込みます。列と行のターミネータを指定して、特定の出力形式を生成できます。
完全な例を次に示します。
SELECT * FROM my_table INTO OUTFILE '/tmp/my_table.csv'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM test_table;
ファイルはサーバーに保存され、選択したパスは書き込み可能である必要があります。このクエリはPHPとWebリクエストを介して実行できますが、mysqlコンソールを介して実行するのが最適です。
この方法でエクスポートされたデータは、データ入力の読み込み
この方法は、結果セットを反復処理して行ごとにファイルに保存するのに優れていますが、使用するほど良くはありません...
mysqldump
mysqldump は多くの点でSELECTINTOOUTFILEよりも優れており、CSVの生成は、このコマンドで実行できる多くのことの1つにすぎません。
mysqldumpクライアントユーティリティは論理バックアップを実行し、元のデータベースオブジェクト定義とテーブルデータを再現するために実行できる一連のSQLステートメントを生成します。バックアップまたは別のSQLサーバーへの転送のために1つ以上のMySQLデータベースをダンプします。 mysqldumpコマンドは、CSV、その他の区切りテキスト、またはXML形式で出力を生成することもできます。
理想的には、mysqldumpはシェルから呼び出す必要があります。 exec を使用することができます phpで実行しますが、データの量によってはダンプの生成に時間がかかる場合があり、phpスクリプトは通常30秒間しか実行されないため、バックグラウンドプロセスとして実行する必要があります。
mysqldumpには問題がかなりあります。
大量のデータをバックアップするための高速またはスケーラブルなソリューションとしては意図されていません。データサイズが大きい場合、バックアップ手順にかなりの時間がかかる場合でも、SQLステートメントの再生には挿入やインデックス作成などのディスクI / Oが含まれるため、データの復元に非常に時間がかかる可能性があります。
古典的な例は次の質問を参照してください: Pythonを使用したMySQLバックアップでサーバーがクラッシュする 1つのmysqldumpが、前のmysqldumpが終了する前に開始し、Webサイトが完全に応答しなくなったように見える場合。
MySQLレプリケーション
レプリケーションにより、1つのMySQLデータベースサーバー(マスター)からのデータを1つ以上のMySQLデータベースサーバー(スレーブ)にコピーできます。レプリケーションはデフォルトで非同期です。マスターから更新を受信するために、スレーブを永続的に接続する必要はありません。構成に応じて、すべてのデータベース、選択したデータベース、またはデータベース内の選択したテーブルを複製できます。
したがって、レプリケーション
SELECT INTO OUTFILE
とは動作が異なります またはmsyqldump
ローカルコピーのデータをほぼ最新の状態に保つのが理想的です(完全に同期していると言えますが、スレーブラグと呼ばれるものがあります)。一方、スケジュールされたタスクを使用してmysqldump
を実行する場合 24時間に1回。 23時間後にサーバーがクラッシュした場合、どうなるか想像してみてください。
mysqldumpを実行するたびに、大量のデータを生成し、定期的に実行し続けると、ハードディスクがいっぱいになるか、ファイルストレージの請求額が頭打ちになります。レプリケーションでは、変更のみがサーバーに渡されます(いわゆるbinlogを使用)
エクストラバックアップ
レプリケーションの代わりに、 PerconaXtraBackup を使用することもできます。 。
Percona XtraBackupは、バックアップ中にデータベースをロックしないMySQLベースのサーバー用のオープンソースのホットバックアップユーティリティです。
Perconaによるものですが、MysqlおよびMariadbと互換性があります。 mysqldumpの最大の制限である増分バックアップを実行する機能があります。