环境linux mysql复制  一主一从
在 linux 的 mysql 的 从机器上每次遇到 莫名故障 从机器断开 
每次总是要 用root帐号进入 控制台之后 slave stop;  change master....;  slave start
手忙脚乱 有时候容易错。
我在 复制库 下写了一个存储过程 
之后在linux脚本里调用这个 存储过程
但是发生错误 
CREATE PROCEDURE `slave`(p1 varchar(20), p2 int)
    COMMENT 'This procedure generates'
BEGIN
set @file=p1;
set @pos=p2;
if (length(@file)>0) and (length(@pos)>0)  then
slave stop;
set @tempSql=concat("CHANGE MASTER to master_host='10.1.1.0',master_user='rep',master_password='rep',master_log_file='mysql-bin.",@file,"',master_log_pos=",@pos);
PREPARE mainStmt FROM @tempsql;
EXECUTE mainStmt;shell 脚本呢调用这个存储过程,执行脚本发生错误。
有没有什么方法可以 执行这个存储过程 ??(或者我完全用脚本来做 不用存储过程
slave 应该是库级别的 估计存储过程不能做这个事情。---还没有确定这个
思考下 我直接这样用mysql -uroot -e"slave stop; change masterCHANGE MASTER to master_host='10.1.1.0',master_user='rep',master_password='rep',master_log_file='mysql-bin.",@file,"',master_log_pos=",@pos "  ;  slave start; "
如果脚本里这样用 ,会发现mysql-bin.",@file 这个外界传递的参数无法到里面去  
猜测是可以做到 ,但shell 感觉哦还难做

解决方案 »

  1.   

    slave stop; change master....; slave start  必须在同一session 下 mysql -uroot -e"slave stop; change masterCHANGE MASTER to master_host='10.1.1.0',master_user='rep',master_password='rep',master_log_file='mysql-bin.",@file,"',master_log_pos=",@pos " ; slave start; "如果是静态的数值 我刚测试脚本是么有问题的。
    现在我思考如何从外面传入参数到这个里面 。 如果 master_log_file='前面没有 这个'   那么就很简单。现在如何才能把这个外面的动态参数放到 '后面去??
      

  2.   

    直接这样 用是 可以 bin.$1’,,master_log_pos=$2  finished
      

  3.   

    DELIMITER $$
    CREATE PROCEDURE `slave`(p1 varchar(20), p2 int)
      COMMENT 'This procedure generates'
    BEGIN
    set @file=p1;
    set @pos=p2;
    if (length(@file)>0) and (length(@pos)>0) then
    slave stop;
    END IF;
    set @tempSql=concat("CHANGE MASTER to master_host='10.1.1.0',master_user='rep',master_password='rep',master_log_file='mysql-bin.",@file,"',master_log_pos=",@pos);
    PREPARE mainStmt FROM @tempsql;
    EXECUTE mainStmt;END;$$
    DELIMITER ;我觉得这样的方法不好;楼主最好解决为什么会出现问题的原因,解决掉;
      

  4.   

    1你需要的是监控从机的断。
    2分析断的原因,并解决。
    不外乎数据库原因,这是第一类,硬件原因,系统原因,内存原因,网络原因,这是第二类。分清是哪类就好象 断点续传,除了数据库的原因外,mysql设计的是从机可以自动恢复工作。解决过程可以用替换法,即1主2从。因为不太可能b和c的硬件都有问题,或系统都有问题。
    即a-->b-->c
    也就是说看看b和c是不是都会断,断时从机报什么错。你这脚本解决方案,不应该再考虑了。