华为云用户手册

  • 步骤2:测试连通性并安装MySQL客户端 登录E CS 实例,请参见《弹性云服务器用户指南》中“SSH密码方式登录”。 在RDS“实例管理”页面,单击实例名称进入“概览”页面。 选择“连接管理”,在“连接信息”模块获取实例的公网地址和数据库端口。 图4 连接信息 如果没有绑定公网地址,请参见绑定弹性公网IP。 在ECS上测试是否可以正常连接到RDS for MySQ L实例 公网地址的端口。 执行yum install telnet命令提前安装telnet工具。 telnet 公网地址 3306 如果可以通信,说明网络正常。 如果无法通信,请检查安全组规则。 查看ECS的安全组的出方向规则,如果目的地址不为“0.0.0.0/0”且协议端口不为“全部”,需要将RDS实例的公网IP地址和端口添加到出方向规则。 图5 ECS的安全组 查看RDS的安全组的入方向规则,需要将ECS实例的私有IP地址和端口添加到入方向规则,具体操作请参考设置安全组规则。 将MySQL客户端安装包导入ECS。 方法一: 在ECS上下载Linux系统的MySQL客户端安装包,该方式需要为ECS绑定EIP。 8.0版本: wget https://dev.mysql.com/get/mysql-community-client-8.0.28-1.el6.x86_64.rpm 5.7版本: wget https://dev.mysql.com/get/mysql-community-client-5.7.38-1.el6.x86_64.rpm 建议您下载的MySQL客户端版本高于已创建的RDS实例中数据库版本。 方法二: 在浏览器下载Linux系统的MySQL客户端安装包,然后将安装包上传到ECS。 您可以使用任何终端连接工具(如WinSCP、PuTTY等工具)将安装包上传至ECS。 8.0版本: 打开链接,以mysql-community-client-8.0.28-1.el6.x86_64.rpm为例,下载安装包。 图6 下载MySQL 8.0安装包 5.7版本: 打开链接,以mysql-community-client-5.7.38-1.el6.x86_64.rpm为例,下载安装包。 图7 下载MySQL 5.7安装包 建议您下载的MySQL客户端版本高于已创建的RDS实例中数据库版本。 执行以下命令安装MySQL客户端。 8.0版本: rpm -ivh --nodeps mysql-community-client-8.0.28-1.el6.x86_64.rpm 5.7版本: rpm -ivh --nodeps mysql-community-client-5.7.38-1.el6.x86_64.rpm 如果安装过程中报conflicts,可增加replacefiles参数重新安装,如下: rpm -ivh --replacefiles mysql-community-client-安装包版本号-1.el6.x86_64.rpm 如果安装过程中提示需要安装依赖包,可增加nodeps参数重新安装,如下: rpm -ivh --nodeps mysql-community-client-安装包版本号-1.el6.x86_64.rpm
  • 步骤1:购买ECS 登录管理控制台,查看是否有弹性云服务器。 有Linux弹性云服务器,执行3。 有Windows弹性云服务器,参考通过内网连接RDS for MySQL实例(Windows方式)。 无弹性云服务器,执行2。 图1 ECS实例 购买弹性云服务器时,选择Linux操作系统,例如CentOS。 由于需要在ECS下载MySQL客户端,因此需要为ECS绑定弹性公网IP(EIP),并且选择与RDS for MySQL实例相同的区域、VPC和安全组,便于RDS for MySQL和ECS网络互通。 购买Linux弹性云服务器请参考《弹性云服务器用户指南》中“购买弹性云服务器”章节。 在ECS实例基本信息页,查看ECS实例的区域和VPC。 图2 ECS基本信息 在RDS for MySQL实例概览页,查看RDS实例的区域和VPC。 图3 MySQL概览 确认ECS实例与RDS for MySQL实例是否处于同一区域、同一VPC内。 是,执行步骤2:测试连通性并安装MySQL客户端。 如果不在同一区域,请重新购买实例。不同区域的云服务之间内网互不相通,无法访问实例。请就近选择靠近您业务的区域,可减少网络时延,提高访问速度。 如果不在同一VPC,可以修改ECS的VPC,请参见切换虚拟私有云。
  • 步骤2:测试连通性并安装MySQL客户端 登录ECS实例,请参见《弹性云服务器用户指南》中“SSH密码方式登录”。 在RDS“实例管理”页面,单击实例名称进入“概览”页面。 选择“连接管理”,在“连接信息”模块获取实例的内网地址(或者内网 域名 )和数据库端口。 图4 连接信息 在ECS上测试是否可以正常连接到RDS for MySQL实例内网地址的端口。 执行yum install telnet命令提前安装telnet工具。 telnet 192.168.6.144 3306 如果可以通信,说明网络正常。 如果无法通信,请检查安全组规则。 查看ECS的安全组的出方向规则,如果目的地址不为“0.0.0.0/0”且协议端口不为“全部”,需要将RDS实例的内网IP地址和端口添加到出方向规则。 图5 ECS的安全组 查看RDS的安全组的入方向规则,需要将ECS实例的私有IP地址和端口添加到入方向规则,具体操作请参考设置安全组规则。 将MySQL客户端安装包导入ECS。 方法一: 在ECS上下载Linux系统的MySQL客户端安装包,该方式需要为ECS绑定EIP。 8.0版本: wget https://dev.mysql.com/get/mysql-community-client-8.0.28-1.el6.x86_64.rpm 5.7版本: wget https://dev.mysql.com/get/mysql-community-client-5.7.38-1.el6.x86_64.rpm 建议您下载的MySQL客户端版本高于已创建的RDS实例中数据库版本。 方法二: 在浏览器下载Linux系统的MySQL客户端安装包,然后将安装包上传到ECS。 您可以使用任何终端连接工具(如WinSCP、PuTTY等工具)将安装包上传至ECS。 8.0版本: 打开链接,以mysql-community-client-8.0.28-1.el6.x86_64.rpm为例,下载安装包。 图6 下载MySQL 8.0安装包 5.7版本: 打开链接,以mysql-community-client-5.7.38-1.el6.x86_64.rpm为例,下载安装包。 图7 下载MySQL 5.7安装包 建议您下载的MySQL客户端版本高于已创建的RDS实例中数据库版本。 执行以下命令安装MySQL客户端。 8.0版本: rpm -ivh --nodeps mysql-community-client-8.0.28-1.el6.x86_64.rpm 5.7版本: rpm -ivh --nodeps mysql-community-client-5.7.38-1.el6.x86_64.rpm 如果安装过程中报conflicts,可增加replacefiles参数重新安装,如下: rpm -ivh --replacefiles mysql-community-client-安装包版本号-1.el6.x86_64.rpm 如果安装过程中提示需要安装依赖包,可增加nodeps参数重新安装,如下: rpm -ivh --nodeps mysql-community-client-安装包版本号-1.el6.x86_64.rpm
  • 操作步骤 获取安装包。 在下载页面找到对应版本链接,以MySQL-client-5.6.31-1.el6.x86_64.rpm为例,即可下载安装包。 图1 下载 将安装包上传到弹性云服务器。 创建弹性云服务器时,要选择操作系统,例如Redhat6.6,并为其绑定EIP(Elastic IP,弹性公网IP)。 使用远程连接工具通过绑定的EIP连接到弹性云服务器,即可将安装包上传到弹性云服务器。 执行以下命令安装MySQL客户端。 sudo rpm -ivh MySQL-client-5.6.31-1.el6.x86_64.rpm 如果安装过程中报conflicts,可增加replacefiles参数重新安装,如下: rpm -ivh --replacefiles MySQL-client-5.6.31-1.el6.x86_64.rpm 如果安装过程中提示需要安装依赖包,可增加nodeps参数重新安装,如下: rpm -ivh --nodeps MySQL-client-5.6.31-1.el6.x86_64.rpm
  • 连接方式总览 表2 连接方式总览 连接方式 说明 通过DAS连接RDS for MySQL实例(推荐) 通过数据管理服务(Data Admin Service,简称DAS)这款可视化的专业数据库管理工具,可获得执行SQL、高级数据库管理、智能化运维等功能,做到易用、安全、智能地管理数据库。云数据库RDS库服务默认开通DAS连接权限。 通过mysql命令行客户端连接实例 在Linux操作系统中,您需要在弹性云服务器上安装MySQL客户端,通过mysql命令行连接实例。支持公网和内网两种连接方式: 系统默认提供内网IP地址。 当应用部署在弹性云服务器上,且该弹性云服务器与RDS for MySQL实例处于同一区域,同一VPC时,建议单独使用内网IP连接弹性云服务器与RDS for MySQL实例。 不能通过内网IP地址访问RDS实例时,使用公网访问,建议单独绑定弹性公网IP连接弹性云服务器(或公网主机)与RDS for MySQL实例。 通过图形化界面连接RDS for MySQL实例 在Windows操作系统中,您可以使用任何通用的数据库客户端连接到RDS for MySQL实例。 通过JDBC连接RDS for MySQL实例 通过JDBC连接实例的方式有无需下载SSL证书连接和用户下载SSL证书连接两种,其中使用SSL证书连接通过了加密功能,具有更高的安全性。RDS for MySQL新实例默认关闭SSL 数据加密 ,开启SSL请参考设置SSL数据加密。SSL连接实现了数据加密功能,但同时也会增加网络连接响应时间和CPU消耗,不建议开启SSL数据加密。
  • 命令行内网和公网连接实例 使用命令行连接RDS for MySQL实例,支持内网和公网两种连接方式,如表1所示。 表1 内网和公网连接方式 连接方式 IP地址 安全组规则 说明 内网连接 内网IP地址 ECS与RDS实例在相同安全组,默认ECS与RDS实例内网互通,无需设置安全组规则。 ECS与RDS实例在不同安全组时,需要为RDS和ECS分别设置安全组规则。 设置RDS安全组规则:为RDS所在安全组配置相应的入方向规则,详见设置安全组规则。 设置ECS安全组规则:安全组默认规则为出方向上数据报文全部放行,此时,无需对ECS配置安全组规则。当在ECS所在安全组为非默认安全组且出方向规则非全放通时,需要为ECS所在安全组配置相应的出方向规则。 安全性高,可实现RDS的较好性能。 推荐使用内网连接。 公网连接 需要购买弹性公网IP,价格详见弹性公网IP计费说明。 从安全组外访问安全组内的数据库实例时,需要为数据库实例所在安全组配置相应的入方向规则,详见设置安全组规则。 安全性低。 为了获得更快的传输速率和更高的安全性,建议您将应用迁移到与您的RDS实例在同一VPC内,使用内网连接。 图1 内网和公网连接实例
  • 查看实时监控 在“监控大盘”页面上方的下拉框,选择“MySQL”,查看当前账号下,创建完成的MySQL实例的实时性能指标。 图1 监控列表 在监控指标列单击,可以对指标数据按大小进行排序。 表1 监控列表说明 列表名称 说明 实例名称/ID 仅展示创建完成的MySQL实例的监控数据。 单击实例名称,可以跳转到实例概览页面。 实例类型 包含以下类型: 单机 主备 只读 引擎版本 支持展示RDS for MySQL全部版本。 运行状态 包含以下状态: 正常:展示实时监控数据。 说明: 对于新创建的实例,需要等待一段时间(约10分钟),才能查看上报的监控数据和监控视图。 异常:没有监控数据,默认0。恢复正常状态后可以查看监控数据。 已停止:没有监控数据,默认0。开启实例后可以查看监控数据。 监控指标 包含以下监控指标,指标说明以及指标异常的处理建议,详见表2。 CPU使用率 (%) 内存使用率 (%) 磁盘使用率 (%) TPS (次/秒) QPS (次/秒) IOPS (次/秒) 活跃连接数 (个) 慢SQL (个) 表2 监控项说明 监控项 说明 监控项异常的处理建议 案例 CPU使用率 (%) 该指标用于统计测量对象的CPU使用率。 评估业务SQL的执行计划,添加索引避免全表扫描。 扩容CPU规格,满足计算型业务需求。 RDS for MySQL CPU使用率高的问题处理 内存使用率 (%) 该指标用于统计测量对象的内存使用率。 扩容实例规格,满足业务需求。 优化SQL,减少临时表等的使用。 会话定期重连,及时释放session级别内存。 内存使用超限风险与优化 RDS for MySQL数据库内存使用率过高怎么处理 磁盘使用率 (%) 该指标用于统计测量对象的磁盘使用率。 磁盘扩容:您可以设置存储空间自动扩容,在实例存储空间达到阈值时,会触发自动扩容。 减少磁盘数据:删除无用的历史表数据。 对于大量排序查询导致的临时文件过大,建议优化SQL查询。 RDS实例磁盘满导致实例异常的解决方法 TPS (次/秒) 该指标用于统计事务执行次数,含提交的和回退。 评估业务SQL的执行计划,添加索引避免全表扫描。 扩容CPU规格,满足计算型业务需求。 RDS for MySQL CPU使用率高的问题处理 QPS (次/秒) 该指标用于统计SQL语句查询次数,含存储过程。 IOPS (次/秒) 该指标用于统计当前实例,单位时间内系统处理的I/O请求数量(平均值)。 扩容实例规格,满足业务需求。 优化业务充分利用Buffer等,减少从磁盘读取数据。 磁盘性能带宽超上限 活跃连接数 (个) 该指标用于统计非sleep状态的连接。 请及时排查业务侧连接是否有效,优化实例连接,释放不必要的连接。 规格偏小,请对数据库进行规格扩容。 RDS数据库连接数满的排查思路 RDS数据库实例支持的最大数据连接数是多少 慢SQL (个) 该指标用于展示每分钟MySQL产生慢日志的数量。 根据慢SQL的执行计划进行优化。 扩容CPU规格,满足计算型业务需求。 联合索引设置不当导致慢SQL
  • 查看智能诊断 基于运行数据结合智能算法对实例进行智能诊断,并对异常项提供具体的诊断结果以及优化建议。 单击异常诊断项名称,查看异常实例以及相关监控指标的数据。 单击“诊断详情”,查看具体的诊断结果以及优化建议。 图5 智能诊断 支持的诊断项以及诊断异常的处理建议,请参见表4。 表4 智能诊断说明 诊断项 监控指标 指标说明 处理建议 案例 高压力请求 CPU使用率 (%) 该指标用于统计测量对象的CPU使用率。 评估业务SQL的执行计划,添加索引避免全表扫描。 扩容CPU规格,满足计算型业务需求。 RDS for MySQL CPU使用率高的问题处理 TPS (次/秒) 该指标用于统计事务执行次数,含提交的和回退。 QPS (次/秒) 该指标用于统计SQL语句查询次数,含存储过程。 CPU使用率 (趋势) 该指标用于统计测量对象的CPU使用率。 长事务指标 (趋势) 该指标统计长事务耗时数据。 相关操作命令前后分别有BEGIN以及COMMIT命令才算作一个完整的长事务。 锁等待 行锁等待个数 (个数) 该指标用于统计Innodb行锁等待个数。 表示历史累积等待行锁的事务个数。重启会清空锁等待。 元数据锁:终止持有MDL锁的会话,恢复被阻塞的操作。 Innodb锁等待:查看是否存在锁等待;终止持有锁的源头会话,恢复被阻塞的操作。 更多操作,参见管理锁&事务。 RDS for MySQL元数据锁MDL导致无法操作数据库的解决方法 业务死锁导致响应变慢 行锁平均等待时间 (ms) 该指标用于统计innodb历史行锁平均等待时间。 当前行锁等待数 (个数) 该指标用于统计innodb当前行锁等待数。 表示当前正在等待行锁的事务个数。 MDL锁数量 (Count) 该指标用于统计MDL锁数量。 长事务指标 (趋势) 该指标统计长事务耗时数据。 相关操作命令前后分别有BEGIN以及COMMIT命令才算作一个完整的长事务。 空间容量不足 磁盘利用率 (%) 该指标用于统计测量对象的磁盘利用率。 磁盘扩容:您可以设置存储空间自动扩容,在实例存储空间达到阈值时,会触发自动扩容。 减少磁盘数据:删除无用的历史表数据。 对于大量排序查询导致的临时文件过大,建议优化SQL查询。 RDS实例磁盘满导致实例异常的解决方法 磁盘使用量 (GB) 该指标用于统计测量对象的磁盘使用大小。 磁盘总大小 (GB) 该指标用于统计测量对象的磁盘总大小。 磁盘利用率 (趋势) 该指标用于统计测量对象的磁盘利用率。 慢SQL高频 慢日志个数统计 (个/分钟) 该指标用于展示每分钟MySQL产生慢日志的数量。 根据慢SQL的执行计划进行优化。 扩容CPU规格,满足计算型业务需求。 联合索引设置不当导致慢SQL 慢日志个数统计 (趋势) 该指标用于展示每分钟MySQL产生慢日志的数量。 磁盘性能上限 IOPS (次/秒) 该指标用于统计当前实例,单位时间内系统处理的I/O请求数量(平均值)。 扩容实例规格,满足业务需求。 优化业务充分利用Buffer等,减少从磁盘读取数据。 磁盘性能带宽超上限 磁盘I/O非空闲时间占比 (%) 该参数表示磁盘设备的繁忙程度,表示有I/O(非空闲)的时间百分比。因现代磁盘设备都有并行处理多个I/O请求的能力,即使该指标达到100%也不意味着设备饱和。 硬盘读吞吐量 (byte/s) 该指标用于统计每秒从硬盘读取的字节数。 硬盘写吞吐量 (byte/s) 该指标用于统计每秒写入硬盘的字节数。 内存超限风险 内存使用率 (%) 该指标用于统计测量对象的内存使用率。 扩容实例规格,满足业务需求。 优化SQL,减少临时表等的使用。 会话定期重连,及时释放session级别内存。 内存使用超限风险与优化 RDS for MySQL数据库内存使用率过高怎么处理 数据库总连接数 (个) 该指标用于统计试图连接到MySQL服务器的总连接数。 当前活跃连接数 (个) 该指标用于统计非sleep状态的连接。 内存使用率 (趋势) 该指标用于统计测量对象的内存使用率。
  • 查看活动告警 根据设置的告警规则,查看当前账号下所有RDS for MySQL实例的活动告警记录,包含“告警中(指标)”,“已触发(事件)”。 在活动告警页面上方,单击“设置告警规则”,跳转到 云监控 页面。 系统默认内置一条告警规则,支持修改、停用、删除等操作,详见修改告警规则。 单击“创建告警规则”,为数据库实例新建指标监控或事件监控告警规则。更多操作,请参见创建告警规则和通知。 图3 查看告警规则 在活动告警页面上方,选择时间范围,查看告警详情。 支持的监控时间窗:近1小时、近6小时、近12小时、近1天、近1周、近1月。 图4 活动告警 活动告警从多个模块为用户展示实例告警详情,各模块的详细说明请参见表2和表3。 表2 告警总数TOP5实例 模块项 说明 级别统计 查看不同告警级别下各自触发数。告警级别包括:紧急、重要、次要、提示。 告警总数TOP5实例 查看告警总数TOP5的实例,鼠标悬停可查看当前实例各级别的告警触发数。 单击TOP5实例名称,在下方列表中查看对应实例的告警信息。 表3 告警列表说明 类别 说明 告警级别 包括:紧急、重要、次要、提示。在告警列表上方选择查看指定告警级别或全部级别的告警信息。 状态 告警中:监控指标数值达到告警配置阈值,资源正在告警中。 已触发:监控的资源触发了告警策略中配置的事件。 最新更新时间 该条告警的最新触发时间。 告警类型 告警规则适用的告警类型。 指标 事件 告警策略 触发告警规则的告警策略。 当告警类型选择指标监控时,是否触发告警取决于连续周期的数据是否达到阈值。例如:CPU使用率监控周期为5分钟,连续三个周期平均值≥80%,则触发告警。 CPU使用率高的处理建议,请参见RDS for MySQL CPU使用率高的问题处理。 内存使用率高的处理建议,请参见RDS for MySQL数据库内存使用率过高怎么处理。 存储空间满的处理建议,请参见RDS实例磁盘满导致实例异常的解决方法。 当告警类型选择事件监控时,触发告警具体的事件为一个瞬间的事件。例如:创建实例业务失败,则触发告警。 支持的事件监控以及监控异常的处理建议,请参见事件监控支持的事件说明。 告警规则 该条告警所在告警规则的名称/ID。 实例名称 触发告警的实例名称,在下拉框选择查看全部告警实例或指定实例的告警信息。 刷新页面后,实时展示最新触发的告警详情。 操作 单击“告警指标”,在右侧弹窗中,查看所选时间段内的指标监控视图。
  • 查看实例状态 在总览页上方的下拉框,选择“MySQL”,展示当前账号下所有RDS for MySQL实例的状态。 图2 实例状态 表1 状态说明 类别 说明 操作 处理建议 实例总数 全部运行状态下,RDS for MySQL主实例和只读实例的总数。 单击“实例总数”,跳转到实例列表,查看所有实例。 - 异常 运行状态为“异常”的RDS for MySQL实例总数。 单击“异常”,跳转到实例列表,仅展示异常的实例。 联系客服处理。 磁盘不足 运行状态为“存储空间满”的RDS for MySQL实例总数。 单击“磁盘不足”,跳转到实例列表,仅展示磁盘不足的实例。 详见RDS for MySQL实例磁盘满的问题处理。 冻结 运行状态为“冻结”的RDS for MySQL实例总数。 单击“冻结”,跳转到实例列表,仅展示冻结的实例。 详见资源冻结/释放/停止/删除/退订。 等待重启 运行状态为“等待重启”的RDS for MySQL实例总数。 说明: 数据库参数修改后,有些参数需要重启实例才能生效,未重启前实例状态为“等待重启”。 单击“等待重启”,跳转到实例列表,仅展示等待重启的实例。 重启实例。
  • 数据库不建议修改的会话级参数 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性能较差。
  • 数据库基本设计规范 所有表如果没有特殊需求,都要使用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类型。 FLOAT和DOUBLE在存储的时候,存在精度损失的问题,很可能在值的比较时,得到错误的结果。 使用datetime、timestamp类型来存储时间,禁止使用字符串替代。 使用数字类型INT UNSIGNED存储IP地址,用INET_ATON、INET_NTOA可以在IP地址和数字类型之间转换。 VARCHAR类型的长度应该尽可能短。VARCHAR类型虽然在硬盘上是动态长度的,但是在内存中占用的空间是固定的最大长度。 使用VARBINARY存储大小写敏感的变长字符串,VARBINARY默认区分⼤小写,没有字符集概念,速度快。
  • 数据库命名规范 所有的数据库对象名称(包括库名、表名、列名等)建议以小写字母命名,每个单词之间用下划线分隔。 所有的数据库对象名称禁止使用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表强烈建议有一个主键,且不使用更新频繁的列作为主键,不使用多列主键。不使用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表进行索引的二次查询。 外键约束: 建立外键关系的对应列的字符集必须保持一致或者存在外键关系的子表父表的字符集保持一致。
  • 备份恢复 业务高峰时执行备份可能会备份失败,建议手动备份选择在业务低峰期间,自动备份建议根据业务需要自定义备份时间段。 实例写入业务较多时,建议备份策略设置成每天做一次自动备份。 建议根据业务需要设置备份保留天数(默认保留7天)。 建议根据业务需要设置Binlog本地保留时长(默认为0,表示Binlog备份完成后本地日志会被删除)。 使用表级时间点恢复功能时,建议提前确认所选时间点之前是否有对无主键大表的删除操作,如果有该操作,恢复完成时间不易评估。 创建实例前建议根据需要选择存储类型,本地盘SSD实例不支持备份恢复到已有实例和当前实例。 删除实例后,自动备份的全量备份和Binlog备份也会删除,对数据有需要时,建议删除前进行手动全量备份。 建议自定义回收站策略,防止误删实例无法恢复。
  • 数据库实例 数据库实例类型选择 主备 一主一备的经典高可用架构。适用于大中型企业的生产数据库,覆盖互联网、物联网、零售电商、物流、游戏等行业应用。 备机提高了实例的可靠性,创建主机的过程中,同步创建备机,备机创建成功后,用户不可见。 当主节点故障后,会发生主备切换,数据库客户端会发生短暂中断,数据库客户端需要支持重新连接。 单机 采用单个数据库节点部署架构,与主流的主备实例相比,它只包含一个节点,但具有高性价比。 适用于个人学习、微型网站以及中小企业的开发测试环境。 单机版出现故障后,无法保障及时恢复。 只读 只读实例分为单机版只读实例和高可用只读实例。 单机版只读实例: 推荐开启数据库代理功能,并购买单机版只读实例。当单个只读故障后,数据库代理可以将流量分担到其它只读节点。 高可用只读实例: 当只读实例所在物理机故障后,备用只读实例自动顶替。 购买只读实例时,注意表库名的大小写敏感要与主实例保持一致。 推荐用法: 主实例下包含2个及以下只读实例时,高可用只读作用比较好。 2个以上只读实例,建议开启数据库代理,获得更好的性价比。 当只读实例与主数据库之间复制异常后,单机版和高可用版只读都需要较长时间重建和恢复(取决于数据量)。 只读实例创建完成后,可通过time_zone参数修改时区。要求只读实例的时区和主实例一致,否则会导致数据同步异常。 实例性能规格选择 独享型 完全独享的CPU和内存,性能长期稳定,不会因为物理机上其它实例的行为而受到影响,适用于对性能稳定性要求较高的应用场景。 通用型 与同一物理机上的其他通用型规格实例共享CPU资源,通过资源复用换取CPU使用率最大化,性价比较高,适用于对性能稳定性要求较低的应用场景。 惠选型 完全独享的CPU和内存,性能长期稳定,不会因为物理机上其它实例的行为而受到影响,适用于对性能稳定性要求较高的应用场景,与独享型相比在价格方面有一定优惠。
  • 约束限制 仅支持停止存储类型为SSD云盘的按需实例,专属云RDS不支持停止实例。 停止主实例时,如果存在只读实例,会同时停止只读实例。主实例和只读实例均默认停止十五天。不支持单独停止只读实例。 实例停止后,不支持通过控制台删除实例。 实例停止后,自动备份任务也会停止。实例开启后,会自动触发一次全量备份。 实例默认停止十五天,如果您在十五天后未手动开启实例,则数据库实例将于十五天后的下一个可维护时间段内自动启动,可维护时间段的详细内容请参考设置可维护时间段,开启实例操作步骤请参考开启实例。 按需付费的数据库实例停止实例后,可能会由于底层ECS资源不足引起开启失败。若实例开启失败,可稍后再次尝试开启,或利用最新备份文件恢复到新实例,需要协助请联系客服人员处理。
  • 步骤1:测试连通性并安装SQL Server Management Studio 在RDS“实例管理”页面,单击实例名称进入“概览”页面。 获取实例的公网地址和数据库端口。 图1 连接信息 如果没有绑定公网地址,请参见绑定和解绑弹性公网IP。 打开cmd命令窗,测试是否可以正常连接到RDS for SQL Server实例公网地址的端口。 telnet 公网地址 1433 如果可以通信,说明网络正常。 如果无法通信,请检查安全组规则。 查看RDS的安全组的入方向规则,如果源地址不为“0.0.0.0/0”且协议端口不为“全部”,需要将RDS for SQL Server实例公网地址和端口添加到入方向规则,具体操作请参见设置安全组规则。 图2 RDS的安全组 在本地打开浏览器,访问Microsoft网站,以SQL Server Management Studio 18.0为例,下载安装包。 双击安装包,按照向导完成安装。
  • 步骤2:测试连通性并安装SQL Server Management Studio 登录ECS实例,请参见《弹性云服务器用户指南》中“Windows弹性云服务器管理控制台远程登录(VNC方式)”。 在RDS“实例管理”页面,单击实例名称进入“概览”页面。 获取实例的内网地址和数据库端口。 图4 连接信息 在ECS上打开cmd命令窗,测试是否可以正常连接到RDS for SQL Server实例内网地址的端口。 telnet 192.168.2.182 1433 如果可以通信,说明网络正常。 如果无法通信,请检查安全组规则。 查看ECS的安全组的出方向规则,如果目的地址不为“0.0.0.0/0”且协议端口不为“全部”,需要将RDS实例的内网IP地址和端口添加到出方向规则。 图5 ECS的安全组 查看RDS的安全组的入方向规则,如果源地址不为“0.0.0.0/0”且协议端口不为“全部”,需要将ECS实例的私有IP地址和端口添加到入方向规则,具体操作请参见设置安全组规则。 图6 RDS的安全组 在ECS上打开浏览器,访问Microsoft网站,以SQL Server Management Studio 18.0为例,下载安装包。 双击安装包,按照向导完成安装。
  • 步骤1:购买ECS 登录管理控制台,查看是否有弹性云服务器。 有Windows弹性云服务器,执行3。 无Windows弹性云服务器,执行2。 图1 ECS实例 购买弹性云服务器时,选择Windows操作系统。 由于需要在ECS下载SQL Server Management Studio客户端,因此需要为ECS绑定弹性公网IP(EIP),并且选择与RDS for SQL Server实例相同的区域、VPC和安全组,便于RDS for SQL Server和ECS网络互通。 购买Windows弹性云服务器请参考《弹性云服务器用户指南》中“购买弹性云服务器”章节。 在ECS实例基本信息页,查看ECS实例的区域和VPC。 图2 ECS基本信息 在RDS for SQL Server实例概览页,查看RDS实例的区域和VPC。 图3 SQL Server概览 确认ECS实例与RDS for SQL Server实例是否处于同一区域、同一VPC内。 是,执行步骤2:测试连通性并安装SQL Server Management Studio。 如果不在同一区域,请重新购买实例。不同区域的云服务之间内网互不相通,无法访问实例。请就近选择靠近您业务的区域,可减少网络时延,提高访问速度。 如果不在同一VPC,可以修改ECS的VPC,请参见切换虚拟私有云。
  • 连接SQL Server实例的方式 云数据库 RDS for SQL Server提供使用SQL Server Management Studio客户端和数据管理服务(Data Admin Service,简称DAS)的连接方式。 表1 RDS连接方式 连接方式 使用场景 通过DAS连接RDS for SQL Server实例(推荐) 通过数据管理服务(Data Admin Service,简称DAS)这款可视化的专业数据库管理工具,可获得执行SQL、高级数据库管理、智能化运维等功能,做到易用、安全、智能地管理数据库。云数据库RDS服务默认开通DAS连接权限。 通过SQL Server Management Studio客户端连接实例 华为云提供两种连接方式通过SQL Server Management Studio客户端连接实例:非SSL连接和SSL连接。其中,SSL连接实现了数据加密功能,具有更高的安全性。 父主题: 连接实例
  • 字符集排序规则 表2 排序规则说明 排序规则选项 说明 区分大小写(_CS) 区分大写字母和小写字母。 如果指定此项,排序时小写字母将在其对应的大写字母之前。 如果未指定此选项,排序规则将不区分大小写。 即RDS for SQL Server 在排序时将大写字母和小写字母视为相同。 通过指定 _CI,可以显式选择不区分大小写。 区分重音(_AS) 区分重音字符和非重音字符。 例如,“a”和“ấ”为不同字符。 如果未指定此选项,则排序规则将不区分重音。 即RDS for SQL Server 在排序时将字母的重音形式和非重音形式视为相同。 通过指定 _AI,可以显式选择不区分重音。
  • 服务器级别排序规则 下表为部分操作系统(OS)区域设置确定的默认排序规则。 表4 操作系统排序规则 Windows区域设置 默认排序规则 南非荷兰语(南非) Latin1_General_CI_AS 阿尔萨斯语(法国) Latin1_General_CI_AS 巴斯克语(巴斯克) Latin1_General_CI_AS 波斯尼亚语(波斯尼亚和黑塞哥维那,拉丁语) Latin1_General_CI_AS 保加利亚语(保加利亚) Cyrillic_General_CI_AS 中文(澳门特别行政区) Latin1_General_CI_AI 中文(中华人民共和国) Chinese_PRC_CI_AS 荷兰语(荷兰) Latin1_General_CI_AS 英语(澳大利亚) Latin1_General_CI_AS 英语(印度) Latin1_General_CI_AS 英语(加拿大) Latin1_General_CI_AS 英语(新西兰) Latin1_General_CI_AS 英语(英国) Latin1_General_CI_AS 英语(美国) Latin1_General_CI_AS 菲律宾语(菲律宾) Latin1_General_CI_AS 意大利语(意大利) Latin1_General_CI_AS 泰语(泰国) Thai_CI_AS
  • 支持的实例字符集 RDS for SQL Server当前支持的实例字符集如表1所示: 表1 支持的实例字符集 实例字符集 说明 Chinese_PRC_90_CI_AI Chinese-PRC-90,不区分大小写、不区分重音(兼容SQL Server 2005)。 Chinese_PRC_CI_AI Chinese-PRC,不区分大小写、不区分重音。 Chinese_PRC_CI_AS Chinese-PRC,不区分大小写、区分重音。 Chinese_PRC_CS_AS Chinese-PRC,区分大小写、区分重音。 Cyrillic_General_CI_AS Cyrllic_General,不区分大小写,区分重音。 SQL_Latin1_General_CP1_CI_AS 对于Unicode 数据为 Latin1_General,不区分大小写,区分重音。 THAI_CI_AS THAI,不区分大小写、区分重音。
  • 数据库迁移 迁移上云完成后,需要进行以下检查: 需要检查权限完整性。权限会影响对于数据库的方案,迁移仅会完成数据恢复,数据库用户恢复,登录名等其他服务级权限需要重新创建,并且关联数据库账户。 需要对索引进行重建。由于迁移完成后数据文件的物理环境发生了改变,数据库索引会失效,需要对索引进行重建,否则可能会导致数据库性能有明显下降。 对比参数配置。迁移上云后RDS for SQL Server会使用云上的参数组,需要及时对比云下参数配置和云上是否匹配。由于云下参数配置是经过长期验证,所以请及时更新云上的参数配置。
  • 使用建议 不推荐创建加域实例,云数据库 RDS for SQL Server支持创建加域实例,加域实例的域控服务器在用户侧,用户拥有较高权限,域控服务器组策略配置会影响加入该域的机器,用户侧域控规则修改会导致数据库实例的权限安全风险增加。 单实例数据库数量不要超过100个。单实例可以承载的数据库数量跟实例规格相关,数据库数量过多会导致实例性能下降,占用Worker Thread等资源。 应用不能依赖SysAdmin权限。具有SysAdmin角色的账号有超级管理员权限,使用不当会导致数据库安全与稳定性受到威胁,云数据库不开放超级管理员权限,应用使用数据库不能依赖于此权限。 不要在系统库创建表。用户数据请创建用户自定义库存放,不要在系统库创建任何表写入数据,虽然开放了使用系统库的权限,但是任何在系统库存放的数据都是不安全的。 数据库不要打开Auto Close属性。用户库可以设置Auto Close属性,打开该属性后会导致包括建立复制关系无法建立的问题,并且该属性设置后不能正常的使用该库,强烈建议不要设置。 不要将数据库设置为Single User模式。Single User模式只允许一个Session访问数据库,会导致其他Session无法访问造成云数据库的运维问题。设置Single User模式请及时恢复到Multi User模式。 慢日志不要长时间打开。慢日志可以帮助进行慢SQL分析,但是长时间打开会导致性能损失,建议在不需要跟踪分析SQL问题时关闭慢日志。 定时重建索引。数据库在长时间使用后可能会产生较多的索引碎片,导致数据库访问性能下降,需要定时进行索引重建,可以采用创建SQL Agent Job的方式定时重建索引,建议一个月重建一次索引。 定时更新统计信息。数据库统计信息需要经常更新对于性能有益。建议采用创建SQL Agent Job的方式每周更新一次统计信息。 关注数据库大小,及时收缩数据库。数据库长时间使用可能会有一些物理空间无法及时释放,需要执行收缩数据库操作才能释放物理空间。需要关注日志文件大小及物理文件大小,发现文件膨胀迅速可以在业务低峰期收缩数据库。 数据库名长度不要超过64个字符,且数据库名当前仅支持数字、大小写字母、中划线(-)和下划线(_),不支持其他特殊字符。 建议修改默认端口。RDS for SQL Server默认端口为1433,公网上一些不安全的程序可能会扫描RDS for SQL Server的默认端口,建议修改默认端口。 推荐使用高可用主备实例。相比于单机实例,高可用实例可以极大提高生产业务的可用性和可靠性。 高可用实例请跨AZ部署,进行AZ级别的容灾。 建议长时间运行的实例在业务低峰期可以重启。实例长时间运行后可能会出现性能下降,推荐每三个月能够在业务低峰期重启一次实例。 设置最大并行度。最大并行度参数影响业务的CPU使用率。默认值为0允许Session使用所有CPU,可能由于某个SQL的问题导致CPU无法分配给其他Session使用。建议根据规格配置,如核数除以2。 临时库(TempDB)创建多个ndf辅助文件。 当执行操作出现权限问题时,请优先参考存储过程的使用,查找使用合适的存储过程。 如需修改SQL Server参数,请在控制台进行修改,不支持通过执行SQL命令方式修改。 备份恢复相关操作请通过管理控制台下发或调用RDS API接口、SDK接口下发,不能通过S SMS 或执行SQL直接操作。迁移上云请参考 数据复制服务 (DRS)。 恢复数据到已有实例请谨慎操作,避免错误覆盖已有数据导致影响业务。建议使用恢复到新实例功能。 数据库恢复模式(Recovery model)不要设置为simple模式,建议使用full模式。 设置为simple模式将不会对该库执行增量备份,因此该库无法恢复到指定时间点。 对于主备实例或者集群实例,设置数据库恢复模式是simple模式后,会导致该库不会建立复制关系,进而无法操作主备切换或者规格变更。 因此,请谨慎使用simple模式。 不建议使用长事务或长时间未提交事务。长事务会长时间占用数据库的事务日志,造成事务日志膨胀并且无法阶段回收空间,最终导致磁盘满并造成大量锁等待,阻塞其他SQL执行。如果kill掉后会导致回滚时间更长,至少是事务执行的1.5倍,造成主备复制延迟增大,导致主备切换失败、主备的规格变更失败。
  • 解决方法 分析慢SQL日志以及CPU使用率指标来定位效率低的查询,再优化查询效率低的语句。 查看慢SQL日志来确定是否存在运行缓慢的SQL查询以及各个查询的性能特征(如果有),从而定位查询运行缓慢的原因。 查询SQL Server日志,请参见查询慢日志。 查看华为云关系型数据库实例的CPU使用率指标,协助定位问题。 请参见通过Cloud Eye监控。 创建只读实例专门负责查询。减轻主实例负载,分担数据库压力。 多表关联查询时,关联字段要加上索引。 尽量避免用select*语句进行全表扫描,可以指定字段或者添加where条件。
  • 优势 助力企业满足等保合规要求。 满足等保测评数据库审计需求。 满足国内外安全法案合规需求,提供满足数据安全标准(例如Sarbanes-Oxley)的合规报告。 支持备份和恢复数据库审计日志,满足审计数据保存期限要求。 支持风险分布、会话统计、会话分布、SQL分布的实时监控能力。 提供风险行为和攻击行为实时告警能力,及时响应数据库攻击。 帮助您对内部违规和不正当操作进行定位追责,保障数据资产安全。 数据库安全审计采用数据库旁路部署方式,在不影响用户业务的前提下,可以对数据库进行灵活的审计。 基于数据库风险操作,监视数据库登录、操作类型(数据定义、数据操作和数据控制)和操作对象,有效对数据库进行审计。 从风险、会话、SQL注入等多个维度进行分析,帮助您及时了解数据库状况。 提供审计报表模板库,可以生成日报、周报或月报审计报表(可设置报表生成频率)。同时,支持发送报表生成的实时告警通知,帮助您及时获取审计报表。
  • 约束限制 导入单文件大小最大可达1GB。 可以支持导入的数据文件类型包括CSV格式和SQL文件格式。 暂不支持BINARY、VARBINARY、TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB等二进制类型字段的导入。 不支持使用跨区域的OBS桶导出导入数据。 RDS for MySQL 8.0实例表数量超过10万(5.7和5.6版本超过1万)时,使用DAS的“导出数据库”功能会报错表数量过多,无法导出数据。此时请使用“导出SQL结果集”功能。
共100000条