产品简介

产品概述

关系型云数据库服务(RDS)MySQL版让您可以快速在云端使用、操作MySQL数据库。在管理数据库任务的同时,可以根据业务情况调整和设置数据库,从而满足您不同业务发展需求,并且提供监控、运维工具等数据库运维全套解决方案,而且具有高性价比,您无需预先采购硬件资源。省心的关系型云数据库MySQL服务让您能更加专注于业务的发展。

产品系列

 

主从版架构

高可用版采用一主 N 从的高可用模式,实时热备,提供宕机自动检测和故障自动转移。覆盖游戏、互联网、金融、物联网、零售电商、物流、保险、证券等行业应用。

 

 

快速入门

链路类型说明

链路是VDC用于访问数据库的方式,在您创建实例的时候,需要选择链路类型。现在提供的链路类型有两种,默认链路连接器链路

默认链路

默认链路使用的是租户内网带宽,提供高可用,但是每个服务实例都将占用内网IP。使用默认链路避免了连接器中复杂的传输路径,能降低网络延迟,对于延时敏感型业务,建议选择默认链路

拓扑图

连接器链路

连接器链路提供高可用,支持横向扩展的负载。一个连接器下可以连接多个实例,除连接器自身占用的IP外,该连接器下的服务实例将不需要再占用IP,因此帮助客户节约了内网IP地址,但是由于连接器自身的架构特性,会增加延迟。

提示:从2021-03-19号起不再提供连接器链路

拓扑图

创建云数据库MySQL实例

  • 1.登陆控制台。

  • 2.左侧选择数据库服务。

  • 3.在页面右上角选择【创建数据库服务】。

  • 4.选择数据库服务MySQL【开通服务】。

  • 5.设置以下参数。

    虚拟数据中心 实例所在的可用区和资源组。购买后无法更换地域。
    请根据目标用户所在的地理位置就近选择地域,提升用户访问速度。
    请确保RDS实例与需要连接的云主机实例创建于同一个地域,否则它们无法通过内网互通,只能通过外网互通,无法发挥其性能。
    计费方式 实例的计费方式为按需计费。
    数据库类型 实例的数据库类型为MySQL。
    引擎版本 指MySQL的版本,支持MySQL 5.6和MySQL 5.7。
    架构类型 MySQ5.6.25实例的架构类型为集群版;
    MySQ5.7.24实例的架构类型为主从版。
    链路类型 指实例的网络类型,分为默认链路和连接器链路.
    默认链路:用户需要自己选择需要的内网网段,系统会自动分配此网段未占用的IP地址给数据库实例使用。
    连接器链路:连接器提供高可用链路,防范单点故障,保障业务不受影响。没有连接器时需要创建连接器。目前连接器不收费。
    计算类型 实例的计算类型有高性能型和高I/0型。
    实例规格 每种规格对应不同的CPU核数、内存、最大连接数。有以下选择:
    集群版:
    2C4G:最大连接数800
    4C8G:最大连接数1600
    8C16G:最大连接数3200
    8C24G:最大连接数:4800
    8C32G:最大连接数6400
    8C48G:最大连接数9600
    8C64G:最大连接数12800
    自定义
    主从版:
    2C4G:最大连接数800
    4C8G:最大连接数1600
    8C16G:最大连接数3200
    8C32G:最大连接数6400
    自定义
     
    白名单 支持设置白名单
    读写分离 支持开启或关闭读写分离,默认为开启。
    存储 选择存储类型和对应的存储大小。存储类型有:性能型、超高性能型;存储大小可选范围为0-2000G(单盘),但最高可以添加13块硬盘。性能型硬盘默认3000IOPS,超高性能型默认5000IOPS,支持扩展到最高10000IOPS。
    预置性能包:
    购买超高性能型存储支持添加预置性能包,预置性能包每份可扩展100IOPS及3.2MBps吞吐量,可根据业务需要自行添加,最高支持添加50份预置性能包。
    实例名称 支持设置实例名称,可选择创建后设置或立即命名。
    如果选择创建后设置将生成一个默认名称。
  • 6.检查当前配置,确认配置和费用。

  • 7.阅读并勾选同意《云关系型数据库服务等级协议》。

  • 8.点击【创建】完成实例创建。

用户手册

实例维护

为保障云数据库MySQL实例的稳定性,系统会不定期对实例进行维护操作。默认可维护时间段为03:00~04:00,您可以根据业务规律,将可维护时间段设置在业务低峰期,以免维护过程中可能对业务造成的影响。

操作步骤

1. 登陆控制台。

2. 在左侧菜单中选择【数据库服务】。

3. 找到目标MySQL实例,点击实例ID。

4. 在【基本信息】页面找到【维护信息】,单击【修改】。

5. 在弹出的对话框中,选择您所需的“维护周期”和“维护时间”

6. 设置好维护时间的任务之后,可以点击【查看维护时间任务】进行任务查看和修改。

实例管理

变更配置

变配方式

变配后,新的配置立即生效。

变更项

本文将介绍如何变更实例的规格、存储空间

说明:

  • 存储类型在实例创建时已经确定,不可更改,只能添加相同类型硬盘。
  • 增加存储空间时不能超过该规格的存储空间限制,存储大小可选范围为0-2000G(单盘),但最高可以添加13块硬盘。
  • 存储空间无法降低。
  • 为了保障磁盘性能相同,添加硬盘时,预置性能包份数与创建时一致。

注意事项

在变更配置生效期间,RDS服务可能会出现一次约30秒的闪断,而且与数据库、账号、网络等相关的大部分操作都无法执行,请尽量在业务低峰期执行变配操作,并确保您的应用有自动重连机制。

操作步骤

  • 1.登陆控制台。

  • 2.在左侧菜单中选择【数据库服务】。

  • 3.找到目标MySQL实例,点击实例ID

  • 4.在【基本信息】页面找到【规格配置】。

  • 5.点击【修改】或【添加】进行规格修改。

     

  • 6.然后选择需要的计算规格或需要添加的存储大小。

     

  • 8.在变更配置及计费信息处【确认】即可完成变更。

     

设置实例参数

您可以在控制台查看和修改部分参数的值,并在控制台查询参数修改记录。

注意事项

  • 修改参数值时请参考控制台上【可修改参数】页面中的【参数名】列。
  • 部分参数修改后需要重启实例,具体请参见控制台上可修改参数页面中的是否重启列。建议您在业务低峰期操作,并确保应用程序具有重连机制。

修改参数值

  • 1.登陆控制台。

  • 2.在左侧菜单中选择【数据库服务】。

  • 3.找到目标MySQL实例,点击实例ID。

  • 4.在顶部导航栏中选择【更多】-【参数配置】。

  • 5.您可以进行如下操作:

    修改单个参数:

    • I)在【可修改参数】列表内找到需要修改的参数,单击运行参数值列的

    • II)根据提示的取值范围输入参数值。

    • III)单击【确定】。

    • IV)在右上角点击【提交参数】。

      说明:

      • 如果修改的参数需要重启实例才生效,系统会提示您是否重启,建议您在业务低峰期操作,并确保应用程序具有重连机制。
      • 参数的修改未提交时,如果想取消修改,请单击【撤销】。

    批量修改参数:

    • I)单击【导出参数】,会将txt格式的参数文件保存到本地,该txt文件包含该实例所有可修改的参数值。

    • II)修改导出的参数文件。

    • III)修改完成后,单击【导入参数】,将参数文件内容粘贴到对话框中。

    • IV)单击【确定】。

    • V)在右上角单击【提交参数】。

    说明:

    • 修改的参数值背景会变为深色,您可以确定是否是这几个参数。
    • 当有不符合参数范围的值出现时,会用红色标出。
    • 如果修改的参数需要重启实例才生效,系统会提示您是否重启,建议您在业务低峰期操作,并确保应用程序具有重连机制。
    • 参数的修改未提交时,如果想取消修改,请单击【撤销】。

查看参数修改历史

  • 1.登陆控制台。

  • 2.在左侧菜单中选择【数据库服务】。

  • 3.找到目标MySQL实例,点击实例ID。

  • 4.在顶部导航栏中选择【更多】-【参数配置】。

  • 5.点击【修改历史】页签。

  • 6.选择时间范围并单击【查询】。

修改实例字符集

本文将介绍如何通过控制台修改实例的字符集。

注意事项

  • 实例的默认字符集为UTF8MB4,修改字符集会重启实例,重启期间不能对该实例进行操作。

操作步骤

  • 1.登陆控制台。

  • 2.在左侧菜单中选择【数据库服务】。

  • 3.找到目标MySQL实例,点击实例ID。

  • 4.4.在【基本信息】处找到字符集。

     

  • 5.点击【修改】,选择需要的字符集,单击确定即可。

只读实例

云数据库 MySQL 支持用户创建1个或至多3个只读实例,以支持用户的读写分离和一主多从应用场景,可显著提高用户数据库的读负载能力。 目前暂不支持统一读写分离地址,即自动分离读请求与写请求。只读实例需要通过单独的 IP、PORT 来访问。

注意事项

  • 只读实例规格必须大于或等于主实例规格。
  • 一个主实例最多可以创建3个只读实例。
  • 不支持备份以及回档功能。
  • 不支持创建/删除数据库,不支持 phpMyAdmin(PMA)。
  • 不支持创建/删除帐号,不支持为帐号授权以及修改帐号及密码。
  • 只读实例无需维护帐号与数据库,均从主实例同步。
  • 由于数据同步有延迟,多个只读实例之间可能存在少量数据不一致的情况。各只读实例与主实例之间的同步时延可在控制台查看。
  • 只读实例的实例规格可以与主实例不一致,方便用户根据负载情况升级。

创建只读实例

  • 1.登陆控制台。

  • 2.在左侧菜单中选择【数据库服务】。

  • 3.找到目标MySQL实例,点击实例ID。

  • 4.在【基本信息】页中,单击实例架构图中的【添加只读实例】,进入只读实例管理页。

     

  • 5.在【只读实例】功能页中,单击【新建只读实例】,创建只读实例。

  • 进入购买页,选择只读实例的相应配置,确认无误后单击【立即购买】购买只读实例。

账号与权限

创建账号

本文介绍如何为云数据库MySQL实例创建账号。

账号类型

云数据库MySQL实例支持两种数据库账号:高权限账号和普通账号。您可以在控制台管理所有账号,账号拥有的具体权限请参见文末账号权限列表。

账号类型 说明
高权限账号
  • 只能通过控制台创建和管理。
  • 一个实例中只能创建一个高权限账号,可以管理所有普通账号和数据库。
  • 开放了更多权限,可满足个性化和精细化的权限管理需求,比如可按用户分配不同表的查询权限。
  • 拥有实例下所有数据库的所有权限。
  • 可以断开任意账号的连接。
普通账号
  • 可以通过控制台或者SQL语句创建和管理。
  • 一个实例可以创建多个普通账号,具体的数量与实例内核有关。
  • 需要手动给普通账号授予特定数据库的权限。
  • 普通账号不能创建和管理其他账号,也不能断开其他账号的连接。

创建高权限账号

  • 1.登陆控制台。

  • 2.在左侧菜单中选择【数据库服务】。

  • 3.找到目标MySQL实例,点击实例ID。

  • 4.在顶部导航栏中选择【更多】-【用户权限】。

  • 5.点击【创建用户】。

  • 6.设置以下参数:

    参数 说明
    用户名 填写账号名称。要求如下:
    • 长度为2~16个字符。
    • 以字母开头,以字母或数字结尾。
    • 由小写字母、数字或下划线组成。
    账户类型 此处选择高权限账号。
    密码 设置账户密码。要求如下:
    • 长度为10~24个字符。
    • 由大写字母、小写字母、数字、特殊字符中的任意三种组成。
    • 特殊字符为!@#$^&*()_+=。
    确认密码 再次输入密码。
    备注说明 备注该账户的相关信息,便于后续账户管理。最多支持256个字符。
  • 7.单击【确定】。

重置账号权限

如果高权限账号自身出现问题,比如权限被意外回收(REVOKE ),您可以通过重置账号权限的方法恢复。

  • 1.登陆控制台。

  • 2.在左侧菜单中选择【数据库服务】。

  • 3.找到目标MySQL实例,点击实例ID。

  • 4.在顶部导航栏中选择【更多】-【用户权限】。

  • 5.单击【高权限账号】右侧的【重置账号权限】。

  • 6.输入高权限账号密码,重置账号权限。

创建普通账号

  • 1.登陆控制台。

  • 2.在左侧菜单中选择【数据库服务】。

  • 3.找到目标MySQL实例,点击实例ID。

  • 4.在顶部导航栏中选择【更多】-【用户权限】。

  • 5.点击【创建用户】。

  • 6.设置以下参数:

    参数 说明
    用户名 填写账号名称。要求如下:
    • 长度为2~16个字符。
    • 以字母开头,以字母或数字结尾。
    • 由小写字母、数字或下划线组成。
    账户类型 此处选择普通账号。
    授权数据库 为该账号授予一个或多个数据库的权限。本参数可以留空,在创建账号后再给账号授权。
    I) 从左侧选中一个或多个数据库,单击添加到右侧。
    II) 在右侧框中,为某个数据库选择读写、只读、仅DDL或只DML。
    III) 如果要为多个数据库批量设置相同的权限,则单击右侧框里右上角的按钮,如全部设读写。
    说明:右上角的按钮会随着点击而变化,例如,单击【全部设读写】后,该按钮会变成【全部设只读】。
    密码 设置账户密码。要求如下:
    • 长度为10~24个字符。
    • 由大写字母、小写字母、数字、特殊字符中的任意三种组成。
    • 特殊字符为!@#$^&*()_+=。
    确认密码 再次输入密码。
    备注说明 备注该账户的相关信息,便于后续账户管理。最多支持256个字符。
  • 7.单击【确定】。

账号权限列表

账号类型 授权类型 权限
高权限账号   SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, PROCESS, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER
普通账号 只读 SELECT, LOCK TABLES, SHOW VIEW
读写 SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER
仅DDL CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE
仅DML SELECT, INSERT, UPDATE, DELETE, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, SHOW VIEW, EVENT, TRIGGER
不指定数据库 PROCESS, REPLICATION SLAVE, REPLICATION CLIENT, SELECT

修改密码

在使用云数据库MySQL过程中,如果忘记数据库账号密码,可以通过控制台重新设置密码。

操作步骤

  • 1.登陆控制台。

  • 2.在左侧菜单中选择【数据库服务】。

  • 3.找到目标MySQL实例,点击实例ID。

  • 4.在顶部导航栏中选择【更多】-【用户权限】。

  • 5.找到要修改密码的账号,点击【修改密码】。

  • 6.在弹出的对话框中,输入新密码并确认后,单击【确定】。

    说明 密码要求如下:

    • 长度为10~24个字符。
    • 由大写字母、小写字母、数字、特殊字符中的任意三种组成。
    • 特殊字符为!@#$^&*()_+=。

修改账号权限

您可以根据需要修改普通账号的权限。高权限账号的权限只能重置为初始状态,无法修改为指定的权限。

修改普通账号的权限

  • 1.登陆控制台。

  • 2.在左侧菜单中选择【数据库服务】。

  • 3.找到目标MySQL实例,点击实例ID。

  • 4.在顶部导航栏中选择【更多】-【用户权限】。

  • 5.找到要修改权限的账号,点击【修改权限】。

  • 6.在【修改账号】页面,调整账号权限。

    修改要授权的数据库:选中数据库,单击授权,或单击移除。

    设置权限:在【已授权数据库】中,可以将权限设置为读写、只读、只DDL只DML。还可以通过单击全部设读写、全部设只读、全部设仅DDL全部设只DML进行批量设置。

删除账号

您可以通过控制台删除账号,或者通过SQL命令删除普通账号。

通过控制台删除账号

  • 1.登陆控制台。
  • 2.在左侧菜单中选择【数据库服务】。
  • 3.找到目标MySQL实例,点击实例ID。
  • 4.在顶部导航栏中选择【更多】-【用户权限】。
  • 5.找到要删除的账号,单击其右侧的【删除】。
  • 6.在弹出的确认框中,单击【确定】。

连接数据库

登陆phpMyAdmin

本文为您介绍通过云数据库 MySQL 控制台进入 phpMyAdmin的操作。

操作步骤

  • 1.登陆控制台。

  • 2.在左侧菜单中选择【数据库服务】。

  • 3.找到目标MySQL实例,点击实例ID。

  • 4.在顶部导航栏中选择【更多】-【连接数据库】。

  • 5.在弹出框中,输入账号名和密码,点击【确认】。

  • 6.通过phpMyAdmin成功连接到MySQL数据库,在此页面您可以看到MySQL数据库的各种模式和对象,以及进行创建表、数据插入和查询等操作。

建立数据库和表

创建数据库

  • 1.登陆phpMyAdmin,点击【新建】或者【数据库】,进入创建数据库页面。

  • 2.输入数据库名称,选择排序规则(默认为utf8_general_ci),单击【创建】即可完成数据库的创建。

  • 3.选择需要操作的数据库,单击上方导航栏中的【操作】,即可进入数据库操作页面,在此页面可以对数据库进行【新建数据表】、【复制数据库】等操作。

创建数据表

  • 1.选择需要建表的数据库,单击【新建】或者在【新建数据表】栏输入数据表名和选择字段数后单击【执行】。

  • 2.进入数据表创建页面后,若需要添加字段,请在【添加】处输入所需添加的字段数,然后单击【执行】。【结构】栏为各字段信息的填写。【PARTITION definition】栏为分区信息(请参见 MySQL 分区章节)。填写完信息后单击【保存】,即可完成数据表的创建。

删除数据库和表

删除数据库

  • 1.登陆phpMyAdmin,单击需要管理的数据库名称,进入数据库管理页面,点击【操作】。。

  • 2.在此页面可以对数据库进行【新建数据表】、【删除数据库】等一系列操作。单击【删除数据库(DROP)】即可完成数据库的删除操作。

删除数据表

选择需要删除的表所在的数据库,在此页面可以对数据表进行【浏览】、【结构】、【搜索】、【插入】、【清空】、【删除】一系列操作,单击【删除】。

使用SQL命令

登陆phpMyAdmin,点击【SQL】,即可执行SQL命令。

备份与恢复

备份数据

数据备份用于数据损坏或丢失,您可以设置备份策略自动备份或手动备份,备份的方式都为物理备份

物理备份

物理备份,物理数据全拷贝(自动备份与手动备份均支持)。

注意事项

  • 物理备份属于热备份,服务实例不需要停机,对您的线上业务没有影响。
  • 备份期间不要执行DDL操作,避免锁表导致备份失败。
  • 尽量选择业务低峰期进行备份。
  • 若数据量较大,花费的时间可能较长,请耐心等待。
  • 备份文件有保留时间,请注意。
  • 实例备份文件占用备份空间,云数据库 MySQL 目前的备份空间全部免费,请合理设计备份周期、合理使用备份空间。

自动备份

  • 1.登陆控制台。

  • 2.在左侧菜单中选择【数据库服务】。

  • 3.选择需要备份的MySQL实例。

  • 4.在菜单中选择【备份恢复】。

  • 5.5.在【备份恢复】页面中选择【自动备份设置】。

  • 6.在备份设置页面设置自动备份策略,参数说明如下:

    • 备份周期:可以设置为一星期中的某一天或某几天。
    • 备份时间:可设置为一天中的任意整点时段,以小时为单位,建议设置为业务低峰期时间。
    • 备份方式:备份方式为物理备份,将会备份整个数据库实例。
    • 数据保留时长:备份文件保留的天数,默认为7天。
  • 7.自动备份可以关闭,也可以编辑频率。

手动备份

  • 1.登陆控制台。

  • 2.在左侧菜单中选择【数据库服务】。

  • 3.选择需要备份的MySQL实例。

  • 4.在菜单中选择【备份恢复】。

  • 5.在【备份恢复】页面中选择【备份实例】。

  • 6.在【备份设置】页面设置好备份方式和数据保留时长,点击确认即可。参数说明:

    说明:备份文件保留天数跟随自动备份设置的保留天数。

    • 备份方式:备份方式目前只有物理备份,将备份整个实例。
    • 备注:为备份文件输入备注。

恢复数据

当你已经拥有MySQL备份文件,可以通过备份恢复的方式来实现数据回档,回档是基于数据备份 + 日志备份(binlog),可进行实时数据回档

可以通过以下方式将备份恢复到mysql实例:

  • 方式:备份数据会恢复到临时实例上,原实例不受影响。

注意事项

  • 回档功能与自动备份设置的备份周期时间和保留天数相关联,提供基于保留天数下且备份周期时间内数据备份 + 日志备份(binlog)的回档,备份周期设置请参见自动备份 MySQL 数据。为保证数据安全,自动备份设置的备份周期请设置为一周至少备份两次 MySQL。
  • <
  • 例如您设置的备份周期为周一、周四,备份保留天数为7天,则可选回档至保留天数内的任意一天。

物理备份恢复

  • 1.登陆控制台。

  • 2.在左侧菜单中选择【数据库服务】。

  • 3.选择需要备份的MySQL实例。

  • 4.在菜单中选择【备份恢复】。

  • 5.在【备份恢复】页面中选择【数据恢复】。

  • 6.设置回档时间后,点【确认】。

  • 7.提交成功后,返回实例列表页,单击实例名称后面的【临】可以看到临时实例的创建进度。

  • 8.临时实例创建完成后,你可以进行以下操作

    • “转正”:将临时实例转为独立于原实例的正式实例,供业务使用。

    • “删除”:删除该临时实例。

    • 说明:

    • 每个实例至多回档到3个临时实例。

    • 每个临时实例最多保留48小时,过期不处理将会被删除。

监控功能

为方便用户查看和掌握实例的运行信息,云数据库 MySQL 主从版提供了丰富的性能监控项。用户可登录控制台,进入实例管理页的【监控功能】查看。

注意事项

  • 单个实例的表数量超过100万后,可能会影响数据库监控,请合理规范表的数量,控制单个实例表数量不超过100万。

  • 支持的实例类型:MySQL主从版、只读实例

  • 说明:目前云数据库MySQL最长支持查看30天前的监控数据。

监控分类

云数据库 MySQL 包括资源监控、引擎监控(普通)、引擎监控(扩展)、部署监控4种监控类型,通过查看不同监控类型的指标,可快速、准确的了解实例性能及运行状况。

  • 资源监控:提供 CPU、内存、磁盘及网络相关的监控数据。

  • 引擎监控(普通):提供连接数、锁信息、热点表、慢查询等相关的监控数据,方便您诊断故障及性能优化。

  • 引擎监控(扩展):提供更为丰富引擎相关的监控指标,协助您发现数据库存在或潜在的健康问题。

  • 部署监控:提供主从延迟相关的监控指标。部署监控分为主机和备机:

  • 部署监控为主机:仅当监控实例为只读实例时,其对应复制相关的监控数据才有效,且 IO、SQL 线程才是启动的状态。

  • 部署监控为备机:高可用版的主实例默认为一主一从架构,因此,仅当监控实例为主实例时,其备机下复制相关的监控数据才有效。用于反映主实例与其隐藏从节点的延迟距离及时间,建议关注备机下相关的监控数据,若主实例存在故障时,其监控实例对应隐藏的从节点可快速提升为主实例。

监控粒度

实行自适应策略,不支持自定义选择

时间跨度

监控粒度

自适应说明

保留时长

(0h, 4h]

30 s

时间跨度在4小时内,监控粒度为30秒

90天

(4h, 2d]

1min

时间跨度超过4小时,但在2天内,监控粒度调整为1分钟

90天

(2d, 10d]

5min

时间跨度超过2天,但在10天内,监控粒度调整为5分钟

90天

(10d, 30d]

1h

时间跨度超过10天,但在30天内,监控粒度调整为1小时

90天

监控指标

指标中文名

指标英文名

单位

指标说明

每秒执行操作数

 

qps

次/秒

数据库每秒执行的 SQL 数(含 insert、select、update、delete、replace),QPS 指标主要体现云数据库MySQL实例的实际处理能力

每秒提交事务数

 

tps

次/秒

每秒提交的事务数量, 覆盖commit和rollback语句

慢查询数

 

slow_queries

查询时间超过 long_query_time 秒的查询的个数

全表扫描数

 

select_scan

次/秒

执行全表搜索查询的数量

查询数

 

select_count

次/秒

每秒查询数

更新数

 

com_update

次/秒

每秒更新数

删除数

 

com_delete

次/秒

每秒删除数

插入数

 

com_insert

次/秒

每秒插入数

覆盖数

 

com_replace

次/秒

每秒覆盖数

总请求数

 

queries

次/秒

所有执行的 SQL 语句,包括 set,show 等

当前打开连接数

 

threads_connected

当前打开的连接的数量

连接数利用率

 

connection_use_rate

%

当前打开连接数/最大连接数

查询使用率

 

query_rate

%

每秒执行操作数 QPS/推荐每秒操作数

发送数据量

 

bytes_sent

MB/秒

每秒发送的字节数

接收数据量

 

bytes_received

MB/秒

每秒接受的字节数

磁盘利用率

 

volume_rate

%

磁盘使用空间/实例购买空间

查询缓存命中率

 

qcache_hit_rate

%

查询缓存命中率

等待表锁次数

 

table_locks_waited

次/秒

不能立即获得的表的锁的次数

临时表数量

 

created_tmp_tables

次/秒

创建临时表的数量

innodb 缓存命中率

 

innodb_cache_hit_rate

%

Innodb 引擎的缓存命中率

innodb 缓存使用率

 

innodb_cache_use_rate

%

Innodb 引擎的缓存使用率

innodb 读磁盘数量

 

innodb_os_file_reads

次/秒

Innodb 引擎每秒读磁盘文件的次数

innodb 写磁盘数量

 

innodb_os_file_writes

次/秒

Innodb 引擎每秒写磁盘文件的次数

innodb fsync 数量

 

innodb_os_fsyncs

次/秒

Innodb 引擎每秒调用 fsync 函数次数

当前 Innodb 打开表的数量

 

innodb_num_open_files

Innodb 引擎当前打开表的数量

发送数据量

 

bytes_sent

字节/秒

每秒发送的字节数

接收数据量

 

bytes_received

字节/秒

每秒接收的字节数

CPU 利用率

 

cpu_use_rate

%

允许闲时超用,CPU 利用率可能大于100%

内存利用率

 

memory use rate

%

允许闲时超用,内存利用率可能大于100%

内存占用

 

memory_use

MB

允许闲时超用,实际内存占用可能大于购买规格

磁盘读延迟

 

disk_read_delay

%

磁盘读延迟率

磁盘写延迟

 

disk_write_delay

%

磁盘写延迟率

磁盘读IOPS

 

disk_read_io

B/s

磁盘读IOPS

磁盘写IOPS

 

disk_read_io_speed

B/s

磁盘写IOPS

磁盘读 IO数据量速率

 

disk_read_io_speed

MB/s

磁盘读 I/O数据量速率

磁盘写 I/O数据量速率

 

disk_write_io_speed

MB/s

磁盘写 I/O数据量速率

临时文件数量

 

created_tmp_files

次/秒

每秒创建临时文件的次数

已经打开的表数

 

opened_tables

实例维度

提交数

 

com_commit

次/秒

每秒提交次数

回滚数

 

com_rollback

次/秒

每秒回滚次数

已创建的线程数

 

threads_created

创建用来处理连接的线程数

运行的线程数

 

threads_running

激活的(非睡眠状态)线程数

最大连接数

 

max_connections

最大连接数

磁盘临时表数量

 

created_tmp_disk_tables

次/秒

每秒创建磁盘临时表的次数

读下一行请求数

 

handler_read_rnd_next

次/秒

每秒读取下一行的请求次数

内部回滚数

 

handler_rollback

次/秒

每秒事务被回滚的次数

内部提交数

 

handler_commit

次/秒

每秒事务提交的次数

InnoDB 总页数

 

innodb_buffer_pool_pages_total

Innodb 引擎占用内存总页数

InnoDB 逻辑读

 

innodb_buffer_pool_read_requests

次/秒

Innodb 引擎每秒已经完成的逻辑读请求次数

InnoDB 物理读

 

innodb_buffer_pool_reads

次/秒

Innodb 引擎每秒已经完成的物理读请求次数

InnoDB 读取量

 

innodb_data_read

Byte/秒

Innodb 引擎每秒已经完成读取数据的字节数

InnoDB 总读取量

 

innodb_data_reads

次/秒

Innodb 引擎每秒已经完成读取数据的次数

InnoDB 总写入量

 

innodb_data_writes

次/秒

Innodb 引擎每秒已经完成写数据的次数

InnoDB 写入量

 

innodb_data_written

Byte/秒

Innodb 引擎每秒已经完成写数据的字节数

InnoDB 行删除量

 

innodb_rows_deleted

次/秒

Innodb 引擎每秒删除的行数

InnoDB 行插入量

 

innodb_rows_inserted

次/秒

Innodb 引擎每秒插入的行数

InnoDB 行更新量

 

innodb_rows_updated

次/秒

Innodb 引擎每秒更新的行数

InnoDB 行读取量

 

innodb_rows_read

次/秒

Innodb 引擎每秒读取的行数

InnoDB 平均获取行锁时间

 

innodb_row_lock_time_avg

毫秒

Innodb 引擎行锁定的平均时长

InnoDB 等待行锁次数

 

innodb_row_lock_waits

次/秒

Innodb 引擎每秒等待行锁定的次数

等待表锁次数

 

table_locks_waited

次/秒

不能立即获得的表的锁的次数。如果该值较高,并且有性能问题,你应首先优化查询,然后拆分表或使用复制。

键缓存内未使用的块数量

 

key_blocks_unused

myisam 引擎未使用键缓存块的个数

键缓存内使用的块数量

 

key_blocks_used

myisam 引擎已使用键缓存块的个数

键缓存读取数据块次数

 

key_read_requests

次/秒

myisam 引擎每秒读取键缓存块的次数

硬盘读取数据块次数

 

key_reads

次/秒

myisam 引擎每秒读取硬盘数据块的次数

数据块写入键缓冲次数

 

key_write_requests

次/秒

myisam 引擎每秒写键缓存块的次数

数据块写入磁盘次数

 

key_writes

次/秒

myisam 引擎每秒写硬盘数据块的次数

主从延迟距离

 

master_slave_sync_distance

MB

主从 binlog 差距

主从延迟时间

 

seconds_behind_master

主从延迟时间

IO 线程状态

 

slave_io_running

状态值(0-Yes,1-No,2-Connecting)

IO 线程运行状态

SQL 线程状态

 

slave_sql_running

状态值(0-Yes,1-No)

SQL 线程运行状态

操作步骤

  • 1.登陆控制台。

  • 2.在左侧菜单中选择【数据库服务】。

  • 3.找到目标MySQL实例,点击实例ID。

  • 4.在顶部导航栏中选择【更多】-【监控功能】。

  • 5.可以在【监控指标】下拉菜单中选择监控指标。

    说明:

    功能区:区域缩放按钮,区域还原按钮,还原按钮,保存下载按钮。(功能区按钮的使用可以点击【使用说明】查看)

告警功能

使用场景

您可以创建告警用于在云数据库状态改变时触发警报并发送相关消息。创建的告警会根据每隔一段时间监控的指标相对于给定阈值的情况判断是否需要触发相关通知。
状态改变触发告警后,您可以及时进行相应的预防或补救措施。因此,合理地创建告警能帮助您提高应用程序的健壮性和可靠性。
当用户需要针对云数据库产品的某个状态发送告警时,需要先创建告警规则。告警规则包括名称、关联资源、告警触发条件和通知方式三个必要组成部分。每个告警规则是一系列告警触发条件的集合,告警触发条件是“或”关系,即一个条件满足,就会发送告警。告警将发送至告警规则关联的所有人,用户接收到告警后可以及时查看并采取相应措施。

注意:

在设置报警规则前请先设置报警接收联系人。

操作步骤

创建报警规则

  • 1.登陆控制台。

  • 2.在左侧菜单中选择【弹性计算】-【计算监控中心】。

  • 3.在左侧栏中选择【报警规则】。

  • 4.在报警规则页中,点击右上角的【创建报警规则】。

  • 5.在创建报警规则页面中,设置关联资源、触发条件、通知方式等。

    产品类型

    • I)分为云数据库MySQL-主机监控和云数据库MySQL-备机监控,分别适用于不用的实例类型。

    • II)部署类监控为主机:当监控实例为主实例时,由于其主实例不为任何实例的从实例,因此其主机下复制相关的监控数据无效,此时其 IO、SQL 线程状态为未启动。仅当监控实例为灾备实例和只读实例时,其对应复制相关的监控数据才有效,且 IO、SQL 线程才是启动的状态。

    • III)部署类监控为备机:高可用版的实例默认为一主一从架构,因此,仅当监控实例为主实例时,其备机下复制相关的监控数据才有效。用于反映主实与其隐藏从节点的延迟距离及时间,建议关注备机下相关的监控数据,若主实例存在故障时,其监控实例对应隐藏的从节点可快速提升为主实例。

    • IV)可通过选择对象所在的地域或搜索对象的实例名称找到需要关联的对象实例。

      说明:

      • 报警规则:指标、统计周期、比较关系、阈值、持续周期和告警周期组成的一个有语义的条件。例如:指标为磁盘使用率、比较关系为>、阈值为80%、统计周期为1分钟、持续周期为2个周期、告警周期为每5分钟告警一次。表示:每1分钟收集一次磁盘使用率数据,若某台云数据库的磁盘使用率连续两次大于80%则触发告警,如果一直持续,则会每5分钟发送一次告警。
      • 设置告警接收对象:

        • 1.选择需要通知的用户组。

        • 2.设置报警级别。

          Critiacl(严重):同时发送短信及邮件。

          Warning(警告):发送邮件。

  • 6.确认无误后,单击【确定】即可。

数据安全性

设置白名单

创建云数据库MySQL实例后,您需要设置实例的白名单,以允许外部设备访问该数据库实例。白名单在创建实例时可选择开启,不开启则默认关闭。默认的白名单只包含默认IP地址127.0.0.1,表示任何设备均无法访问该MySQL实例。
白名单可以让云数据库MySQL实例得到高级别的访问安全保护,建议您定期维护白名单。设置白名单不会影响MySQL实例的正常运行。

操作步骤

  • 1.登陆控制台。

  • 2.在左侧菜单中选择【数据库服务】。

  • 3.找到目标MySQL实例,点击实例ID。

  • 4.在基本信息页面找到【白名单】,点击按钮开启。

  • 5.在弹出的对话框中,填写需要访问该实例的IP地址或IP段,然后单击【确定】。

    • 若填写IP段,如192.168.0.0/24 表示允许从192.168.0.1到192.168.0.254的IP地址访问MySQL实例。
    • 若您需要添加多个IP地址或IP段,请用英文逗号隔开(逗号前后都不能有空格),例如192.168.0.1,172.16.213.9。

日志管理

您可以通过控制台查询实例的错误日志,帮助故障定位分析。

查看日志

  • 1.登陆控制台。

  • 2.在左侧菜单中选择【数据库服务】。

  • 3.选择需要备份的MySQL实例。

  • 4.在菜单中选择【更多】-【日志管理】。

  • 5.在【日志管理】页面选择查询【erro日志】,选择节点,点击【查看】。

下载日志

  • 1.登陆控制台。

  • 2.在左侧菜单中选择【数据库服务】。

  • 3.选择需要备份的MySQL实例。

  • 4.在菜单中选择【更多】-【日志管理】。

  • 5.点击【查看】查询日志。

  • 6.点击【下载】按钮,在弹出框中选择日期,点击【确定】即可将日至下载到本地。

标签管理

创建标签

如果您有大量实例,可以通过给实例绑定标签,对实例进行分类管理。

限制说明

最多可以添加19个标签,每个实例也最多能绑定19个标签。

操作步骤

  • 1.登陆控制台。

  • 2.在左侧菜单中选择【数据库服务】。

  • 3.选择需要备份的MySQL实例。

  • 4.在菜单中选择【更多】-【编辑标签】。

  • 5.在【添加新标签】前面的框中填入新的标签。

  • 6.点击【添加新标签】。

  • 7.在【候选标签】框中选择需要的标签,会自动进入到【已添加标签】框中。

  • 8.点击【确定】完成标签绑定。

删除标签

操作步骤

删除单个标签

  • 1.登陆控制台。

  • 2.在左侧菜单中选择【数据库服务】。

  • 3.选择需要备份的MySQL实例。

  • 4.在菜单中选择【更多】-【编辑标签】。

  • 5.在【候选标签】框中找到需要删除的标签,点击标签后面的X删除标签。

    说明:

    已与实例绑定的标签不能被删除。

  • 6.在确认删除提示框中点击【确认】。

批量解绑标签

  • 1.登陆控制台。

  • 2.在左侧菜单中选择【数据库服务】。

  • 3.选择需要备份的MySQL实例。

  • 4.在菜单中选择【更多】-【删除标签】。

  • 在提示框中点击【确认】解绑该实例所有标签。

性能白皮书

主从版

高性能型数据

测试站点: 北京E
测试客户端系统: ubuntu-16.04
测试客户端配置: 10C32G
测试命令样例: sysbench oltp_read_write.lua --tables=10 --table-size=2000000 --threads=300 --time=300 --max-requests=0 --report-interval=10 run
高性能型MySQL主从版(测试时长20min,工具:sysbench-1.0.17)
规格 测试类型 thread数 QPS TPS 连接数 iops
2C4G read_only 64 10898.28 681.14 800 3000
write_only 64 10781.06 1796.8
read_write 64 10198.33 598.98
4C8G read_only 64 23898.15 1498.34 1600
write_only 64 14545.45 2358.34
read_write 64 12598.34 634.34
8C16G read_only 128 39874.34 2654.56 3200
write_only 128 13092.32 2345.44
read_write 300 28234.34 1544.33
8C32G read_only 300 38987.34 2509.89 6400
write_only 300 16565.44 2676.73
read_write 300 20989.96 2454.56

高I/O型数据

测试站点: 北京E
测试客户端系统 ubuntu-16.04
测试客户端配置: 10C32G
测试命令样例: sysbench oltp_read_write.lua --tables=10 --table-size=2000000 --threads=300 --time=300 --max-requests=0 --report-interval=10 run
高I/O型MySQL主从版(测试时长20min,工具:sysbench-1.0.17)
规格 测试类型 thread数 QPS TPS 连接数 iops
2C4G read_only 64 9893.43 656.56 800 5000
write_only 64 10098.32 1545.67
read_write 64 7898.45 545.65
4C8G read_only 64 13075.6 817.22 1600
write_only 64 8818.14 1469.14
read_write 64 9768.33 455.45
8C16G read_only 128 30080.33 1819.33 3200
write_only 128 33341.93 5557.76
read_write 300 32992.18 1653.96
8C32G read_only 300 22840.33 1428.33 6400
write_only 300 24001.33 4003.29
read_write 300 29979.09 1512.33

购买须知

云关系型数据库服务等级协议

     云关系型数据库服务等级协议

常见问题

常见问题

Q1:哪些内容会占用我购买的RDS实例空间?

除了您正常的数据外,还有数据库实例正常运行所需要的空间,比如系统数据库、数据库回滚日志、重做日志、索引等。同时RDS for MySQL数据库实例产生的一天内的Binlog日志也会占用这个空间。这些文件会保证RDS实例正常稳定运行。

Q2:我的RDS实例是否会受其他用户实例影响?

不会,因为每个RDS实例与其他用户的RDS实例是独立的,并且有资源隔离,互不影响。

Q3:RDS空间组成说明?

1、数据空间:数据所占用的空间; 比如每建一张空表就会占用1M空间,随着数据的插入,空间会一直增长。

2、系统文件空间:包括共享表空间,错误日志文件等; RDS 默认推荐使用INNODB引擎,在安装初始化的时候,会生成一个共享表空间生成;用来存放数据库的REDO LOG和UNDO LOG,以及数据字典,是系统必需的。

Q4:解决无法连接实例问题

1、地域不同:

云主机实例和RDS实例位于不同的地域时,无法直接通过内网互通。

解决办法一:将原实例申请退款,重新购买。

解决办法二:通过外网互通。这种方式的性能、安全性、稳定性较差。

2、IP白名单设置有误:

  • 由于白名单设置中只有默认地址127.0.0.1。该地址表示不允许任何设备访问RDS实例。因此需在白名单中添加对端的IP地址,具体操作请参见设置白名单。
  • 白名单设置成了0.0.0.0,正确格式为0.0.0.0/0。
    说明:0.0.0.0/0表示允许任何设备访问RDS实例,请谨慎使用。

3、连接数已满:

连接数满通常是由于空闲连接过多或活动连接过多,具体原因及解决办法请参见RDS for MySQL 连接数满情况的处理

无法连接RDS实例的常见报错和解决办法

错误信息 原因 解决办法
  • ERROR 2003 (HY000): Can’t connect to MySQL server on ‘XXX’(10038或10060或110)
  • 无法连接到数据库:XXX
网络互通问题 点此查看
  • ERROR 1045 (HY000): #28000ip not in whitelist
  • ERROR 2801 (HY000): #RDS00ip not in whitelist, client ip is XXX
白名单设置问题 点此查看
  • ERROR 1045 (28000): Access denied for user ‘XXX’@’XXX’ (using password: YES或NO)
用户名或密码错误 点此查看

RDS for MySQL 连接数满情况的处理

连接数满会导致客户端无法连接到RDS for MySQL数据库。

连接数满通常是两种原因导致的:

  • 空闲连接过多。
  • 活动连接过多。

空闲连接过多

原因:

  • 应用使用长连接模式:对于长连接模式(比如Java应用),应用侧应该配置连接池。连接池的初始连接数设置过高,应用启动后建立多个到RDS实例空闲连接。
  • 应用使用短连接模式:对于短连接模式(比如PHP应用),出现大量的空闲连接说明应用没有在查询执行完毕后显式的关闭连接。

解决方法:

  • 通过kill命令来终止当前空闲会话。
  • 修改应用,长连接模式需要启用连接池的复用功能(建议也启用连接检测功能)。
  • 修改应用,短连接模式需要在代码中修改查询结束后调用关闭连接的方法。

ERROR 2003 (HY000): Can’t connect to MySQL server on ‘XXX’(10038或10060或110)

连接RDS for MySQL或MariaDB TX实例时,提示以下其中一种错误信息:

  • ERROR 2003 (HY000): Can’t connect to MySQL server on ‘XXX’(10038或10060或110)
  • 无法连接到数据库:XXX

云主机通过内网无法访问RDS的解决办法:

  1. 检查云主机和RDS是否位于不同的地域。
  2. 检查云主机的内网IP地址是否已添加到RDS的白名单。如果未添加,请设置白名单。

云主机以外的设备无法访问RDS的解决办法:

云主机以外的设备访问RDS时,只能通过外网连接。如果连接失败,解决办法如下:

  1. 检查是否已设置RDS白名单。如果未设置,请设置白名单。
  2. 如果您已设置白名单,那么连接失败很可能是因为您在白名单中添加的设备公网IP地址并非设备真正的出口IP地址。原因如下:
    • 公网IP地址不固定,可能会变动。
    • IP地址查询工具或网站查询的公网IP地址不准确。
    • 关于确认设备公网IP地址的方法,请参见定位本地IP。

ERROR 1045 (HY000): #28000ip not in whitelist或ERROR 2801 (HY000): #RDS00ip not in whitelist

问题描述:

连接RDS实例时,提示以下其中一种错误信息:

  • ERROR 1045 (HY000): #28000ip not in whitelist
  • ERROR 2801 (HY000): #RDS00ip not in whitelist, client ip is XXX

原因和解决办法

  • 白名单中只有默认地址127.0.0.1。该地址表示不允许任何设备访问RDS实例。需在白名单中添加设备的IP地址,具体操作请参见设置白名单。
  • 白名单设置成了0.0.0.0。正确格式为0.0.0.0/0
  • 您在白名单中添加的设备公网IP地址可能并非设备真正的出口IP地址。原因如下:
    • 公网IP地址不固定,可能会变动。
    • IP地址查询工具或网站查询的公网IP地址不准确。

解决办法请参见定位本地IP

ERROR 1045 (28000): Access denied for user ‘XXX’@’XXX’

问题描述:

连接RDS for MySQL实例时,提示以下错误信息:

ERROR 1045 (28000): Access denied for user ‘XXX’@’XXX’ (using password: YES)

原因和解决办法:

一般都是因为用户名或密码错误,请检查连接信息中的用户名和密码。

  • RDS不提供root账号,您需要自行创建账号。具体操作请参见创建账号。
  • 如果密码中包含特殊字符,可能需要加上单引号,例如,在命令中使用-p '密码'。
  • 如果忘记密码,您可以在控制台的账号管理页面修改密码。
    修改密码后,新密码可能需要数分钟才生效。

类似的错误信息:

连接RDS for MySQL实例时,提示以下错误信息:

ERROR 1045 (28000): Access denied for user ‘XXX’@’XXX’ (using password: NO)

原因:连接信息中没有填写密码。

Q5:能否在云主机上创建RDS从库?

目前不支持在云主机上搭建从库。

原因如下:

  1. 目前RDS数据库是主备HA架构,不开放数据库文件的配置信息及权限给客户端。
  2. 当主库发生异常的时候,从库会在30秒内进行切换,成为主库,这时会导致serverid发生改变。

Q6:解决CPU、内存、空间、IOPS使用率偏高的问题

CPU使用率高请参考RDS for MySQL CPU使用率高的原因和解决方法

内存使用率高请参考MySQL 实际内存分配情况介绍

IOPS使用率高请参考MySQL IOPS 使用率高的原因和解决方法

Q7:RDS for MySQL是否支持只读实例、读写分离

  • RDS for MySQL目前仅主从版支持只读实例的购买。
  • 目前RDS实例不提供读写分离功能,有需要扩展读性能可以在主从版创建只读实例。

RDS for MySQL CPU使用率高的原因和解决方法

RDS for MySQL使用过程中,会遇到CPU使用率过高甚至达到100%的情况。本文将介绍造成该状况的常见原因以及解决方法,并通过CPU使用率为100%的典型场景,来分析引起该状况的原因及其相应的解决方案。

常见原因:

系统执行应用提交查询(包括数据修改操作)时需要大量的逻辑读(逻辑IO,执行查询所需访问的表的数据行数),所以系统需要消耗大量的CPU资源以维护从存储系统读取到内存中的数据一致性。

说明:大量行锁冲突,行锁等待或后台任务也有可能会导致实例的CPU使用率过高,但这些情况出现的概率低,本文不做讨论。

下文通过一个简化对的模型来说明系统资源、语句执行成本以及QPS(Query Per Second每秒执行的查询数)之间的关系:

条件:应用模型恒定(应用没有修改)。

avg_lgc_io:执行每条查询需要的平均逻辑 IO。

total_lgc_io:实例的 CPU 资源在单位时间内能够处理的逻辑 IO 总量。

关系公式:total_lgc_io = avg_lgc_io x QPS -- 单位时间 CPU 资源 = 查询执行的平均成本 x 单位时间执行的查询数量。

避免出现CPU使用率达到100%的一般原则:

  • 按时关注CPU使用率监控,实例CPU使用率保证一定的冗余度。
  • 应用设计和开发过程中,要考虑查询的优化,遵守MySQL优化的一般优化原则,降低查询的逻辑IO,提高应用可扩展性。
  • 新功能、新模块上线前,要使用生产环境数据进行压力测试。

典型示例:

以CPU使用率为100%的典型场景为例,下文介绍了两个引起该状况的原因及其解决方案,即应用负载(QPS)高和查询执行成本(查询访问表数据行数avg_lgc_io)高。其中,由于查询执行成本高(查询访问表数据行数多)而导致实例CPU使用率高是MySQL的常见问题。

1、应用负载(QPS)高

现象描述:

  • 特征:实例的QPS(每秒执行的查询次数)高,查询比较简单、执行效率高、优化余地小。
  • 表现:没有出现慢查询(或者慢查询不是主要原因),且QPS和CPU使用率曲线变化吻合。
  • 常见场景:该状况常见于应用优化过的在线事务交易系统(例如订单系统)、高读取率的热门Web网站应用、第三方压力工具测试(例如 Sysbench)等。

解决方案:

  • 对于由应用负载高导致的CPU使用率高的状况,使用SQL查询进行优化的余地不大,建议您从应用架构、实例规格等方面来解决,例如:
    • 升级实例规格,增加CPU资源。
    • 增加只读实例,将对数据一致性不敏感的查询(例如商品种类查询、列车车次查询)转移到只读实例上,分担主实例压力。
    • 使用首云Redis产品,尽量从缓存中获取常用的查询结果,减轻RDS实例的压力。
  • 对于查询数据比较静态、查询重复度高、查询结果集小于1MB 的应用,考虑开启查询缓存(Query Cache)。
    注意:能否从开启查询缓存(Query Cache)中获益需要经过测试,具体设置请参见RDS for MySQL 查询缓存(Query Cache)的设置和使用
  • 定期归档历史数据、采用分库分表或者分区的方式减小查询访问的数据量。
  • 尽量优化查询,减少查询的执行成本(逻辑IO,执行需要访问的表数据行数),提高应用可扩展性。

2、查询执行成本(查询访问表数据行数avg_lgc_io)高

现象描述:

  • 特征:实例的QPS(每秒执行的查询次数)不高;查询执行效率低、执行时需要扫描大量表中数据、优化余地大。
  • 表现:存在慢查询,QPS和CPU使用率曲线变化不吻合。
  • 原因分析:由于查询执行效率低,为获得预期的结果即需要访问大量的数据(平均逻辑IO高),在 QPS并不高的情况下(例如网站访问量不大),就会导致实例的CPU使用率高。

解决方案:

解决该状况的原则是:定位效率低的查询、优化查询的执行效率、降低查询执行的成本。

操作步骤:

a)通过如下方式定位效率低的查询:

通过show processlist;show full processlist; 命令查看当前执行的查询,如下图所示。

对于查询时间长、运行状态(state列)是sending data、copying to tmp table、copying to tmp table on disk、sorting result、using filesort等都可能是有性能问题的查询(SQL)。

注意:

  • 若在QPS高导致CPU使用率高的场景中,查询执行时间通常比较短,show processlist; 命令或实例会话中可能会不容易捕捉到当前执行的查询。您可以执行命令 explain select b. * from perf_test_no_idx_01 a, perf_test_no_idx_02 b where a.created_on >=2015-01-01 and a.detail –b.detail 进行查询;
  • 您可以通过执行类似kill 101031643; 的命令来终止长时间执行的会话,终止会话请参见RDS for MySQL如何终止会话。关于长时间执行会话的管理,请参见RDS for MySQL管理长时间运行查询

MySQL 实际内存分配情况介绍

RDS的内存是重要的性能参数,常常出现由于异常的 SQL 请求以及待优化的数据库导致内存利用率升高的情况,严重时还会出现由于 OOM 导致实例发生 HA 切换的情况。

MySQL 的内存大体可以分为共享内存和 session 私有内存两部分,下面将详细介绍各部分的构成。

1、共享内存

执行如下命令,即可查询示例的共享内存分配情况:

show variables where variable_name in ( 'innodb_buffer_pool_size','innodb_log_buffer_size','innodb_additional_mem_pool_size','key_buffer_size'
,'query_cache_size' );

如下是内存规格为 240 M 的 RDS 实例的共享内存分配情况的查询结果:

+---------------------------------+-----------------+
| Variable_name                                 | Value                |
+---------------------------------+-----------------+
| innodb_additional_mem_pool_size    | 2097152    |
| innodb_buffer_pool_size        | 67108864    |
| innodb_log_buffer_size        | 1048576    |
| key_buffer_size        | 16777216    |
| query_cache_size        | 0    |
+---------------------------------+-----------------+

参数说明:

  • innodb_buffer_pool
    该部分缓存是 Innodb 引擎重要的缓存区域,是通过内存来弥补物理数据文件的重要手段,在 RDS 上会采用实例规格配置的 75% 作为该部分大小。其中主要包含数据页、索引页、undo 页、insert buffer、自适应哈希索引、锁信息以及数据字典等信息。在进行 SQL 读和写的操作时,首先并不是对物理数据文件操作,而是先对 buffer_pool 进行操作,然后再通过 checkpoint 等机制写回数据文件。该空间的优点是可以提升数据库的性能、加快 SQL 运行速度,缺点是故障恢复速度较慢。
  • innodb_log_buffer
    该部分主要存放 redo log 的信息,在 RDS 上会设置 1 M 的大小。InnoDB 会首先将 redo log 写在这里,然后按照一定频率将其刷新回重做日志文件中。该空间不需要太大,因为一般情况下该部分缓存会以较快频率刷新至 redo log(Master Thread 会每秒刷新、事务提交时会刷新、其空间少于 1/2 时同样会刷新)。
  • innodb_additional_mem_pool
    该部分主要存放 InnoDB 内的一些数据结构,在 RDS 中统一设置为 2 M。通常是在 buffer_pool 中申请内存的时候还需要在额外内存中申请空间存储该对象的结构信息。该大小主要与表数量有关,表数量越大需要更大的空间。
  • key_buffer
    该部分是 MyISAM 表的重要缓存区域,所有实例统一为 16 M。该部分主要存放 MyISAM 表的键。MyISAM 表不同于 InnoDB 表,其缓存的索引缓存是放在 key_buffer 中的,而数据缓存则存储于操作系统的内存中。RDS 的系统是 MyISAM 引擎的,因此在 RDS 中是给予该部分一定量的空间的。
  • query_cache
    该部分是对查询结果做缓存以减少解析 SQL 和执行 SQL 的花销,在 RDS 上关闭了该部分的缓存。主要适合于读多写少的应用场景,因为它是按照 SQL 语句的 hash 值进行缓存的,当表数据发生变化后即失效。

2、Session 私有内存

共享内存中介绍的内存空间是实例创建时即分配的内存空间,并且是所有连接共享的。而出现 OOM 异常的实例都是由于下面各个连接私有的内存造成的。

执行如下命令,查询示例的 session 私有内存分配情况:

show variables where variable_name in ( 'read_buffer_size','read_rnd_buffer_size','sort_buffer_size','join_buffer_size','binlog_cache_size','tmp_table_size' );

查询结果如下(如下为测试实例配置):

+---------------------------------+-----------------+
| Variable_name                                 | Value                |
+---------------------------------+-----------------+
| binlog_cache_size    | 262144    |
| join_buffer_size        | 262144    |
| read_buffer_size        | 262144    |
| read_rnd_buffer_size        | 262144    |
| sort_buffer_size        | 262144    |
| tmp_table_size        | 262144    |
+---------------------------------+-----------------+
共返回 6 行记录,花费 356.54 ms.

参数说明:

  • read_buffer&read_rnd_buffer
    分别存放了对顺序和随机扫描(例如按照排序的顺序访问)的缓存,RDS 给每个 session 设置 256 K 的大小。当 thread 进行顺序或随机扫描数据时会首先扫描该 buffer 空间以避免更多的物理读。
  • sort_buffer
    需要执行 order by 和 group by 的 SQL 都会分配 sort_buffer,用于存储排序的中间结果,在 RDS 上设置 256 K。在排序过程中,若存储量大于 sort_buffer_size,则会在磁盘生成临时表以完成操作。在 Linux 系统中,当分配空间大于 2 M 时会使用 mmap() 而不是 malloc() 来进行内存分配,导致效率降低。
    [Err] 1114 - The table '/home/mysql/data3081/tmp/#sql_6197_2' is full
  • join_buffer
    MySQL 仅支持 nest loop 的 join 算法,RDS 设置 256 K 的大小。处理逻辑是驱动表的一行和非驱动表联合查找,这时就可以将非驱动表放入 join_buffer,不需要访问拥有并发保护机制的 buffer_pool。
  • binlog_cache
    该区域用来缓存该 thread 的 binlog 日志,RDS 设置 256 K 的大小。在一个事务还没有 commit 之前会先将其日志存储于 binlog_cache 中,等到事务 commit 后会将其 binlog 刷回磁盘上的 binlog 文件以持久化。
  • tmp_table
    不同于上面各个 session 层次的 buffer,这个参数可以在控制台上修改。该参数是指用户内存临时表的大小,如果该 thread 创建的临时表超过它设置的大小会把临时表转换为磁盘上的一张 MyISAM 临时表。如果用户在执行事务时遇到类似如下这样的错误,可以考虑增大 tmp_table 的值。
    [Err] 1114 - The table '/home/mysql/data3081/tmp/#sql_6197_2' is full

MySQL IOPS 使用率高的原因和解决方法

MySQL实例在日常使用中会出现实例 IOPS 使用率高的情况,本文将介绍造成该状况的主要原因和解决方法。

原因:

  • 实例内存满足不了缓存数据或排序等需要,导致产生大量的物理IO。
  • 查询执行效率低,扫描过多数据行。

解决方法:

您可以通过终止问题查询来解决IOPS使用率高的问题。

终止问题查询

您可以通过命令查询和终止问题查询,建议您将物理读(Physical_sync_read 和 Physical_async_read)高的查询终止掉。

注意:

  • RDS 实例在连接数打满的情况下,无法通过 DMS 或者 MySQL 命令行工具连接登录实例。
  • 如果无法通过 DMS 或 MySQL 命令行工具连接,建议您先在 RDS 控制台的参数设置中将 wait_timeout 参数(单位秒)设置为比较小的值(比如 60),让 RDS 实例主动关闭空闲时间超过 60 秒的连接,以便稍后可以通过 DMS 或者 MySQL 命令行工具连接访问实例。

操作步骤:

1.通过 MySQL 命令行工具连接实例。

2.通过如下方式,查看会话情况,来确定问题会话。

通过执行 show processlist; 命令查询,结果如下图所示。

若当前执行会话比较多,通过执行 show full processlist; 命令来查询,结果如下图所示。

3.执行 kill <Id> 命令,终止相关会话。

参数说明:Id 是上述步骤查询结果中的 Id 列值。

RDS for MySQL管理长时间执行的查询

出现原因:

在使用RDS for MySQL的过程中,由于某些原因,例如被SQL注入、SQL执行效率较差、DDL语句引起表元数据锁等待等等,会出现运行时间很长的查询。

  • 由于SQL执行效率差而导致的长时间查询。
  • 由于被SQL注入而导致的长时间查询。

长时间执行的查询带来的问题:

通常来说,除非是BI/报表类查询,否则长时间执行的查询对于应用缺乏意义,而且会消耗系统资源,比如大量长时间查询可能会引起CPU、IOPS和连接数过高等问题,导致系统不稳定。

如何避免长时间执行的查询

应用方面应注意增加防止SQL注入的保护措施。

在新功能模块上线前,进行压力测试,避免执行效率很差的SQL大量执行。

尽量在业务低峰期进行索引创建删除、表结构修改、表维护和表删除操作。

RDS for MySQL如何终止会话

1.通过MySQL命令行工具连接实例。

提示:RDS实例在连接数已满的情况下,是无法通过MySQL命令行工具连接实例的。如果无法通过DMS或MySQL命令行工具连接,建议先在控制台的参数设置中将wait_timeout参数(单位秒)设置为比较小的值(比如60),让RDS实例主动关闭空闲时间超过60秒的连接,以便稍后可以通过MySQL命令行工具连接访问实例。

2.通过如下命令查看当前会话情况,记录想要结束的会话id。

show processlist;

系统显示类似如下:

3.执行如下命令,结束会话。

Kill [$ID];

注:[$ID]为上一步记录的id。

系统显示类似如下:

RDS for MySQL查询缓存(Query Cache)的设置和使用

1.功能和适用范围

功能:

  • 降低CPU使用率。
  • 降低IOPS使用率(某些情况下)。
  • 减少查询响应时间,提高系统的吞吐量。

使用范围:

  • 表数据修改不频繁、数据较静态。
  • 查询(Select)重复度高。
  • 查询结果集小于 1 MB。

说明:查询缓存并不一定带来性能上的提升,在某些情况下(比如查询数量大,但重复的查询很少)开启查询缓存会带来性能的下降。

2.原理

RDS for MySQL对来自客户端的查询(Select)进行Hash计算得到该查询的Hash值,通过该Hash值到查询缓存中匹配该查询的结果。

如果匹配(命中),则将查询的结果集直接返回给客户端,不必再解析、执行查询。

如果没有匹配(命中),则将Hash值和结果集保存在查询缓存中,以便以后使用。

查询涉及的任何一个表中数据发生变化,RDS for MySQL将查询缓存中所有与该表相关的查询结果集全部释放(删除)。

3.限制

  • 查询必须严格一致(大小写、空格、使用的数据库、协议版本、字符集等必须一致)才可以命中,否则视为不同查询。
  • 不缓存查询中的子查询结果集,仅缓存查询最终结果集。
  • 不缓存存储函数(Stored Function)、存储过程(Stored Procedure)、触发器(Trigger)、事件(Event)中的查询。
  • 不缓存含有每次执行结果变化的函数的查询,比如now()、curdate()、last_insert_id()、rand()等。
  • 不缓存对mysql、information_schema、performance_schema系统数据库表的查询。
  • 不缓存使用临时表的查询。
  • 不缓存产生告警(Warnings)的查询。
  • 不缓存Select … lock in share mode、Select … for update、 Select * from … where autoincrement_col is NULL类型的查询。
  • 不缓存使用用户定义变量的查询。
  • 不缓存使用Hint - SQL_NO_CACHE的查询。

4.设置

参数设置

控制台参数设置如下。

query_cache_type:是否开启查询缓存功能。

取值为 0 :关闭查询功能。

取值为 1 :开启查询缓存功能,但不缓存Select SQL_NO_CACHE开头的查询。

取值为 2 :开启查询缓存功能,但仅缓存Select SQL_CACHE开头的查询。

说明:修改query_cache_type需要重启实例(修改后实例会自动重启)。

5.验证效果

  • 控制台中查看CPU使用率
  • SQL命令
    可以通过如下命令来获取查询缓存的使用状态。
    show global status like ‘Qca%’;
    Qcache_hits:查询缓存命中次数。
    Qcache_inserts:将查询和结果集写入到查询缓存中的次数。
    Qcache_not_cached:不可以缓存的查询次数。
    Qcache_queries_in_cache:查询缓存中缓存的查询量。

RDS for MySQL物理备份文件恢复到自建数据库

开源软件 Percona Xtrabackup 可以用于对数据库进行备份恢复,您可以使用该软件将云数 据库 MySQL 的备份文件恢复到自建数据库中,本文将介绍详细的操作步骤。

注意事项

•  本文使用 Linux7 的操作系统为例进行演示。

•  操作系统中已安装数据恢复工具 Percona XtraBackup,您可以从 Percona XtraBackup 官网下载安装。

•  MySQL 5.6 及之前的版本需要安装 Percona XtraBackup 2.3,安装指导请参见官方 文档 Percona XtraBackup 2.3。

•  MySQL 5.7 版本需要安装 Percona XtraBackup 2.4,安装指导请参见官方文档 Percona XtraBackup 2.4。

•  MySQL 8.0 版本需要安装 Percona XtraBackup 8.0,安装指导请参见官方文档 Percona XtraBackup 8.0。

•  本地 MySQL 数据库安装在 64 位的 Linux 系统中,且与云数据库 MySQL 版的版本 相同。

•  在 Linux 服务器上,安装解压工具 qpress。

      wget -d --user-agent="Mozilla/5.0 (Windows NT x.y; rv:10.0) Gecko/20100101
 
      Firefox/10.0" http://www.quicklz.com/qpress-11-linux-x64.tar
 
      tar xvf qpress-11-linux-x64.tar
 
      cp qpress /usr/bin

说明:由于软件限制,目前只支持将云数据库MySQL的备份文件恢复到安装在linux系统中的自建MySQL数据库中。

操作步骤:

1.下载数据备份。

2.执行如下命令,解压已下载的数据备份文件。

说明:本文以自定义路径/home/mysql/data 为例,您可以根据实际情况将其替换成实际路 径。

目前物理备份集文件格式为:

MySQL 5.6、5.7 备份文件格式为 tar 压缩包 (.tar.gz 后缀)

MySQL 8.0 备份文件格式为 xb 文件(.xb 后缀)

对于 tar 压缩包 (.tar.gz 后缀),使用命令:

tar -izxvf <数据备份文件名>.tar.gz -C /home/mysql/data

对于 xb 文件(.xb 后缀),使用命令:

cat mysql_data_backup.xb | xbstream -x -v -C /home/mysql/data

xtrabackup --decompress --remove-original --target-dir=/home/mysql/data

说明:-C:指定文件要解压到的目录。可选参数,若不指定就解压到当前目录。

3.执行如下命令,查询解压后生成的文件。

ls -l /home/mysql/data

命令执行成功后,系统会返回如下结果,其中蓝色字体为生成备份文件时 RDS 实例所包含 的数据库。

4.执行如下命令,恢复解压好的备份文件。

MySQL 5.6、5.7:

Innobackupex --defaults-file=/home/mysql/data/backup-my.cnf --apply-log /home/mysql/data

MySQL 8.0:

xtrabackup --prepare --target-dir=/home/mysql/data

若系统返回如下类似结果,则说明备份文件已成功恢复到本地数据库。

说明:请确保您的Percona XtraBackup版本正确。

5.为避免版本问题,需修改backup-my.cnf参数,具体操作步骤如下。

a)执行如下命令,以文本方式编辑backup-my.cnf文件。

vi /home/mysql/data/backup-my.cnf

b)自建数据库不支持如下参数,需要注释掉。

#innodb_log_checksum_algorithm

#innodb_fast_checksum

#innodb_log_block_size

#innodb_doublewrite_file

#rds_encrypt_data

#innodb_encrypt_algorithm

#redo_log_version

#master_key_id

#server_uuid

c)按Esc键,然后输入:wq并回车进行保存。

6.执行如下命令,修改文件属主,并确定文件所属为MySQL用户。

chown -R mysql:mysql /home/mysql/data

7.执行如下命令,启动MySQL进程。

mysqld_safe --defaults-file=/home/mysql/data/backup-my.cnf --user=mysql -- datadir=/home/mysql/data &

说明:

  • 如果提示没有找到mysqld_safe,请确认您的数据库引擎是否为MySQL。
  • 建议您参考官方文档重置root账户的密码。

8.执行如下命令,登录MySQL数据库以验证进程启动成功。

mysql -uroot -p<数据库密码>

若系统返回如下结果,进程启动成功,则说明已成功执行参数注释和修改文件属主。

RDS for MySQL各timeout参数的设置

RDS for MySQL提供了很多的timeout参数供用户设置,本文详细介绍下这些timeout参数的含义。

参数名 说明
connect_timeout 该参数控制与服务器建立连接的时候等待三次握手成功的超时时间,该参数主要是对于网络质量较差导致连接超时,建议外网访问波动较大可以提高该参数。
delayed_insert_timeout 指INSERT语句执行的超时时间。
innodb_lock_wait_timeout 指锁等待的超时时间,该锁不同于死锁是指正常一个事务等待另外一个事务的S锁或者X锁的超时时间。
innodb_rollback_on_timeout 当事务超时超过该参数后即会回滚,如果设置为OFF即只回滚事务的最后一个请求。
interactive_timeout mysql在关闭一个交互式/非交互式的连接之前所要等待的时间。建议不需要设置太长的时候,否则会占用实例的连接数资源。
net_read_timeout
net_write_timeout
指服务器端等待客户端发送的网络包和发送给客户端网络包的超时时间,这两个参数是对TCP/IP链接并且是Activity状态下的线程才有效的参数。

max_connections参数的设置

max_connections 修改后,规格升级也会升级参数值,并覆盖原有参数值,不建议客户自己修改这个值。


7x24服务热线
价格计算器
7*24小时服务热线
400-810-5300 咨询/购买/备案/建议&投诉
5*8小时售前服务热线
400-810-7006
扫描上方二维码
微信咨询