サーバー上で mysql v5.0.77 を実行して、いくつかの測定データを収集しています。
mysql サーバーには、次のデータベースがあります。
raw_data_db
config_tables_db
processing_data_db
「raw_data_db」と「config_tables_db」からの情報を使用して構築された「processed_data_db」のみを複製したいと考えています。
処理されたデータを構築しているステートメントを複製しようとすると、スレーブサーバーでエラーが発生し続けます。
例:
[ERROR] Slave: Error 'Table 'raw_data_db.s253' doesn't exist' on query. Default database: 'data'. Query: 'CREATE TEMPORARY TABLE temp SELECT * FROM raw_data_db.s253 WHERE DateTimeVal>='2011/04/21 17:00:00' AND DateTimeVal<='2011/04/21 17:10:00'', Error_code: 1146
私が想定しているのは、データベースを複製していないため、クロスデータベースの選択が生のデータベースを見つけることができず、データがスレーブに存在しないということです...またはそれらの線に沿ったものですか?
そのため、ignoreを使用してみましたが、まだエラー
replicate-wild-ignore-table = raw_data_db.*
が 発生しています。
その他の構成情報:
replica-rewrite-db = processing_data_db->data
replica-do-db = data
すべてのテーブルが他のデータベースへの参照から作成されている場合、1 つのデータベースだけを複製することは可能ですか? このエラーを回避する方法についてのアイデアはありますか?
行ベースのレプリケーションを調べましたが、うまくいくように見えましたが、v5.1 以降でしか利用できません..以前のバージョンに似たようなものはありますか?
無視テーブル ステートメントを「data.%temp%」に修正しました。問題なく無視しているように見えますが、挿入ステートメントが存在しないテーブルを参照しているため、必要なテーブルを複製できません。
元。
Error 'Table 'data.temp' doesn't exist' on query. Default database: 'data'. Query: 'INSERT INTO abc SELECT FROM_UNIXTIME(AVG(UNIX_TIMESTAMP(DateTimeVal))), ROUND(AVG(Difference),3), ROUND(STDDEV(Difference),3), ROUND(AVG(Frequency),0), ROUND(AVG(SignalPower),1) FROM temp WHERE ABS(Difference)<'10000.0' AND Difference!='0''
処理では、生のデータベースから一時テーブルを作成し、一時テーブルのすべての値を平均して結果をprocessed_data_dbに挿入していますが、createステートメントを無視しているため、それらのテーブルにアクセスすることはできませんが、そもそもそれらを無視している理由は、複製したいもの以外のテーブルを参照しているためです...だから、これにどのようにアプローチすべきかわかりません....どんな提案でも大歓迎です。