我有几个主机,我想从中进行相同的查询。所以想象一下,我在每个服务器上都有数据库db和一个表测试,如:
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.但我无法弄清楚如何解决问题。
有什么想法吗?
答案 0 :(得分:0)
使用循环
for host in h1 h2 ; do
mysql -h $host -u myusername -p mypwd -d db -e "select * from test" >> out.txt
done
使用>>附加到文件。将按顺序访问主机,而不是同时访问主机,因此将首先输入来自h1的所有结果,然后输入来自h2的所有结果。如果这还不够,那么还有另一种选择,但它更复杂。