在云数据库RDS for MySQL的使用过程中,有一些特定的约束与限制需要用户了解和遵守,以下将详细阐述这些约束与限制,并提供相关表格以便于参考。
RDS for MySQL的约束与限制
功能限制
功能 | 使用限制 |
数据库访问 | 如果云数据库RDS实例没开通公网访问,则该实例必须与弹性云服务器在同一个虚拟私有云内才能访问。 云数据库RDS只读实例必须创建在与主实例相同的一个子网内。 弹性云服务器必须处于目标云数据库RDS实例所属安全组允许访问的范围内。 如果云数据库RDS实例与弹性云服务器处于不同的安全组,系统默认不能访问,需要在云数据库RDS的安全组添加一条“入”的访问规则。 RDS for MySQL实例的默认端口为3306,需用户手动修改端口号后,才能访问其它端口。 |
部署 | 实例所部署的弹性云服务器,对用户都不可见,即只允许应用程序通过IP地址和端口访问数据库。 |
跨AZ高可用 | 主备实例支持跨AZ高可用,选择主可用区和备可用区不在同一个可用区(AZ)。 |
数据库的root权限 | 创建实例页面只提供管理员root用户权限,更多权限,请参见表15-14。 建议用户谨慎对root账号执行revoke、drop user、rename user操作,避免影响业务正常使用。 |
修改数据库参数设置 | 大部分数据库参数可以通过控制台进行修改。 |
数据迁入 | 具体请参考云数据库RDS用户指南中“RDS for MySQL用户指南 > 数据迁移 > 使用mysqldump迁移RDS for MySQL数据”的章节。 |
RDS for MySQL存储引擎 | 支持InnoDB存储引擎,不支持MyISAM引擎、FEDERATED引擎和Memory引擎。 |
搭建数据库复制 | RDS for MySQL本身提供主备复制架构的双节点集群,无需用户手动搭建,其中主备复制架构集群的备实例不对用户开放,用户应用不可直接访问。 |
支持的表数量 | RDS for MySQL支持表数量上限为50万,大于50万张表时,会导致备份和小版本升级失败,影响数据库可用性。 |
重启RDS实例 | 无法通过命令行重启,必须通过云数据库RDS服务的管理控制台操作重启实例。 |
查看RDS备份 | 具体请参考云数据库RDS用户指南中“RDS for MySQL用户指南 > 数据备份 > 下载全量备份文件”的章节。 |
SQL规范 | 不支持ZEROFILL属性。 |
root账户权限
权限 | 权限级别 | 描述 | 是否支持 |
Select | 表 | 查询权限 | 支持 |
Insert | 表 | 插入权限 | 支持 |
Update | 表 | 更新权限 | 支持 |
Delete | 表 | 删除权限 | 支持 |
Create | 数据库、表或索引 | 创建数据库、表或索引权限 | 支持 |
Drop | 数据库或表 | 删除数据库或表权限 | 支持 |
Reload | 服务器管理 | 执行flush-hosts、flush-logs、flush-privileges、flush-status、flush-tables、flush-threads、refresh、reload等命令的权限。 | 支持 |
Process | 服务器管理 | 查看进程权限 | 支持 |
Grant | 数据库、表或保存的程序 | 赋予控制访问权限 | 支持 |
References | 数据库或表 | 操作外键权限 | 支持 |
Index | 表 | 索引权限 | 支持 |
Alter | 表 | 更改表,比如添加字段、索引等 | 支持 |
Show_db | 服务器管理 | 查看数据库链接 | 支持 |
Create_tmp_table | 服务器管理 | 创建临时表权限 | 支持 |
Lock_tables | 服务器管理 | 锁表权限 | 支持 |
Execute | 存储过程 | 执行存储过程权限 | 支持 |
Repl_slave | 服务器管理 | 复制权限 | 支持 |
Repl_client | 服务器管理 | 复制权限 | 支持 |
Create_view | 视图 | 创建视图权限 | 支持 |
Show_view | 视图 | 查看视图权限 | 支持 |
Create_routine | 存储过程 | 创建存储过程权限 | 支持 |
Alter_routine | 存储过程 | 更改存储过程权限 | 支持 |
Create_user | 服务器管理 | 创建用户权限 | 支持 |
Event | 数据库 | 事件触发器 | 支持 |
Trigger | 数据库 | 触发器 | 支持 |
Super | 服务器管理 | 执行kill线程权限 | 不支持 |
File | 服务器上的文件访问 | 访问数据库服务器节点文件权限 | 不支持 |
Shutdown | 服务器管理 | 关闭数据库权限 | 不支持 |
Create_tablespace | 服务器管理 | 创建表空间权限 | 不支持 |
规格与性能限制
| 存储空间大小 | SSD本地盘:最大6000 GB<br/>SSD云盘:最大6000 GB<br/>ESSD云盘:最大64000 GB | 不同规格的存储空间上限不同,更多信息,请参见主实例规格列表。 |
| 临时表空间大小 | SSD本地盘:最大300 GB<br/>云盘:无限制 | SSD本地盘的最大临时表空间为300 GB,超出300 GB会导致实例频繁高可用切换、宕机等问题。 |
| 连接数 | 最大100,000 | 不同实例规格的连接数上限不同,更多信息,请参见主实例规格列表。 |
| IOPS | SSD本地盘:最大144000<br/>云盘:请参见关于云盘IOPS | 无 |
| 内存大小 | SSD本地盘:最大720 GB<br/>云盘:最大768 GB | RDS MySQL云盘实例的底层操作系统,以及RDS相关管理服务会占用一部分内存,因此实例实际可用的内存不会达到规格显示的内存大小。<br/>占用内存明细:<br/>底层操作系统:约500~700 MB。<br/>RDS相关管理服务:约500 MB。 |
| JSON字段 | 可存储的最大数据量为4 GB | 无 |
配额限制
配额类型 | 限制说明 |
只读实例数量 | 最多创建10个只读实例,只读实例的更多信息,请参见MySQL只读实例简介。 |
主实例数量 | 按量付费、Serverless主实例数量限制为200个,您可以前往配额中心申请提升配额。 |
标签键数量 | 标签键必须唯一,最大设置20个,每次最多设置50个实例进行批量标签绑定,创建标签,请参见创建标签。 |
备份空间免费额度 | 本地盘备份空间免费额度:50%×实例购买的存储空间。 云盘备份空间免费额度:200%×实例购买的存储空间。 超出免费额度的部分 = 数据备份量 + 日志备份量 免费额度,单位为GB,只入不舍,备份的更多信息,请参见备份费用。 |
实例备份保留天数 | 默认为7天,最大730天,超过730天的数据备份为归档备份,会收取较低的归档备份费用,更多信息,请参见备份费用。 |
日志保留天数 | 错误日志:30天 慢日志明细:7天 慢日志统计:7天 主备切换日志:30天 更多信息,请参见查看错误日志和慢日志。 |
命名限制
限制项 | 限制说明 |
实例名 | 长度为2~255个字符。 由大小写字母、中文、数字、下划线(_)或短横线(-)组成。 以大小写字母或中文开头。 |
账号名 | MySQL 8.0或5.7的账号长度为2~32个字符,MySQL 5.6的账号长度为2~16个字符。 由小写字母、数字或下划线(_)组成。 以小写字母开头,以小写字母或数字结尾。 不能和已有的账号名重复。 不能使用SQL关键字,更多信息,请参见SQL关键字。 |
数据库名 | 长度不超过64个字符。 由小写字母、数字、下划线(_)或短横线(-)组成。 以小写字母开头,以小写字母或数字结尾。 不能和已有的数据库名重复。 不能使用SQL关键字,更多信息,请参见SQL关键字。 |
自定义函数名 | 避免使用保留关键字。 |
SQL规范限制
SQL规范限制项 | 限制说明 |
ZEROFILL属性 | 不支持ZEROFILL属性。 |
FAQS相关问题及解答
Q1:如何修改MySQL数据库中的约束?
A1:在MySQL数据库中,修改约束主要涉及对表结构的更改,这通常通过使用ALTER TABLE语句来完成,以下是一些具体的步骤:
1、查看现有表结构:在做出任何修改之前,首先要了解现有的表结构,可以通过SQL命令DESC table_name来查看表的详细信息,包括已有的约束。
DESC your_table_name;
2、添加列约束:若要在表中新增一个列并设置约束,可以使用以下语法:
ALTER TABLE your_table_name ADD COLUMN column_name data_type [constraint];
添加一个非空的唯一约束:
ALTER TABLE your_table_name ADD COLUMN new_column_name varchar(255) NOT NULL UNIQUE;
3、删除和修改列约束:对于已存在的列,可能需要修改或删除其约束,以下是一些操作实例:
删除主键:ALTER TABLE your_table_name DROP PRIMARY KEY;
删除非空约束:ALTER TABLE your_table_name MODIFY column_name data_type NULL;
删除外键:ALTER TABLE your_table_name DROP FOREIGN KEY fk_name;
4、添加新的约束:若需要添加新的约束,可以使用ADD CONSTRAINT语句,例如添加一个外键约束:
ALTER TABLE your_table_name ADD CONSTRAINT fk_name FOREIGN KEY (column_name) REFERENCES another_table(corresponding_column);
5、保存并应用修改:每次使用ALTER TABLE语句后,修改会被立即保存到数据库中,确保在执行每一步后检查修改是否符合预期,以防不必要时的数据丢失或错误。
正确理解和使用这些语句是确保数据库完整性和数据准确性的关键,通过上述步骤,可以有效地管理和控制数据库中的约束,从而维护数据的完整性和一致性,是否可以在不删除的情况下修改列的约束?是的,MySQL允许在不删除列的情况下直接修改其约束,可以将一个列从非空约束修改为可空,或反之,通过使用ALTER TABLE语句配合MODIFY关键字来实现,这样做可以避免因删除列而丢失数据的风险,修改约束是否会影响表中的数据?可能会影响,修改约束,特别是添加如UNIQUE或FOREIGNKEY这样的约束,如果表中已存在的数据违反了新约束条件,操作将会失败,在添加此类约束前,应先审核现有数据以确保符合约束条件,或先对数据进行必要的调整。
Q2:是否可以在不删除的情况下修改列的约束?
A2:是的,MySQL允许在不删除列的情况下直接修改其约束,可以将一个列从非空约束修改为可空,或反之,通过使用ALTER TABLE语句配合MODIFY关键字来实现,这样做可以避免因删除列而丢失数据的风险。