0
我有幾臺主機從中想要做同樣的查詢。所以,想象一下,我有每個服務器上的數據庫DB和像臺試驗:mysql客戶端和標準輸入的多個實例
mysql> desc test;
+-------+------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------------+------+-----+---------+-------+
| id | int(10) unsigned | NO | PRI | | |
| data | varchar(255) | YES | | NULL | |
+-------+------------------+------+-----+---------+-------+
顯然,每個表測試有不同的數據,但它們都具有相同的類型。 比方說,我有2個主機:h1和h2,它們託管這些表。
現在我需要編寫一個腳本,在每個主機上執行相同的查詢,並在標準輸出上獲取結果。第一個想法是:
shell> (mysql -h h1 -u myusername -p mypwd -d db -e "select * from test";
mysql -h h2 -u myusername -p mypwd -d db -e "select * from test";)
> out.txt
我想這樣做快,所以我所做的就是:
shell> (mysql -h h1 -u myusername -p mypwd -d db -e "select * from test" &
mysql -h h2 -u myusername -p mypwd -d db -e "select * from test" &)
> out.txt
的問題是,我有一個像
458 Karma police
459 876 Paint it black Everything in its right place
460 street spirit
在我的輸出文件中的一些碰撞
你有兩行第2行。
我的想法是,mysql緩衝結果,所以緩衝區可能會在中間結束一排。在這個例子中,緩衝區將在459停止。但我無法弄清楚如何解決這個問題。
任何想法?
這是第一個想法,它給了我有效的結果,但我想同時做,所以我很想知道你的其他選擇! – 2010-09-29 12:31:35
@GuillaumeThomas:我能想到的另一個選擇是命名管道的欺騙。將每個命令的輸出寫入單獨的管道,然後在完成時將它們讀入第三個組合文件。這裏的「棘手」部分是監控命令並確定它們何時完成。如果你想要實時監控結果,那還不夠。 – Sorpigal 2010-09-29 14:42:09
是的,我可以找出一個方法,它運行幾個過程,每個過程將數據保存在一個文件中,然後將所有內容連接成一個文件。 其實,我想知道一個關於緩衝區大小的選項或者類似 – 2010-09-29 15:35:46