开发者

Multiple instances of mysql client and stdin

I have several hosts from which i want to do the same query. So imagine, i have on each server the database db and a table test like :

mysql> desc test;
+-------+------------------+------+-----+---------+-------+
| Field | Type             | Null | Key | Default | Extra |
+-------+------------------+------+-----+---------+-------+
| id    | int(10) unsigned | NO   | PRI |         |       | 
| data  | varchar(255)     | YES  |     | NULL    |       | 
+-------+------------------+------+-----+---------+-------+

Obviously, each table test has different data but they all have the same type. Let's say i have 2 host : h1 and h2 which host these tables.

Now i need to write a script which do the same query on each host and get the results on standard output. first idea was :

shell> (mysql -h h1 -u myusername -p mypwd -d db -e "select * f开发者_如何学JAVArom test"; 
        mysql -h h2 -u myusername -p mypwd -d db -e "select * from test";) 
       > out.txt

I want to do it faster, so what i did was :

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

The problem is that i have some collision in my output file like

458 Karma police
459 876 Paint it black  Everything in its right place
460 street spirit

You have two rows on line 2.

My idea was that mysql buffer the result, so the buffer could end in the middle of a row. In this example, the buffer would stop at 459. But i can't figure out how to solve the problem.

Any ideas ?


Use a loop

for host in h1 h2 ; do
    mysql -h $host -u myusername -p mypwd -d db -e "select * from test" >> out.txt
done

Using >> appends to the file. Hosts will be accessed in order, not simultaneously, and so all results from h1 will be entered first, then all results from h2. If this is insufficient then there's another option but it's more complex.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜