2017-11-09 2 views
1

pt-archiverでこれを表現する方法は?MySQLクエリをPercona pt-archiver文字列に変換

DELETE * FROM Table1 JOIN ON Table1.id=Table2.id WHERE Table2.id>=1; 

pt-archiverの文字列内でTable1とTable2に参加する可能性はありません。私はこれを試みたが、表2に参加した文字列が欠落しています。

pt-archiver --source h=127.0.0.1,D=db,t=Table1 --purge --where 'Table2.id >= 1' 

は私にあなたのアイデアのいくつかを提供してください。

+0

pt-archiverはマルチテーブルのケースをサポートしていないようです。あなたのクエリを最適化したい場合は、私は大きなものを小さなものに分割すると思います。例えば、 'Table2.id> = 20000000' ...となったら' Table2.id> = 1000000' .. – AnouarZ

+0

はい、私はそれがうまくいくことは知っていますが、この方法でサーバーを手動で制御して、緊急時に。私は次のようにPerconaのホームページにいくつかの解決策を見つけました: 'pt-archiver - source h = host、D = db、t = child --purge \ --where 'EXISTS(SELECT * FROM parent WHERE col = child.col AND child.col> = 1) ''を返します。これはうまくいくかもしれませんが、私は親テーブルがどのようにそしてどこで宣言されるべきか自信がありません。いくつかのアイデア? – Eric

+0

おそらくこれは? 'pt-archiver --source h = localhost、D = db、t = Table1 --purge \ --where 'は存在します(SELECT * FROMテーブル2 WHERE id =テーブル1とテーブル2 id = 1)' ' – Eric

答えて

0

私はpt-archiverを使用して別のテーブルに結合する必要がある行をアーカイブしました。

pt-archiver --source h=host,D=db,t=child --purge \ 
--where 'EXISTS(SELECT * FROM parent WHERE col=child.col AND child.col>=1)'. 

これは仕事ができるが、私は、親テーブルが宣言される方法と場所自信がないです。いくつかのアイデア?

pt-archiverのソースDSNには、正確に1つのテーブルが宣言されています。この例のテーブルはchildです。

parentテーブルをpt-archiverオプションで宣言しません。上記の例とまったく同じように、--whereオプションでスペルアウトしたサブクエリでのみ参照されます。