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
メリット
ないと思う。