Mysql

MySQL:無法在 mysql 內部執行更改主機

  • August 23, 2017

我正在嘗試創建一個可以執行 change master to command 的儲存過程。

這是我能夠想出的。

DELIMITER //
CREATE PROCEDURE changeMasterTo(IN ip char(20),IN port int,IN user 
char(30),IN password char(30))
LANGUAGE SQL
COMMENT 'changes master to'
ThisStoredProcedure:BEGIN
CHANGE MASTER TO MASTER_HOST=ip, 
MASTER_PORT=port,
MASTER_USER=user,
MASTER_PASSWORD=password,
MASTER_AUTO_POSITION=1,
MASTER_SSL=1;
END;
//

但它失敗並出現以下錯誤。

ERROR 1064 (42000):您的 SQL 語法有錯誤;檢查與您的 MySQL 伺服器版本相對應的手冊,以獲取在附近使用的正確語法

'ip, MASTER_PORT=port, MASTER_USER=user, MASTER_PASSWORD=password, MASTER_AUTO_P'

在第 5 行

我不確定問題是什麼,任何幫助將不勝感激。

host和值應該用單引號括起來userpassword

您最好將其作為動態 SQL 執行

DELIMITER //
DROP PROCEDURE IF EXISTS changeMasterTo //
CREATE PROCEDUREchangeMasterTo(IN ip char(20),IN port int,IN user 
char(30),IN password char(30))
LANGUAGE SQL
COMMENT 'changes master to'
ThisStoredProcedure:BEGIN
   SET @sql = 'STOP SLAVE';
   PREPARE s FROM @sql; EXECUTE s; DEALLOCATE PREPARE s;

   SET @sql = CONCAT('CHANGE MASTER TO MASTER_HOST=',QUOTE(ip)); 
   SET @sql = CONCAT(@sql,',MASTER_PORT=',port);
   SET @sql = CONCAT(@sql,',MASTER_USER=',QUOTE(user));
   SET @sql = CONCAT(@sql,',MASTER_PASSWORD=',QUOTE(password));
   SET @sql = CONCAT(@sql,',MASTER_AUTO_POSITION=1,MASTER_SSL=1');
   PREPARE s FROM @sql; EXECUTE s; DEALLOCATE PREPARE s;
END;
//
DELIMITER ;

引用自:https://dba.stackexchange.com/questions/184120