是的,您可以将存储过程修改为在不同的MySQL数据库中同步数据。以下是一个示例:

在源数据库(10.23.60.218)中创建存储过程:

CREATE DEFINER=`wmsop`@`10.23.60.218` PROCEDURE `sp_copy_arch_cubicscanner_to_wms`(
  IN old_table VARCHAR(50),
  IN new_table VARCHAR(50),
  IN sync_table VARCHAR(50),
  IN record_type VARCHAR(50)
)
BEGIN
  -- 定义变量
  SET @old_table := old_table;  -- 数量来源表
  SET @new_table := new_table;   -- 数据目的表
  SET @sync_table := sync_table;  -- 同步表
  SET @record_type := record_type;  -- 同步标识
  SET @last_sync_date_time := '1970-01-01 00:00:01';

  -- 获取最新同步时间
  SET @get_sync_time_sql := CONCAT("SELECT @last_sync_date_time:= IFNULL(MIN(lastSyncDateTime),@last_sync_date_time)  
    FROM ", @sync_table, " WHERE recordType = @record_type");
  PREPARE get_sync_time_sql FROM @get_sync_time_sql; 

  -- 批量插入新表数据
  SET @insert_new_table_sql := CONCAT("REPLACE INTO ", @new_table, " 
    SELECT * FROM ", @old_table, " WHERE lastUpdateData >= @last_sync_date_time LIMIT 1000");
  PREPARE insert_new_table_sql FROM @insert_new_table_sql; 

  -- 更新同步后数据时间
  SET @update_new_table_sql := CONCAT("SELECT @last_sync_date_time := IFNULL(MAX(lastUpdateData), @last_sync_date_time)  
    FROM ", @new_table, " WHERE lastUpdateData >= @last_sync_date_time");
  PREPARE update_new_table_sql FROM @update_new_table_sql; 

  -- 更新sync时间
  SET @update_sync_time_sql := CONCAT("REPLACE INTO ", @sync_table, " (recordType, lastSyncDateTime) VALUES (@record_type, @last_sync_date_time)");
  PREPARE update_sync_time_sql FROM @update_sync_time_sql; 

  -- 执行存储过程中的语句
  EXECUTE get_sync_time_sql;
  EXECUTE insert_new_table_sql; 
  EXECUTE update_new_table_sql; 
  EXECUTE update_sync_time_sql; 
END

然后,在目标数据库(10.20.8.141)中创建相同的存储过程,只需将存储过程中的表名修改为目标数据库中的表名:

CREATE DEFINER=`wmsop`@`10.20.8.141` PROCEDURE `sp_copy_arch_cubicscanner_to_wms`(
  IN old_table VARCHAR(50),
  IN new_table VARCHAR(50),
  IN sync_table VARCHAR(50),
  IN record_type VARCHAR(50)
)
BEGIN
  -- 定义变量
  SET @old_table := old_table;  -- 数量来源表
  SET @new_table := new_table;   -- 数据目的表
  SET @sync_table := sync_table;  -- 同步表
  SET @record_type := record_type;  -- 同步标识
  SET @last_sync_date_time := '1970-01-01 00:00:01';

  -- 获取最新同步时间
  SET @get_sync_time_sql := CONCAT("SELECT @last_sync_date_time:= IFNULL(MIN(lastSyncDateTime),@last_sync_date_time)  
    FROM ", @sync_table, " WHERE recordType = @record_type");
  PREPARE get_sync_time_sql FROM @get_sync_time_sql; 

  -- 批量插入新表数据
  SET @insert_new_table_sql := CONCAT("REPLACE INTO ", @new_table, " 
    SELECT * FROM ", @old_table, " WHERE lastUpdateData >= @last_sync_date_time LIMIT 1000");
  PREPARE insert_new_table_sql FROM @insert_new_table_sql; 

  -- 更新同步后数据时间
  SET @update_new_table_sql := CONCAT("SELECT @last_sync_date_time := IFNULL(MAX(lastUpdateData), @last_sync_date_time)  
    FROM ", @new_table, " WHERE lastUpdateData >= @last_sync_date_time");
  PREPARE update_new_table_sql FROM @update_new_table_sql; 

  -- 更新sync时间
  SET @update_sync_time_sql := CONCAT("REPLACE INTO ", @sync_table, " (recordType, lastSyncDateTime) VALUES (@record_type, @last_sync_date_time)");
  PREPARE update_sync_time_sql FROM @update_sync_time_sql; 

  -- 执行存储过程中的语句
  EXECUTE get_sync_time_sql;
  EXECUTE insert_new_table_sql; 
  EXECUTE update_new_table_sql; 
  EXECUTE update_sync_time_sql; 
END

这样,您就可以在不同的MySQL数据库中调用相同的存储过程来同步数据了。

MySQL存储过程:跨数据库同步表数据

原文地址: https://www.cveoy.top/t/topic/psNT 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录