SQLのみで、スレーブで集計し、その結果をマスターに書きこむ方法

正直誰得なこの方法、今後自分でも使う機会があるかどうかすら怪しいですが、
メモ代わりとして残しておきます。

やりたい事

マスタスレーブ構成に鳴っているMySQLサーバにおいて、
Perlなどを使わずに、SQLのみでスレーブで集計し、その結果をマスターに書き込みたい。

やり方

マスターで実行するSQLで、system を使いスレーブにSQLを発行。
その結果を受け取り、tsvファイルに保存。
LOAD DATA LOCAL INFICE 構文を使い、マスターのDBに書きこむ。

スレーブで実行するSQL

slave.sql

select
    column_1,
    column_2,
    column_3,
    column_4
from
    table_a
        left join table_b using( column_1, column_2 )
        left join table_c using( column_1, column_2 )
where
        column_1 > 100
    and column_2 > 100
マスターで実行するSQL

master.sql

system /usr/bin/cat slave.sql | /usr/bin/mysql -N -s -u user -ppass -h slave -D test_db > temp.tsv

load data local infile "temp.tsv" into table summry_table;
シェルスクリプト

daily.sh

#!/usr/bin/sh

mysql -u user -ppass -h master -D test_db < master.sql

rm -f temp.tsv

メリット

ないと思う。

デメリット

LOAD DATA INFILE 構文は、update ができない。


正直、Perlとか挟んでやったほうがいいと思うし、融通も効くと思う。