- 最新动态
- 功能总览
-
服务公告
- 漏洞公告
-
产品公告
- 【停售公告】华为云云数据库RDS for PostgreSQL 12版本于2025年5月1日00:00(北京时间)停售通知
- 【下线公告】华为云云数据库RDS for PostgreSQL 10、11版本于2024年11月1日00:00(北京时间)下线通知
- 【停售公告】华为云云数据库RDS for MySQL 5.6版本于2024年7月1日00:00(北京时间)停售通知
- 【停售公告】华为云云数据库RDS for PostgreSQL 10、11版本于2024年7月1日00:00(北京时间)停售通知
- 【下线公告】华为云云数据库RDS for PostgreSQL 9.5、9.6版本于2024年7月1日00:00(北京时间)下线通知
- RDS for MySQL产品公告
- 【通知】2024年5月28日起RDS for MySQL内存加速特性开放公测
- 历史公告
- 产品发布说明
- 产品介绍
- 计费说明
- 快速入门
- 内核介绍
-
用户指南
- RDS for MySQL用户指南
- RDS for MariaDB用户指南
- RDS for PostgreSQL用户指南
- RDS for SQL Server用户指南
-
最佳实践
- RDS最佳实践汇总
- RDS for MySQL
- RDS for PostgreSQL
-
RDS for SQL Server
- 恢复备份文件到RDS for SQL Server实例的版本限制
- 使用导入导出功能将ECS上的SQL Server数据库迁移到RDS for SQL Server
- 修改RDS for SQL Server实例的参数
- RDS SQL Server支持DMV动态管理视图
- 使用导入导出功能将本地SQL Server数据库迁移到RDS for SQL Server
- 在rdsuser主账号下创建子账号
- RDS for SQL Server如何实现异地容灾
- 创建tempdb临时数据文件
- Microsoft SQL Server发布与订阅
- RDS for SQL Server添加c#CLR程序集的使用方法
- RDS for SQL Server添加链接服务器
- RDS for SQL Server 如何将线下SSRS报表服务部署上云
- RDS for SQL Server收缩数据库
- 使用DAS在RDS for SQL Server主备实例上分别创建和配置Agent Job和Dblink
- 创建实例定期维护job
- 使用扩展事件
- 性能白皮书
-
API参考
- 使用前必读
- API概览
- 如何调用API
- API v3.1(推荐)
-
API v3(推荐)
- 查询API版本
- 查询数据库引擎的版本
- 查询数据库规格
- 查询数据库磁盘类型
- 获取磁盘空间使用量
-
实例管理
- 创建数据库实例
- 创建数据库实例(v5接口)
- 按需转包周期
- 停止实例
- 批量停止实例
- 开启实例
- 修改实例名称
- 修改实例备注
- 申请内网域名
- 修改内网域名
- 查询实例域名
- 查询实例IPv6域名
- 获取实例的复制状态
- 查询数据库可变更规格接口
- 变更数据库实例的规格
- 扩容数据库实例的磁盘空间
- 设置自动扩容策略
- 查询自动扩容策略
- 单机转主备实例
- 重启数据库实例
- 删除数据库实例
- 查询数据库实例列表
- 绑定和解绑弹性公网IP
- 切换主备实例的倒换策略
- 手动倒换主备
- 更改主备实例的数据同步方式
- 设置实例读写状态
- 迁移主备实例的备机
- 设置可维护时间段
- 升级内核小版本
- 设置实例内核小版本自动升级策略(PostgreSQL)
- 查询实例内核小版本自动升级策略(PostgreSQL)
- 设置秒级监控策略
- 查询秒级监控策略
- 开启实例TDE(SQL Server)
- 查询实例TDE状态(SQL Server)
- 解除节点只读状态
- 灾备实例
- 数据库安全性
- 备份与恢复
- 大版本升级
- 获取日志信息
- 实例诊断
- SQL限流(PostgreSQL)
- 数据库代理(MySQL)
- 管理数据库和用户(MySQL)
- 管理数据库和用户(PostgreSQL)
- 管理数据库和用户(SQL Server)
- 参数管理
- 插件管理(PostgreSQL)
- 配置只读延迟库(PostgreSQL)
- 回收站
- 标签管理
- 配额管理
- 获取任务信息
- 历史API
- 权限和授权项
- 附录
- SDK参考
- 场景代码示例
-
常见问题
-
产品咨询
- 使用RDS要注意些什么
- RDS实例是否会受其他用户实例的影响
- 不同RDS实例的CPU和内存是否共享
- 创建RDS实例需要多长时间
- 为何使用了RDS后网站登录较慢
- 为什么新购买实例比规格变更实例价格便宜
- 主备同步存在多长时间的延迟
- 多台弹性云服务器是否可以使用同一个RDS数据库
- RDS购买磁盘加密后,备份文件会加密吗
- 什么是RDS实例可用性
- 云数据库RDS支持跨AZ高可用吗
- RDS是否支持主备实例变更为单机实例
- RDS for MySQL与TaurusDB的区别
- 为什么无法找到云数据库RDS实例
- 云数据库RDS是否支持CloudPond
- RDS for MySQL实例支持哪些加密函数
- RDS for MySQL是否兼容MariaDB
- RDS for MySQL是否支持TokuDB
- RDS for MySQL开启GTID后有哪些限制
- RDS for MySQL是否有单表尺寸限制
- 登录RDS实例时能使用加密密码认证吗
- RDS实例内网IP和私有IP的区别
- 找不到我的RDS资源怎么办
- 资源冻结/释放/停止/删除/退订
- 资源及磁盘管理
-
数据库连接
- RDS实例连接失败怎么办
- RDS数据库连接数满的排查思路
- RDS数据库实例支持的最大数据连接数是多少
- 内网方式下ECS无法连接RDS实例的原因
- 客户端问题导致连接RDS实例失败
- 服务端问题导致连接RDS实例失败
- 应用程序是否需要支持自动重连RDS数据库
- RDS绑定公网IP后无法ping通的解决方案
- RDS跨地域内网能访问吗
- 为什么RDS实例重置密码后新密码没有生效
- 可以访问RDS备实例吗
- 如何查看RDS for MySQL数据库的连接情况
- 连接RDS for SQL Server数据库时,连接超时是否会自动退出
- RDS for SQL Server连接不上的判断方法
- 外部服务器能否访问RDS数据库
- ECS内网访问RDS,是否受带宽限制
- Navicat如何配置SSL CA证书
- 如何安装SQL Server Management Studio
- 数据库迁移
-
数据库权限
- RDS的root账号为什么没有super权限
- RDS ManageAccess权限和DAS权限有什么区别
- 本地客户端连接RDS实例后如何查看已授权的数据库
- 使用DAS登录RDS数据库是否有人数限制,密码多次输入错误有无锁死机制
- RDS for MySQL是否支持多账号
- 普通用户在postgres数据库下创建对象失败
- 删除RDS for PostgreSQL数据库中的角色失败
- RDS for PostgreSQL数据迁移过程中由于权限问题导致迁移报错
- 如何给RDS for PostgreSQL数据库中的用户赋予REPLICATION权限
- 更改云数据库 RDS for PostgreSQL数据库中表的OWNER报错
- RDS for SQL Server 2017 企业版主备实例的登录名权限如何同步到只读实例
- RDS for SQL Server中主实例的账号删除重建后,权限是否会自动同步
- 数据库存储
- 数据库基本使用
- 备份与恢复
- 只读实例和读写分离
- 数据库监控
- 扩容及规格变更
-
数据库参数修改
- RDS是否支持使用SQL命令修改全局参数
- 如何修改RDS实例的时区
- 如何设置RDS for MySQL 8.0字符集的编码格式
- 如何设置RDS for MySQL的表名是否区分大小写
- 如何设置RDS for MySQL实例开启查询缓存
- 如何设置RDS for MySQL实例的密码过期策略
- 如何修改RDS for MySQL实例的事务隔离等级
- 如何确保RDS for MySQL数据库字符集正确
- 如何使用utf8mb4字符集存储emoji表情到RDS for MySQL实例
- RDS for PostgreSQL的哪些参数设置不合理会导致数据库不可用
- 如何设置RDS for PostgreSQL实例的临时文件磁盘占用上限
- 如何设置RDS for PostgreSQL实例支持test_decoding插件
- 如何在RDS for SQL Server数据库添加ndf文件的路径
- 如何修改RDS for SQL Server字符集的排序规则
- 日志管理
- 网络安全
- 版本升级
- RDS API&SDK等开发者相关
-
产品咨询
-
故障排除
-
RDS for MySQL
- 备份恢复
- 主备复制
- 参数类
-
性能资源类
- CPU使用率高问题排查与优化
- 内存使用超限风险与优化
- 磁盘性能带宽超上限
- 联合索引设置不当导致慢SQL
- 数据库磁盘满导致被设置read_only
- Binlog未清理导致磁盘占用高
- 业务死锁导致响应变慢
- MySQL只读实例磁盘占用远超主实例
- RDS for MySQL CPU升高定位思路
- 冷热数据问题导致sql执行速度慢
- CPU/内存配置与TPS和QPS性能相关的问题
- 表碎片率过高可能导致的问题
- 复杂查询造成磁盘满
- 怎么解决查询运行缓慢的问题
- 长事务导致规格变更或小版本升级失败
- RDS for MySQL数据库报错Native error 1461的解决方案
- RDS for MySQL增加表字段后出现运行卡顿现象
- 长事务导致UNDO增多引起磁盘空间满
- RDS for MySQL如何定位一直存在的长事务告警
- RDS for MySQL部分SQL的commit时间偶现从几毫秒陡增到几百毫秒
- 本地SSD盘规格降配选不到资源
- ibdata1为什么会变大
-
SQL类
- RDS for MySQL执行SQL报错无法识别双引号
- 更新emoji表情数据报错Error 1366
- 索引长度限制导致修改varchar长度失败
- 建表时timestamp字段默认值无效
- 自增属性AUTO_INCREMENT为什么未在表结构中显示
- 存储过程和相关表字符集不一致导致执行缓慢
- RDS MySQL报错ERROR [1412]的解决方法
- 创建二级索引报错Too many keys specified
- 存在外键的表删除问题
- distinct与group by优化
- 字符集和字符序的默认选择方式
- MySQL创建用户提示服务器错误
- delete大表数据后,再次查询同一张表时出现慢SQL
- 设置事件定时器后未生效
- 为什么有时候用浮点数做等值比较查不到数据
- 开通数据库代理后有大量select请求分发到主节点
- 执行RENAME USER失败的解决方法
- 有外键的表无法删除报错ERROR[1451]的解决方案
- 表字段类型转换失败的解决方法
- RDS for MySQL创建表失败报错Row size too large的解决方案
- RDS for MySQL数据库报错ERROR [1412]的解决方案
- 外键使用不规范导致实例重启失败或执行表操作报错ERROR 1146: Table 'xxx' doesn't exist
- RDS for MySQL在分页查询时报错:Out of sort memory, consider increasing server sort buffer size
- RDS for MySQL创建用户报错:Operation CREATE USER failed
- RDS for MySQL使用grant授权all privileges报语法错误
- RDS for MySQL 5.6版本实例创建表报错
- 无主键表添加自增主键后导致主备节点查询数据不一致
- RDS for MySQL插入数据提示Data too long for column
-
连接类
- 连接数据库报错Access denied
- mariadb-connector SSL方式连接数据库失败
- RDS for MySQL建立连接慢导致客户端超时报connection established slowly
- root账号的ssl_type修改为ANY后无法登录
- 通过DAS登录实例报错Client does not support authentication protocol requested by server
- 通过DAS授权或取消授权时报错Your password does not satisfy the current policy requirements
- 客户端TLS版本与RDS for MySQL不一致导致SSL连接失败
- 使用root账号连接数据库失败
- RDS for MySQL客户端连接实例后会自动断开
- RDS for MySQL实例无法访问
- RDS for MySQL数据库修改authentication_string字段为显示密码后无法登录
- RDS for MySQL升级版本后,导致现有配置无法正常连接到MySQL-server
- 客户端超时参数设置不当导致连接超时退出
- RDS for MySQL在启用了SSL验证连接功能后,导致代码(php/java/python)等连接数据库失败
- istio-citadel证书机制导致每隔45天出现断连
- 数据库版本升级后Navicat客户端登录实例报错1251
-
其他使用问题
- 慢日志显示SQL语句扫描行数为0
- SQL诊断结果中记录的行数远小于慢日志中的扫描行数
- RDS for MySQL慢日志里面有毫秒级别的SQL
- 查看RDS存储空间使用量
- 错误日志报错The table is full
- 审计日志上传策略说明
- 自增字段取值
- 表的自增AUTO_INCREMENT初值与步长
- 表的自增AUTO_INCREMENT超过数据中该字段的最大值加1
- 自增字段值跳变的原因
- 修改表的自增AUTO_INCREMENT值
- 自增主键达到上限,无法插入数据
- 空用户的危害
- pt-osc工具连接RDS for MySQL主备实例卡住
- 购买RDS实例支付报错:Policy doesn't allow bss:order:update to be performed
- RDS for MySQL是否可以修改数据库名称
- 购买RDS实例报错:无IAM的agency相关权限
- RDS for PostgreSQL
- RDS for SQL Server
-
RDS for MySQL
- 视频帮助
- 文档下载
- 通用参考
链接复制成功!
数据库使用规范
数据库命名规范
- 所有的数据库对象名称(包括库名、表名、列名等)建议以小写字母命名,每个单词之间用下划线分隔。
- 所有的数据库对象名称禁止使用RDS for MySQL保留关键字。
- MySQL官方保留字与关键字(MySQL 8.0):https://dev.mysql.com/doc/refman/8.0/en/keywords.html
- MySQL官方保留字与关键字(MySQL 5.7):https://dev.mysql.com/doc/refman/5.7/en/keywords.html
- RDS for MySQL的保留关键字在兼容社区MySQL8.0的基础上,新增了部分保留关键字,需要在业务使用中避免使用保留关键字来命名。
表1 RDS for MySQL新增的保留关键字 保留字
相关场景
RECYCLE_BIN
回收站
- 数据库对象的命名要能做到见名知意,并且不超过32个字符。
- 数据库中用到的临时表以“tmp”为前缀并以日期为后缀。
- 数据库中用到的备份表以“bak”为前缀并以日期为后缀。
- 在不同的库或表中,要保证所有存储相同数据的列名和列类型必须一致。
数据库基本设计规范
- 所有表如果没有特殊需求,都要使用InnoDB存储引擎。InnoDB存储引擎支持事务、行级锁、具有更好的恢复性、高并发下性能更强。
- 数据库和表的字符集统一使用UTF8字符集,避免由于字符集的转换产生乱码。
- 所有的表和字段都需要添加注释。使用comment从句添加表和列的备注,从设计初期维护好数据字典。
- 表单行长度不得超过1024字节。
- 谨慎使用RDS for MySQL分区表,避免跨分区查询,否则查询效率会降低。分区表在逻辑上表现为一个表,但是在物理层面上将数据存储在多个文件。
- 表中的列不要太多,尽量做到冷热数据分离,减小表的宽度,以便在一页内存中容纳更多的行,进而减少磁盘IO,更有效的利用缓存。
- 经常一起使用的列尽量放到一个表中,避免过多的关联操作。
- 禁止在表中建立预留字段,否则修改列的类型会导致锁表,修改一个字段类型的成本要高于增加一个字段。
- 禁止在数据库中存储图片、文件等大的二进制数据。
- 不建议使用全文索引,社区MySQL全文索引局限性较多。
- 表数量不建议超过2万张。
- 客户端连接保持时长不建议超过8小时。
- 为避免高并发场景下数据库实例OOM,建议tmp_table_size、innodb_buffer_pool_size、max_connections、sort_buffer_size、read_buffer_size、read_rnd_buffer_size、join_buffer_size、thread_stack、binlog_cache_size等参数配置不要超过默认值。
数据库字段设计规范
- 控制单表字段数量,字段上限50左右。
- 优先为表中的每一列选择符合存储需要的最小的数据类型。优先考虑数字类型,其次为日期或二进制类型,最后是字符类型。列的字段类型越大,建立索引占据的空间就越大,导致一个页中的索引越少,造成IO次数增加,从而影响性能。
- 整数型选择能符合需求的最短列类型,如果为非负数,声明需是无符号(UNSIGNED)类型。
- 每个字段尽可能具有NOT NULL属性,int等数字类型默认值推荐给0,varchar等字符类型默认值给空字符串。
- 避免使用ENUM类型,可以用TINYINT类型替换。
修改ENUM值需要使用ALTER语句,ENUM类型的ORDER BY操作效率低,需要额外操作。
如果定义了禁止ENUM的枚举值是数值,可使用其他数据类型(如char类型)。
- 实数类型使用DECIMAL,禁止使用FLOAT和DOUBLE类型。
- 使用datetime、timestamp类型来存储时间,禁止使用字符串替代。
- 使用数字类型INT UNSIGNED存储IP地址,用INET_ATON、INET_NTOA可以在IP地址和数字类型之间转换。
- VARCHAR类型的长度应该尽可能短。VARCHAR类型虽然在硬盘上是动态长度的,但是在内存中占用的空间是固定的最大长度。
- 使用VARBINARY存储大小写敏感的变长字符串,VARBINARY默认区分⼤小写,没有字符集概念,速度快。
数据库索引设计规范
- 每个InnoDB表强烈建议有一个主键,且不使用更新频繁的列作为主键,不使用多列主键。不使用UUID、MD5、字符串列作为主键。建议选择值的顺序是连续增长的列作为主键,所以建议选择使用自增ID列作为主键。
- 限制每张表上的索引数量,建议单张表索引不超过5个。索引并不是越多越好,索引可以提高查询的效率,但会降低写数据的效率。有时不恰当的索引还会降低查询的效率。
- 禁止给表中的每一列都建立单独的索引。设计良好的联合索引比每一列上的单独索引效率要高出很多。
- 建议在下面的列上建立索引:
- 在SELECT,UPDATE,DELETE语句的WHERE从句上的列。
- 在ORDER BY,GROUP BY,DISTINCT上的列。
- 多表JOIN的关联列。
- 索引列顺序:
- 区分度最高的放在联合索引的最左侧。区分度=列中不同值的数量/列的总行数。
- 尽量把字段长度小的列放在联合索引的最左侧。因为字段长度越小,一页能存储的数据量越大,IO性能也就越好。
- 使用最频繁的列放到联合索引的左侧。这样可以比较少的建立一些索引。
- 避免冗余的索引,如:primary key(id),index(id),unique index(id)
- 避免重复的索引,如:index(a,b,c),index(a,b),index(a),重复的和冗余的索引会降低查询效率,因为RDS for MySQL查询优化器无法选择使用目标索引。
- 在VARCHAR字段上建立索引时,需指定索引长度,没必要对全字段建立索引,根据实际文本区分度决定索引长度即可。
一般对字符串类型数据,长度为20的索引,区分度会高达90%以上,可以使用 count(distinct left(列名, 索引长度))/count(*) 的区分度来确定。
- 对于频繁查询优先考虑使用覆盖索引。
覆盖索引指包含了所有查询字段的索引,不仅仅是WHERE从句GROUP BY从句中的列,也包含SELECT查询的列组合,避免InnoDB表进行索引的二次查询。
- 外键约束:
数据库SQL开发规范
- 在程序中,建议使用预编译语句进行数据库操作。预编译只编译一次,以后在该程序中就可以调用多次,比SQL效率高。
- 避免数据类型的隐式转换,隐式转换会导致索引失效。
- 避免使用双%号或前置%号的查询条件,这样无法利用到索引。
- 禁止在查询中使用select *语句。原因如下:
- 使用select *会消耗更多的CPU和IP以及网络带宽资源。
- 使用select *无法使用覆盖索引。
- 不使用select *可以减少表结构变更对代码带来的影响。
- 避免使用子查询,子查询会产生临时表,临时表没有任何索引,数据量大时严重影响效率。建议把子查询转化成关联查询。
- 避免使用JOIN关联太多的表,建议不要超过5个表的JOIN操作。需要JOIN的字段,数据类型必须一致。
每JOIN一个表会多占用一部分内存(由“join_buffer_size”控制),会产生临时表操作,影响查询效率。避免使用自然连接(natural join)。
- 尽量减少同数据库的交互次数,数据库更适合处理批量操作。
- 使用IN代替OR,IN操作可以有效地利用索引,IN的值不要超过500个。
- 不使用反向查询,如:NOT IN、NOT LIKE
- 禁止使用ORDER BY RAND()进行随机排序。
该操作会把表中所有符合条件的数据装载到内存中进行排序,消耗大量的CPU和IO及内存资源。
推荐在程序中获取一个随机值,然后根据随机值从数据库获取数据。
- 在不需要去重的情况下,要使用UNION ALL代替UNION。
- 合并多个相同操作到一起,可以提高处理效率,数据库更适合处理批量操作。
- 超过100万行的批量写操作,要分批多次进行操作。
- 如果有ORDER BY的场景,请注意利用索引的有序性。
- ORDER BY最后的字段是组合索引的一部分,并且放在索引组合顺序的最后。
- 避免出现file_sort的情况,影响查询性能。
正例:where a=? and b=? order by c;,索引:a_b_c
反例:索引中有范围查找,那么索引有序性无法利用,如:WHERE a>10 ORDER BY b;,索引a_b无法排序。
- 尽量使用ANSI SQL标准语法进行DML操作,而不是用MySQL扩展的SQL语法。常见的MySQL扩展SQL语法有:
- REPLACE INTO
- INSERT ... ON DUPLICATE KEY UPDATE
- 不建议使用存储过程,存储过程难以调试和扩展,更没有移植性。
- 不建议使用触发器,事件调度器(event scheduler)和视图实现业务逻辑,这些业务逻辑应该在业务层处理,避免对数据库产生逻辑依赖。
- 不建议使用大事务,业务允许的情况下,事务里包含SQL语句越少越好,尽量不超过5个。因为过长的事务会导致锁数据较久,以及MySQL内部缓存、连接消耗过多等问题。
- TRUNCATE TABLE比DELETE速度快,且使用的系统和日志资源少,如果删除的表上没有TRIGGER,且进行全表删除,建议使用TRUNCATE TABLE。
- 建议不要频繁执行flush logs,可能会导致Binlog自动清理失败。
- 不建议事务持续时间超过180秒,大于30秒的事务并发数不建议超过十个。
- 不建议单个事务修改行数超过100万行。
- 不建议执行系统自动生成的较大文本的SQL语句。例如9 MB的SELECT语句文本,数据库执行阶段内存增长约37 MB,内存增长约为SQL的4倍。
数据库不建议修改的会话级参数
- foreign_key_checks
参数解释:bool类型,默认全局值为ON。在创建外键的时候,如果设置为ON,则会检查外键的规范性,例如外键不能reference同一张表中的键等。
不建议修改的原因:
- foreign_key_checks值为ON时,无法通过该参数检查的外键,本身就是不规范的使用方法,建议优化SQL,规范数据库使用。
- 如果该参数线程级设置为了OFF,一些不规范的外键在主机被创建出来,但由于备机仍为ON,这些外键创建的DDL语句会在备机复制时执行不通过,导致复制异常。详见外键使用不规范导致实例重启失败或执行表操作报错ERROR 1146: Table 'xxx' doesn't exist。
- 单机实例也建议遵循foreign_key_checks为ON的外键规范性检查。
- innodb_strict_mode
参数解释:bool类型,默认全局值为ON。如果设置为ON,那么一些不规范的InnoDB表操作,会直接报错而非warning,例如:InnoDB页面为16KB时,单行的大小超过了8KB。
不建议修改的原因:
- 最常见的一个异常场景是,如果主机线程级设置成了OFF,使用Alter Table DDL加列时,如果字段数较多,单行长度超过了8KB,在主机能执行成功,但因为备机该参数仍为ON,导致备机该Alter DDL执行直接报错,出现复制异常。
- 如果有业务需求,建议Global级别主备一起修改。
- default_storage_engine
参数解释:枚举值类型,只能填可用的存储引擎名,默认全局值为InnoDB。在CREATE/ALTER TABLE DDL语句未显式指定存储引擎时,选择的默认存储引擎。
不建议修改的原因:
- 由于RDS for MySQL产品主备复制使用的是开源社区基于Binlog的复制模式,建表语句中,如果没有显式指定存储引擎的CREATE/ALTER TABLE DDL语句,不会把默认的存储引擎记录到Binlog(与社区行为一致)。而在备机复制,执行该DDL时,会使用备机复制线程的default_storage_engine(为全局的InnoDB)。
- 如果主机session级别修改该参数为非InnoDB的存储引擎,执行CREATE/ALTER DDL语句就会出现主机创的表定义为非InnoDB引擎,而备机的表定义为InnoDB的不一致情况。
- unique_checks
参数解释:bool类型,默认全局值为ON。如果设置为ON,对InnoDB表中二级索引唯一键进行唯一性检查。
不建议修改的原因:
如果主机session级设为OFF,则不会进行二级索引的唯一键的唯一性检查,二级索引唯一键重复的DML语句会执行成功。但是在备机,同样的DML会因为唯一性检查执行失败,导致复制异常。
- sql_log_bin
参数解释:默认ON,控制当前会话的SQL是否计入Binlog。
不建议修改的原因:
RDS for MySQL产品主备复制使用的是开源社区基于Binlog的复制模式。如果主机单个会话的参数值设为OFF,则对表的修改不会计入Binlog,该修改无法同步到备机,导致主备数据不一致。
- old_alter_table
参数解释:bool值,默认OFF。当值为ON时,在ALTER TABLE语句中使用基于COPY临时表实现的算法,会影响数据库性能,一般情况下不建议开启。
不建议修改的原因:
- 涉及ALTER IGNORE选项在备机可能会回放失败。
- 基于COPY实现的ALTER TABLE性能较差。