产品简介

产品概述

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

产品优势

便宜易用

提供灵活的计费方式

提供按需付费(按小时计费)的计费方式,用完可立即释放实例,节省费用。

即开即用

您无需购置数据库服务器硬件或软件,节省大量成本。
开始使用RDS,只需通过控制台创建指定规格的RDS实例,在数分钟内即可生成RDS实例。

按需变配

在业务初期,您可以购买小规格的RDS实例来应对业务压力。随着数据库压力和数据存储量的增加,可以升级实例规格。业务回到低峰时,可以降低实例规格,节省费用。

透明兼容

RDS与原生数据库引擎的使用方法一致,您无需二次学习,上手即用。

管理便捷

首云负责RDS的日常维护和管理,包括但不限于软硬件故障处理、数据库补丁更新等工作,保障RDS的正常运转。
您也可以通过首云控制台或者通过PHPmyAdmin自行完成数据库的管理操作。

易于使用

可以利用首云管理控制台、RDS 命令行界面在几分钟之内访问生产就绪型关系数据库的功能。

高性能

两种版本保障高性能RDS服务

系列 说明
主从版
  • 默认提供读写分离,读请求自动路由到从节点,写请求路由到主节点。提供更多的qps和并发数。
  • 服务实例资源高度隔离,独享内存和计算能力。
  • 高内网带宽,保障服务能够持续提供更高的qps、更低的延迟。
集群版
  • 多主架构:真正的多点读写的集群,在任何时候读写数据,都是新的。
  • 同步复制:集群不同节点之间数据同步,没有延迟,在数据库挂掉之后,数据不会丢失。
  • 并发复制:从节点在APPLY数据时,支持并行执行,有更好的性能表现。
  • 故障切换:在出现数据库故障时,因为支持多点写入,切的容易。

强大的硬件保障性能

高性能型(SSD)存储

RDS 高性能型存储是 SSD 型存储选项,可提供3000至5000 IOPS。适用于对数据库IO性能要求较高的业务场景。

多副本冗余

RDS服务器中的数据采用多副本,数据备份存储在OSS上。

高可用链路

连接器提供高可用链路,防范单点故障,保障业务不受影响。

高可用

数据备份

RDS 提供手动、自动备份的机制。您可以根据自身业务特点随时发起备份。

数据恢复

支持按备份集冷恢复。在大多数场景下,您可以将OSS上的数据恢复到RDS主实例,从而完成数据回溯。
支持数据热恢复,可以恢复到任意时间点。

自动容灾

自动侦测服务故障,发生故障时能够在秒级完成故障转移,用户端不需要做任何修改。

高安全

访问控制

您可以为每个实例定义IP白名单,只有白名单中的IP地址所属的设备才能访问RDS。账号之间实现资源隔离,每个账号只能查看和操作自己的数据库。

产品系列

云数据库RDS实例包括两个系列:主从版和集群版。

系列对比

系列 说明 支持版本
主从版
  • 采用一主一从的经典高可用架构,基于半同步复制技术实现,从节点可作为只读实例,提供更高的性能。
MySQL 5.7
集群版
  • 特殊的三节点multi-master方式集群,三个节点都可以作为主节点,当有客户端要写入或者读取数据时,任意连接哪个实例读到的数据是相同的,写入某一个节点之后,集群自己会将新数据同步到其它节点。
  • 数据方面不共享,能保持强一致性、完整性。
  • 主从读写切换高度优雅,在不影响用户的情况下,可以进行离线维护等工作。
MySQL 5.6

集群版架构

RDS集群版采用3节点,以multi-master方式实现,纵向结构采用中间件累加,保障负载均衡、读写分离等需求。

中间层分为三层,用于实现负载均衡、后端透明、读写分离。
负载均衡器是在创建集群实例时自动创建的,采用主备模式,由心跳机制保障服务正常,解决后端服务器出现故障或者本身自己出现故障。以轮询权重等同的方式提供4层负载均衡服务,保障在高并发的情况下,集群仍然能够保障高性能,高可用。
>对于读写分离,采用plugin的方式提供给客户,根据自己的需求设定。当开启以后,读写分离器设置multi-master集群节点的角色,采用第一个节点为rw节点,其他两节点为读节点,权重都是1。

典型应用

电商 高并发高性能场景

提供稳定、高性能、安全可靠的数据库服务

多写多读架构针对电商行业秒杀场景进行专项优化,解决热点数据的高并发更新性能瓶颈,性能得到了很大的提升。通过高安全模式,内置SQL注入检测模块,实时拦截风险SQL,保护数据安全。

金融 高安全高冗余性场景

数据强一致性保证,满足金融级高安全高冗余需求

RDS集群版是以三节点multi-master的方式设计的一套多主集群。每个节点都可以作为主节点,是真正的多点读写高冗余集群,保证业务数据的强一致性、完整性,充分满足金融级合规可靠性要求。

WEB 高可靠性场景

开箱即用,高性价比数据库产品

利用读写分离模块的动态分离能力,分担主实例的读写压力。满足WEB类的业务需求。

游戏 行业高可用场景

高稳定性,随时闪回任意时间点

对计算资源的弹性伸缩能力,赋予您更高的生产力,分钟级部署游戏分区数据库;搭配高安全链路,实现全自动无感知容灾切换,业务稳定性先人一步。

快速入门

链路类型说明

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

默认链路

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

拓扑图

连接器链路

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

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

拓扑图

创建云数据库MySQL实例

  • 1.登陆控制台。

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

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

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

  • 5.设置以下参数。

    虚拟数据中心 实例所在的可用区和资源组。购买后无法更换地域。
    请根据目标用户所在的地理位置就近选择地域,提升用户访问速度。
    请确保RDS实例与需要连接的云主机实例创建于同一个地域,否则它们无法通过内网互通,只能通过外网互通,无法发挥最佳性能。
    计费方式 实例的计费方式为按需计费。
    数据库类型 实例的数据库类型为MySQL。
    引擎版本 指MySQL的版本,当前支持的版本有MySQL 5.6.25、5.7.24
    架构类型 MySQ5.6.25实例的架构类型为集群版;
    MySQ5.7.24实例的架构类型为主从版。
    链路类型 指实例的网络类型,分为默认链路和连接器链路.
    默认链路:用户需要自己选择需要的内网网段,系统会自动分配此网段未占用的IP地址给数据库实例使用。
    连接器链路:连接器提供高可用链路,防范单点故障,保障业务不受影响。没有连接器时需要创建连接器。目前连接器不收费。
    计算类型 实例的计算类型有高性能型和高I/0型。
    说明:不同的数据中心支持的计算类型不同。目前支持高I/O型的数据中心有:中国大陆-广州-可用区A,中国大陆-上海-可用区A。
    实例规格 每种规格对应不同的CPU核数、内存、最大连接数和最大IOPS。有以下选择:
    集群版:
    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块硬盘。
    说明:不同数据中心可选的存储类型不同。目前支持超高性能型的数据中心有:中国大陆-广州-可用区A,中国大陆-上海-可用区A。
    实例名称 支持设置实例名称,可选择创建后设置或立即命名。
    如果选择创建后设置将生成一个默认名称。
  • 6.检查当前配置,确认配置和费用。

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

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

用户手册

总览

MySQL
功能列表 功能说明
模式 集群模式/主从模式
服务开通 创建MySQL实例
终止实例 删除数据库实例
基本信息 显示当前数据库基本信息内容
配置变更 可变更数据库计算规格
存储扩容 可扩容当前数据库存储大小
日志管理 查看当前数据库节点日志信息
用户权限 管理和创建数据库账号
实时信息 查看当前数据库节点的数据库实时状态
备份恢复 提供数据库备份功能,恢复功能,提供手动备份,自动备份,备份策略管理等功能
连接数据库 通过数据库管理工具可以连接当前数据库实例
标签管理 给实例添加标签方便分类管理。

实例管理

变更配置

变配方式

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

变更项

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

说明:

  • 增加存储空间时不能超过该规格的存储空间限制,存储大小可选范围为0-2000G(单盘),但最高可以添加13块硬盘。
  • 存储空间无法降低。

注意事项

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

操作步骤

  • 1.登陆控制台。

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

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

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

  • 5.点击【修改】进行规格修改,然后选择需要的计算规格。

  • 6.在【基本信息】页面找到【存储配置】。

  • 7.点击【添加】进行存储空间的增加,然后选择需要的存储大小。

  • 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.选择时间范围并单击【查询】。

账号与权限

创建账号

本文介绍如何为云数据库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命令。

监控功能

云数据库MySQL提供了丰富的性能监控项,您可以通过控制台查看实例的资源和引擎监控数据。

监控粒度

云数据库MySQL实例支持60s级粒度监控,暂不支持监控粒度的自定义选择。
说明:目前云数据库MySQL最长支持查看15天前的监控数据。

系统监控

云数据库MySQL系统监控功能提供CPU、内存、磁盘及网络相关的监控数据。

操作步骤

  • 1.登陆控制台。

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

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

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

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

  • 6.在【设备名称】下拉菜单中选择设备。

说明:

  • 筛选监控时段:可选择当前监控数据显示时段。时间设置为近1小时(默认),近12小时,1天,7天,自定义时间(最长为15天前)。
  • 周期:选择监控周期,默认为1分钟,可选周期为1分钟,2分钟,5分钟,10分钟,15分钟,30分钟,60分钟。
  • 功能区:区域缩放按钮,区域还原按钮,还原按钮,保存下载按钮。(功能区按钮的使用可以点击【使用说明】查看)

监控指标

监控项 说明
IOPS 实例的每秒I/O请求次数,单位:次/秒。
内存 实例的内存使用量,包括:
  • Used:已经使用的内存大小。
  • Buffered:写缓存占的大小。
  • Cached:读缓存占的大小。
CPU 实例的CPU利用率。
网络流量 实例每秒钟的输入、输出流量,单位:KB。
磁盘使用量 实例的磁盘空间使用量,包括:
  • 根目录:根目录空间使用量。
  • Boot:系统文件空间使用量。
  • Data:数据空间使用量。
  • Binlog:日志文件空间使用量。
  • Tmp:临时文件空间使用量。

数据库监控

提供引擎相关的监控指标,方便您诊断故障及性能优化。

操作步骤

  • 1.登陆控制台。

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

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

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

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

    说明:

    • 筛选监控时段:可选择当前监控数据显示时段。时间设置为近1小时(默认),近12小时,1天,7天,自定义时间(最长为15天前)。
    • 周期:选择监控周期,默认为1分钟,可选周期为1分钟,2分钟,5分钟,10分钟,15分钟,30分钟,60分钟。
    • 功能区:区域缩放按钮,区域还原按钮,还原按钮,保存下载按钮。(功能区按钮的使用可以点击【使用说明】查看)

监控指标

监控项 说明
连接数 实例当前总连接数。
RAW_DML InnoDB每秒钟操作执行次数,包括:
  • Insert:每秒从 InnoDB 表插入的行数。
  • Deleted:每秒从 InnoDB 表删除的行数。
  • Read:每秒从 InnoDB 表读取的行数。
  • Update:每秒从 InnoDB 表更新的行数。
InnoDB读写总量 InnoDB每秒读取和写入的数据量,单位:MB。
InnoDB读写次数 InnoDB每秒钟的读取和写入的次数。
InnoDB日志
  • Fsyncs:InnoDB每秒向日志文件完成的fsync写数量。
  • Writes:InnoDB每秒向日志文件的物理写入次数。
  • Write_request:InnoDB每秒向日志文件日志写请求。
COM_DML 数据库每秒SQL语句执行次数,包括:
  • Insert;
  • Delete;
  • Insert_Select;
  • Replace;
  • Replace_Select;
  • Select;
  • Update。
临时表 数据库执行SQL语句时在硬盘上自动创建的临时表的数量。
InnoDB缓冲池
  • read_used:InnoDB缓冲池的读命中率。
  • pages_used:InnoDB缓冲池的利用率。
  • pages_dirty:缓冲池脏块的百分率。
QPS 平均每秒SQL语句执行次数。
TPS 平均每秒事务数。

数据安全性

设置白名单

创建云数据库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。

备份与恢复

备份数据

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

注意事项

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

自动备份

  • 1.登陆控制台。

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

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

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

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

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

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

手动备份

  • 1.登陆控制台。

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

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

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

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

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

    • 备份方式:备份方式目前只有全备份,将备份整个实例。
    • 数据保留时长:备份数据的保留时长,默认为7天,最多可填730天。

恢复数据

当你已经拥有MySQL备份文件,可以通过备份恢复的方式来实现数据修复。

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

  • 方式1:直接将物理备份数据恢复到原实例,此操作将完全覆盖原实例。
  • 方式2:您可以选择时间段来进行基于MySQL binlog文件的【热解析】,【热解析】将把binlog文件解析成正向和反向的SQL语句,解析完成后可以将解析文件下载下来查看,然后在【热恢复】中选择相应的热解析文件进行恢复。

注意事项

  • 物理备份恢复(恢复到原实例)的过程中,数据库实例需要停机,恢复时间依赖于备份数据的大小,恢复完成后,再启动实例。
  • 热恢复仅支持对DML语句进行解析和恢复。
  • 热解析最多支持5个解析文件,请合理安排解析。

物理备份恢复

  • 1.登陆控制台。

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

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

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

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

  • 6.点击【确认】,当前备份文件的数据就会进行覆盖恢复。

  • 7.恢复数据操作时,数据库的状态为:恢复中。此时,无法对数据库进行操作。恢复完成后,备份状态就会显示恢复的时间点。

热恢复

  • 1.登陆控制台。

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

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

  • 4.在菜单中选择【热恢复】-【解析】。

  • 5.选择日期时间段,选好日期时间段后点击【选择时间】选择时间点,如果不选择则默认当前时间点。

  • 6.选好时间点后点击【确定】确认。

  • 7.点击【解析】开始解析。

  • 8.解析好的文件可以【下载】查看或【删除】。

  • 9.在菜单中选择【热恢复】-【恢复】。

  • 10.在下拉框中选择需要恢复的解析文件,点【恢复】,备份文件的数据就会进行覆盖恢复。

日志管理

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

查看日志

  • 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 13289.27 893.08 800 3000
write_only 64 12664.63 2277.44
read_write 64 11211.36 520.27
4C8G read_only 64 23433.15 1464.57 1600
write_only 64 13143.68 2257.28
read_write 64 12529.98 721.35
8C16G read_only 128 33943.49 2121.47 3200
write_only 128 11508.02 1918.01
read_write 300 27933.44 1654.34
8C32G read_only 300 39387.34 2673.32 6400
write_only 300 17837.32 2784.33
read_write 300 21898.32 2543.44

高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 12063.42 753.96 800 5000
write_only 64 9376.04 1562.67
read_write 64 11579.42 578.97
4C8G read_only 64 25456.34 1543.34 1600
write_only 64 18928.34 1789.34
read_write 64 19789.09 1003.45
8C16G read_only 128 29098.34 1878.45 3200
write_only 128 13090.34 2109.45
read_write 300 20989.12 1098.32
8C32G read_only 300 31811.37 1988.21 6400
write_only 300 17893.23 2789.45
read_write 300 25090.96 1385.45

主从版

高性能型数据

测试站点: 北京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的操作系统以及MySQL5.7版本为例进行演示。

操作系统中已安装数据恢复工具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数据库安装在64位的Linux系统中,且与云数据库MySQL版的版本相同。

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

操作步骤:

1.下载数据备份。

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

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

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

tar 压缩包 (.tar.gz 后缀)

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

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

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

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

ls -l /home/mysql/data

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

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

Innobackupex --defaults-file=/home/mysql/data/backup-my.cnf --apply-log /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

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
扫描上方二维码
微信咨询