linux 生产机器上配置了mysql 主从 环境 (2台机器 a b , 其中a是主 b 是从, 各自一个mysql服务器, 之间是主从关系)现在要做复杂的数据清理。已经用os shell脚本完全实现。
现在有一点有点困惑
a 机器上有3个 sql需要同时在 a b 机器上执行 。 这3个sql有先后关系。如果有mysql复制经验的知道b从机器的执行sql速度慢于a机器的。
所以a机器总是人工等一段时间(虽然很短 但还是要等)java开发有个多线程可以让几个线程无先后同时执行。 我开始用脚本发现无法用这个理念(脚本呢里 命令都是有先后的 )我的问题如下
在一个脚本里
mysql -ha机器 执行某个sql
《同时》他执行mysql -hb机器 执行相同的sql 【只有这个完成后 操作才能往下继续??】这个有可能用脚本实现吗?
现在有一点有点困惑
a 机器上有3个 sql需要同时在 a b 机器上执行 。 这3个sql有先后关系。如果有mysql复制经验的知道b从机器的执行sql速度慢于a机器的。
所以a机器总是人工等一段时间(虽然很短 但还是要等)java开发有个多线程可以让几个线程无先后同时执行。 我开始用脚本发现无法用这个理念(脚本呢里 命令都是有先后的 )我的问题如下
在一个脚本里
mysql -ha机器 执行某个sql
《同时》他执行mysql -hb机器 执行相同的sql 【只有这个完成后 操作才能往下继续??】这个有可能用脚本实现吗?
1 如何 在java里调用某个服务器的脚本执行
3 如何把2个sql 大语句(mysql -ha机器 执行某个sql
《同时》他执行mysql -hb机器 执行相同的sql)
放到java里做. 之前在cplus plus 做过. 不知道java 能否这样做 ??
A,B机器执行SQL的速度,和机器的配置有关。当从机器获取到主的日志后,解析后得到SQL语句,然后在本机执行。A,B两个机器执行SQL的时间点是存在延时的,这个和网络环境和SQL大小有关系,一般情况下延迟很短。
一般来说用MIXED,混合模式。基于语句的SBR产生的日志很小。从主传递到从的速度也快一些。
{
public String methodName; public static void method(String s)
{
System.out.println(s);
while (true)
;
}
public synchronized void method1()
{
Runtime.getRuntime.exec("/opt/usr/..../aaa.sh").waitFor();
}
public synchronized void method2()
{
Runtime.getRuntime.exec("/opt/usr/..../aaa2.sh").waitFor();
} public void run()
{
try
{
getClass().getMethod(methodName).invoke(this);
}
catch (Exception e)
{
}
}
public static void main(String[] args) throws Exception
{
MyThread1 myThread1 = new MyThread1();
for (int i = 1; i <= 2; i++)
{
myThread1.methodName = "method" + String.valueOf(i);
new Thread(myThread1).start();
sleep(100);
}
}
}
/mysqlaMachine1.sh &
./mysqlaMachine2.sh
./mysqlaMachine3.sh &&
./mysqlaMachine4.sh
./mysqlaMachine5.sh &
./mysqlaMachine6.sh
这个还没有经过2台机器 复杂测试 (因为在线数据不允许丢失 所以测试很很复杂)
注意 & && 的选用这里非常精细