[配置选项] NOT FOR REPLICATION

NOT FOR REPLICATION选项用于在复制过程中使约束、触发器等对复制的输入失效,防止在事务复制中出现问题。例如,它阻止触发器在复制事件中执行,允许自增列的Identity插入,并对来自复制的输入豁免检查约束。设置方法涉及触发器、自增列、外键约束和检查约束的修改或重建。
1)NOT FOR REPLICATION的作用
一个对象上有一些性质,比如约束、触发等,这些设置对一般用户输入和复制的输入都起作用。NOT FOR REPLICATION是使这些设置对来自复制的输入失效,如下图。以下介绍针对各个不同对象设置NOT FOR REPLICATION的作用。



a. 对于 【触发器,级联删除】 来讲
在事务复制中,复制传递过来的触发动作和原始动作导致的触发动作会一起执行,导致该动作被执行两次,会出现一些问题,比如插入失败、删除失败等。设置NOT FOR REPLICATION则是指,在保持对普通用户动作激活有效的情况下,对于事务复制过来的用户动作,触发机制失效。

触发动作包括:
     触发器的内容
     外键约束的级联更新\删除动作


b. 对于 【自增列】 来讲
首先,发布者在发布数据时,是连自增列一起发布的,故会对其他表做Identity插入
那么,如果对表设置了 SET IDENTITY_INSERT OFF(不允许Identity插入),且不开启NOT FOR REPLICATION,就会限制Identity插入,无论是来着用户的插入,还是来自事务复制的插入。所以为了成功接受发布者的数据,要开启NOT FOR REPLICATION,即允许事务复制做的Identity插入。如果设置了SET IDENTITY_INSERT ON,那么是否启用NOT FOR REPLICATION就没有什么区别了。

c. 对于【检查约束】来讲
如果不开启NOR FOR REPLICATION,check约束会限制来自用户的输入和事务复制的输入。如果开启了NOT FOR REPLICATION,则只不检查来自事务复制的输入


  


2)对各对象设置NOT FOR REPLICATION的方法:

 1 对于触发器,执行下面语句
 
2 对于identity,在SSMS浏览器里选取列,右击想改的列,点击MODIFY,出现下述页面。然后在最底下可以翻到NOT FOR REPLICATION选项。注意,修改该选项,只能先删掉表,再重新创建。

也可以删掉表后执行
 

3 对于外键约束,先删除原有外键约束,再重建外键约束并启用NOT FOR REPLICATION并添到表中,如下
 
4 对于检查约束,先删除原有检查约束,再重建检查约束并启用NOT FOR REPLICATION并添到表中,如下
        
最后补记一点:默认情形下,Trigger,外键约束,检查约束都不会被复制到订阅者,这些对象需要手动创建。但是也可以在Aarticle Properties里选择和表一起复制这些对象。


    
    































启动 MySQL 组复制(Group Replication)需要确保数据库实例已经正确配置,并且满足组复制的各项前提条件。执行 `START GROUP_REPLICATION;` 是启动组复制的关键命令,但在实际操作中需要注意多个细节。 ### 启动组复制的基本命令 ```sql START GROUP_REPLICATION; ``` 该命令用于启动组复制功能[^2]。在执行此命令之前,必须确保以下条件已满足: - 所有节点的 MySQL 配置文件(如 `my.cnf` 或 `my.ini`)中已正确设置组复制相关参数,包括 `server_id`、`server_uuid`、`gtid_mode`、`enforce_gtid_consistency`、`log_bin`、`log_slave_updates`、`binlog_format` 以及组复制专用参数如 `plugin_load_add`、`group_replication_group_name`、`group_replication_start_on_boot`、`group_replication_local_address` 和 `group_replication_group_seeds` 等。 - 已经创建了用于组复制恢复的专用用户,并授予了适当的权限,例如 `REPLICATION SLAVE` 权限[^2]。 - 如果是首次启动组复制或者从节点需要重新加入组,则可能需要先执行 `RESET MASTER;` 来清除旧的二进制日志文件,但这一步在生产环境中应谨慎使用,因为它会删除所有现有的二进制日志[^2]。 - 若为引导组复制的首个节点,还需临时启用 `group_replication_bootstrap_group=ON;`,完成引导后立即关闭该选项。 ### 示例:初始化并启动组复制 ```sql -- 清除现有二进制日志(仅限测试环境或初始设置) RESET MASTER; -- 设置引导组标志(仅适用于第一个节点) SET GLOBAL group_replication_bootstrap_group = ON; -- 配置复制通道(假设已存在名为 'group_replication_recovery' 的通道) CHANGE MASTER TO MASTER_USER='repl_user', MASTER_PASSWORD='repl_password' FOR CHANNEL 'group_replication_recovery'; -- 关闭引导组标志 SET GLOBAL group_replication_bootstrap_group = OFF; -- 启动组复制 START GROUP_REPLICATION; ``` ### 常见问题排查 如果执行 `START GROUP_REPLICATION;` 时遇到错误 `ERROR 3092 (HY000): The server is not configured properly to be an active member of the group`,则需要检查 MySQL 错误日志以获取更详细的错误信息[^3]。通常这类错误与配置不完整或网络通信问题有关。 此外,还需要确保所有参与组复制的节点之间可以正常通信,并且防火墙规则允许必要的端口(通常是 33061 和 3306)通过。 最后,确认用于组复制的用户具有正确的权限。可以通过如下 SQL 查询验证用户的权限设置[^4]: ```sql SHOW GRANTS FOR 'repl_user'@'%'; ``` 确保输出中包含 `REPLICATION SLAVE` 权限。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值