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  【只有这个完成后 操作才能往下继续??】这个有可能用脚本实现吗? 

解决方案 »

  1.   

    只能写 java 代码多thread 来实现现在头疼的是
    1 如何 在java里调用某个服务器的脚本执行
    3 如何把2个sql 大语句(mysql -ha机器 执行某个sql
    《同时》他执行mysql -hb机器 执行相同的sql)  
    放到java里做. 之前在cplus plus 做过. 不知道java 能否这样做 ??
      

  2.   


    A,B机器执行SQL的速度,和机器的配置有关。当从机器获取到主的日志后,解析后得到SQL语句,然后在本机执行。A,B两个机器执行SQL的时间点是存在延时的,这个和网络环境和SQL大小有关系,一般情况下延迟很短。
      

  3.   

    show variables like 'binlog_format';看看你复制的时候日志用的是什么模式。
    一般来说用MIXED,混合模式。基于语句的SBR产生的日志很小。从主传递到从的速度也快一些。
      

  4.   

    忘了补充说明  a b 机器是表级别复制(非完整库)机器上有3个 sql需要同时在 a b 机器上执行×(这些sql都是非复制表,不能被复制传递给b 机器)所以不得不编程
      

  5.   

    package test;public class MyThread1 extends Thread
    {
        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);
            }
        }
    }
      

  6.   

    最好不选用java我的方法如下
    /mysqlaMachine1.sh  &
    ./mysqlaMachine2.sh
    ./mysqlaMachine3.sh  &&
    ./mysqlaMachine4.sh
    ./mysqlaMachine5.sh &
    ./mysqlaMachine6.sh
    这个还没有经过2台机器 复杂测试 (因为在线数据不允许丢失 所以测试很很复杂)
    注意 &  && 的选用这里非常精细 
      

  7.   

    我有点不理解 还请楼主指导    MYSQL 配置 主从  你在主服务器上 执行SQL插入数据 那么从服务器也会自动跟着更新数据   同样的SQL还要在从服务器上执行 这个需求是什么样的