6

クエリがあります。2つの異なるサーバーに2つのテーブルがあります。どちらのテーブルも同じ構造です。あるサーバーのマスターテーブルは毎日更新されるので、cronジョブまたはphpスクリプトcronで別のサーバーの2番目のスレーブテーブルを更新する必要があります。私はたくさんのスクリプトを見てきましたが、どれも私の要件を解決しませんでした。

4

2 に答える 2

7

これを行うのに適したスクリプトが見つからなかったとは信じられません。サーバー間の帯域幅と接続性、およびテーブルのデータサイズに応じて、次のことができます。

  • テーブル全体を直接転送します。

    mysqldump [options] sourcedatabase tablename \
      | mysql [options] --host remoteserver --user username ...
    
  • MySQL圧縮でテーブルを転送する

    # same as above, mysql has the "-C" flag
    
  • SSH暗号化と圧縮を使用した転送。mysqlはリモートで実行されます

    mysqldump [options] sourcedatabase tablename \
      | ssh -C user@remoteserver 'mysql [options]'
    
  • 中間SQLファイルとrsyncを使用して転送し、変更のみを転送します

    mysqldump [options] sourcedb tbl > dump.sql
    rsync [-z] dump.sql user@remoteserver:/path/to/remote/dump.sql
    ssh user@remoteserver "mysql [options] < /path/to/remote/dump.sql"
    

上記はすべて単純なテーブルの上書きであり、リモートデータは失われ、マスターコピーに置き換えられます。mysqldump-plus-rsync-plus-sshは、変更にほぼ比例した時間で実行されます。つまり、10 GBのSQLダンプがあり、12個のINSERTを追加した場合、転送ステージで同期するには最大で数秒かかります。 2つのSQLファイル。

挿入段階も最適化するには、完全なMySQLレプリケーションを実行するか、同期時に手動でレプリケートするためにテーブルの操作を識別する方法が必要になります。これには、テーブル構造の変更が必要になる場合があります。たとえば、「last-synced-on」列と「needs-deleting」列を追加したり、補助テーブルを導入したりする必要があります。

于 2012-09-13T11:34:15.983 に答える
1

1つの簡単なソリューションを使用できます-dbForgeStudioforMySQLのデータ同期ツール

  1. 2つの異なるMySQLサーバー上の2つのテーブルを比較および同期するデータ比較プロジェクトを作成します。
  2. 作成したデータ比較プロジェクトドキュメント(* .dcompファイル)を使用して、コマンドラインモードでアプリケーションを実行します。
于 2012-09-13T11:35:26.830 に答える