1

我需要在 mysql 中进行主从复制。

所以我正在创建这个程序来通过程序动态更改主程序

delimiter //

CREATE PROCEDURE change_master( in host_ip varchar(50))

begin

stop slave;

CHANGE MASTER TO MASTER_HOST = host_ip, MASTER_PORT=3306, MASTER_USER='replication', MASTER_PASSWORD='slave';

start slave;

end;
//

但我得到一个错误。

ERROR 1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在 'host_ip, MASTER_PORT=3306, MASTER_USER='replication', MASTER_PASSWORD='slave' 附近使用的正确语法;s' 在第 4 行

如果我把它留空就好了

例如。

CHANGE MASTER TO MASTER_HOST = '', MASTER_PORT=3306, MASTER_USER='replication', MASTER_PASSWORD='slave';

我尝试了很多次,但在这个查询中我无法使用任何变量,为什么?

如果你知道帮助我。

谢谢 。

4

1 回答 1

3

主机值必须用引号引起来。我认为这是不可能的,除非你使用准备好的陈述。

delimiter //

CREATE PROCEDURE change_master( in host_ip varchar(50))

begin

set @ssql:=concat("CHANGE MASTER TO MASTER_HOST = '",host_ip,"', MASTER_PORT=3306, MASTER_USER='replication', MASTER_PASSWORD='slave'");

stop slave;

prepare sql_stm from @ssql;
execute sql_stm;
deallocate prepare sql_stm;

start slave;

end//
delimiter ;

问候!蒂内倒钩

于 2012-11-29T13:28:04.437 回答