作者:Pedro Gomes 译:徐轶韬

在本文中,我们介绍一个配置选项,该选项控制复制通道是否允许创建没有主键的表。这延续了我们最近在复制安全性方面的工作,在该工作中,我们允许用户强制执行权限检查和/或强制执行基于行的事件。

在8.0.20上,我们为CHANGE MASTER TO语句引入了一个新选项:REQUIRE_TABLE_PRIMARY_KEY_CHECK。复制通道在执行创建或更改表定义及其主键时可以选择自己的策略。

在表定义上强制主键很重要。例如,在使用基于行的日志模式下进行复制时,表的主键对从数据库的性能起着重要作用。服务器中使用变量sql_require_primary_key强制执行此策略。在复制的上下文中,该变量的值将与所有更改表结构(也称为DDL)的查询一起发送,因此从数据库将遵循主数据库上的任何限制。

如果从数据库的操作员无法控制或信任主服务器,仅仅遵循在那里定义的限制是不够的。因此,现在可以用REQUIRE_TABLE_PRIMARY_KEY_CHECK的值来影响此行为。

可以在复制通道上将此参数设置为:

  • ON:复制通道在复制操作中始终对sql_require_primary_key系统变量使用值“ON”,在所有create和alter table操作中都需要主键。

  • OFF:复制通道在复制操作中始终对sql_require_primary_key系统变量使用值“OFF” ,创建或更改表时不需要主键,即使主数据库强制执行了此类限制。

  • STREAM:默认值,复制通道为每个事务使用从主数据库复制的值。这样可以保留以前的服务器行为。

用法和优点

第一个用例出现在对数据来源的主数据库没有严格控制的场景中。在这种情况下, REQUIRE_TABLE_PRIMARY_KEY_CHECK = ON可确保表定义中没有删除任何主键,不会导致性能问题。

在多源复制方案中,此功能也非常有用。使sql_require_primary_key的值保持一致,允许来自不同主数据库的复制通道之间的行为更加统一。当多个主数据库更新同一组表,并且其中一个表存在错误时,使用ON可以防止丢失主键。使用OFF可使多个主数据库一起工作而不管它们能否操作主键。

在复制通道中使用权限检查时,此功能也具有优势,因为将REQUIRE_TABLE_PRIMARY_KEY_CHECK设置ONOFF意味着具有PRIVILEGE_CHECKS_USER权限的帐户不再需要额外的权限来操作sql_require_primary_key。如果设置为STREAM,除了需要创建或更改表的基本权限外,还要求权限检查用户具有会话管理级别的权限用以复制查询。

配置

若要显式更改复制通道在处理主键检查策略的行为,您需要停止复制SQL线程。

可观察性

相关的Performance Schema表进行了功能增强,用以显示新的CHANGE MASTER TO…语句选项REQUIRE_TABLE_PRIMARY_KEY_CHECK的状态

使用注意事项

此功能受RESET SLAVE ALL的影响,但不受RESET SLAVE的影响。

同样,虽然群组复制插件强制使用主键执行每个查询,但该检查不依赖于sql_require_primary_key并且限制较少。详情参阅“https://dev.mysql.com/doc/refman/8.0/en/group-replication-requirements.html”。

摘要

此功能是一种新工具,可在复杂多样的环境中保护您的复制流,同时您可以更好地控制复制用户的权限。

希望这项新功能可以使您利用MySQL创建更安全的解决方案。欢迎进行测试,并告诉我们您的意见。

感谢您关注“MySQL解决方案工程师”!

plsql表设置主键_对复制实施主键约束相关推荐

  1. oracle表设置主键自增长,笔记:oracle表设置主键自增长

     orcale设置主键自动增长 随笔记得笔记 以后用到 直接到这里copy create or replace table TBL_SYS_USER ( user_id NUMBER(19) no ...

  2. sql组合键设置外键_学习SQL:外键

    sql组合键设置外键 In the previous article, we talked about the primary key (PK). In this one, we'll check w ...

  3. 取消粘滞键_禁用“刺激性粘滞键/过滤器键”弹出对话框

    取消粘滞键 Have you ever been doing something, like playing a game, and had that obnoxious Sticky Keys di ...

  4. SQL常用语句|创建表,设置主键......

    新建表 create table [表名] ( [自动编号字段] int IDENTITY (1,1) PRIMARY KEY , [字段1] nVarChar(50) default \'默认值\' ...

  5. spark 设置主类_最近Kafka这么火,聊一聊Kafka:Kafka与Spark的集成

    Spark 编程模型 在Spark 中, 我们通过对分布式数据集的操作来表达计算意图 ,这些计算会自动在集群上 井行执行 这样的数据集被称为弹性分布式数据集 Resilient Distributed ...

  6. 电脑分屏设置主屏_华硕灵耀 X2 Pro 体验:两块屏幕的笔记本电脑,体验怎样?...

    半年前,双屏电脑只活在两张图里:一张是设计师的概念图,一张是厂商的专利图. 但在半年后,双屏电脑就像手机中的 5G 和曲面屏一样突然成为一个热门话题.一股设计潮流. 随着微软在月初公布 Surface ...

  7. plsql表锁被占用_处理Oracle被锁住的进程

    5月11日 发布一个EBS程序,PLSQL Developer编译提示"程序被锁".之前此程序发布过,后来对代码进行了优化,重新发布.因为Oracle为确保数据的完整性和一致性,所 ...

  8. excel换行按什么键_电脑截图按什么键

    您可以使用键盘上的[PrScrn]键截屏,获得的是整个屏幕的图片.或者是[Alt]+[PrScrn]这个组合键截屏,获得的结果是[当前窗口]的图片.还可以使用QQ.微信或者第三方专业的截图软件.以下是 ...

  9. python键_在Python中创建键命令

    我正在根据我在网上找到的一个脚本编写我自己的简单键记录器.但是,我正在尝试编写一个键命令,以便在键入此命令时记录器程序将关闭.我该怎么做?(我也知道它一点也不安全,但这与这个程序无关) 例如,Ctrl ...

最新文章

  1. 华中农大在土壤矿物-微生物相互作用研究方面取得新进展
  2. 无障碍开发(一)之初认识
  3. 遗传算法锦标赛选择java实现_java – 遗传算法锦标赛选择
  4. 【Elasticsearch】es 脑裂
  5. 22.4. IP Address
  6. rocketmq 消息指定_rocketmq-常见问题总结(消息的顺序、重复、消费模式)
  7. 基于junit4的关于个人所得税计算的等价类与边界值_测试用例的设计方法--边界值分析方法...
  8. win10计算机维护,关掉win10系统自动维护功能的方法【图文教程】
  9. 2015Mac版飞秋无法接受文件夹!!!
  10. mono:利用wxWindows开发界面程序
  11. Java网络编程总结
  12. [.Net码农]RDLC报表中使用自定义函数
  13. RPA 百年简史 机器人流程自动化知多少
  14. C++Primer笔记——拷贝控制
  15. js判断ipad pro设备
  16. 去除Opera与迅雷的关联
  17. vue SEO的解决方案
  18. Activiti 学习笔记十:开始活动节点(判断流程是否结束及查询历史)
  19. 当建立一个新的数据中心时,阿里云优惠活动位置只是战斗的一半
  20. macOS使用tesseract 进行ORC识别

热门文章

  1. bashsupport插件_如何用 bash-support 插件将 Vim 编辑器打造成编写 Bash 脚本的 IDE
  2. 电子科大沙河校区有计算机专业,电子科大沙河校区学费
  3. php+jquery实现图片上传预览_和拖动位置值,PHP教程:thinkphp jquery实现图片上传和预览效果...
  4. c++中vector使用的小问题
  5. c语言注释参与程序设计的编译,提高C语言程序设计教学的有益探索
  6. win10下VS2013+OpenCV2.4.9环境配置
  7. plt.errorbar画误差曲线
  8. MATLAB xlswrite函数出现“错误: 服务器出现意外情况”
  9. 使用python的butter带通滤波器时出现RuntimeWarning
  10. scanf( )函数的返回值