0

同じデータベース、異なる値を持つ同じテーブル構造を含む 2 つのサーバーがあります。table1 の両方の列 (ID) の数を比較する必要があり、server1 の db の table1 の max(ID)>max(ID) の server2 の db の table1 の場合、server1 から server2 にすべての新しいレコードを挿入します。

このロジックをシェル スクリプト内に保持する必要があるため、.sh ファイルを呼び出したときにそれが自動的に実行されます。これらのサーバーにアクセスできるローカル マシンから実行したいと考えています。

シェルスクリプト内でどのように比較が行われるのでしょうか。私はMysql DBを使用しています

4

1 に答える 1

0

あなたの声明から私が得たのは、テーブルのいずれかに他のテーブルよりも多くのレコードがあるかどうかをチェックし続けたいということです。そして、より多くのエントリでテーブルを複製します。スクリプト ファイルを使用してタスクを自動化したいので、次の 2 つの方法をお勧めします。

(i) カラム ID を比較する代わりに、テーブルごとに mysql-dump-file を作成し、サイズを比較することでどちらの文字数が多いかを確認できます。より多くのものは、明らかに人口が多いです。したがって、小さなテーブルを大きなテーブルのダンプで上書きします。

 mysqldump -u <username> -p<password> -h <address> <schema> <table>  > <output-file>.sql

(ii) まず、両方のテーブルの COUNT(*) の出力を 2 つの変数に格納し、それらを比較します。

  $tableCount1=$(`echo mysql -u <username> -p<password> -h <address> < <input-file>.sql` | cut -d' ' -f2)

入力ファイルの内容は次のとおりです。

  USE <schema>
  SELECT COUNT(*) FROM <table>;

ID を比較してから、小さいテーブルを大きいテーブルのダンプに置き換えます。

テーブル全体を置き換えたくない場合は、次を使用します。

 mysqldump -u <username> -p<password> -h <address> <schema> <table> --skip-triggers --compact --no-create-info --where=<column_id> > <id> > <output-file>.sql
于 2012-11-26T21:44:56.580 に答える