TDSQL MySQL 版 操作指南(InnoDB)
版本日期:2024.03(最新版本以腾讯云官网产品文档为准,本链接为2024年3月版)
版权声明
本文档著作权归腾讯云计算(北京)有限责任公司(以下简称“腾讯云”)单独所有,未经腾讯云事先书面许可,任何主体不得以任何方式或理由使用本文档,包括但不限于复制、修改、传播、公开、剽窃全部或部分本文档内容。
本文档及其所含内容均属腾讯云内部资料,并且仅供腾讯云指定的主体查看。如果您非经腾讯云授权而获得本文档的全部或部分内容,敬请予以删除,切勿以复制、披露、传播等任何方式使用本文档或其任何内容,亦请切勿依本文档或其任何内容而采取任何行动。
免责声明
本文档旨在向客户介绍本文档撰写时,腾讯云相关产品、服务的当时的整体概况,部分产品或服务在后续可能因技术调整或项目设计等任何原因,导致其服务内容、标准等有所调整。因此,本文档仅供参考,腾讯云不对其准确性、适用性或完整性等做任何保证。您所购买、使用的腾讯云产品、服务的种类、内容、服务标准等,应以您和腾讯云之间签署的合同约定为准,除非双方另有约定,否则,腾讯云对本文档内容不做任何明示或默示的承诺或保证。
配置云数据库安全组
安全组是一种有状态的包含过滤功能的虚拟防火墙,用于设置单台或多台云数据库的网络访问控制,是腾讯云提供的重要的网络安全隔离手段。安全组是一个逻辑上的分组,您可以将同一地域内具有相同网络安全隔离需求的私有网络云数据库实例加到同一个安全组内,暂不支持基础网络云数据库。云数据库与云服务器等共享安全组列表,安全组内基于规则匹配,云数据库不支持的规则自动不生效。
云数据库安全组目前支持私有网络 VPC 内网访问的网络控制,对于广州、上海、北京、成都、南京、香港、重庆、新加坡、美国硅谷、首尔、日本、法兰克福、弗吉尼亚地域开启外网访问的实例,安全组支持外网环境。
管理云数据库安全组
登录 TDSQL MySQL版 控制台,在实例列表,单击实例 ID 进入管理页,选择数据安全性 > 安全组,管理云数据库安全组。
- 云数据库共享云服务器的安全组规则,您可以根据实际情况在云数据库安全组管理页面匹配或调整优先级。
- 云数据库安全组管理页面不支持创建、删除安全组规则本身,相关操作请参见 管理安全组。
安全组策略
安全组策略分为允许和拒绝流量。您可以通过安全组策略对实例的入流量进行安全过滤,实例可以是私有网络云数据库实例。
云数据库安全组默认策略
当前购买云数据库为 VPC 网络时,可以无需关联任何安全组;此时默认策略为“放通全部 IP 和端口”。
安全组模板
安全组支持自定义创建和模板创建,通过配置安全组规则对出入云服务器的数据包进行控制。
安全组规则
安全组规则可控制允许到达与安全组相关联实例的入站流量,以及允许离开实例的出站流量(从上到下依次筛选规则)。默认情况下,新建安全组将 All Drop (拒绝)所有流量。您可以随时修改安全组的规则,新规则保存后立即生效。 对于安全组的每条规则,有以下几项内容:
- 协议端口:因为云数据库仅能通过指定端口访问,所以安全组设置为非数据库访问端口不会对本实例生效,您可以通过查看实例连接端口来进行配置,如当前访问端口为3306,则端口可以设置为 ALL 或者 TCP:3306。
- 授权类型:地址段(CIDR/IP)访问。
- 来源(入站规则)或目标(出站规则),请指定以下选项之一:
- 用 CIDR 表示法,指定的单个 IP 地址。
- 用 CIDR 表示法,指定的 IP 地址范围。
- 策略:允许或拒绝。
安全组优先级
您在实例控制台中配置的安全组优先级,数字越小优先级越高。实例绑定多个安全组时,优先级将作为判断该实例总的安全规则的评估依据。 另外,如果实例绑定的多个安全组的最后一条策略是 ALL Traffic 拒绝,那么除了优先级最低的安全组,其它安全组的最后一条策略 ALL Traffic 拒绝将失效。
安全组的限制
- 安全组适用于私有网络 网络环境 下的云数据库实例。
- 安全组策略目前仅对内网 IP 生效,开启数据库外网访问时请配合 CVM 转发使用,保证业务获得最佳安全保障。
- 每个用户在同个地域的同个项目下最多可设置50个安全组。
- 一个安全组入站方向、出站方向的访问策略,各最多可设定100条。由于云数据库没有主动出站流量,因此出站规则对云数据库不生效。
- 一个云数据库可以加入多个安全组,一个安全组可同时关联多个云数据库,数量无限制。
安全组内实例个数虽无限制,但不宜过多。
功能描述 | 数量 |
|---|---|
安全组 | 50个/地域 |
访问策略 | 100条/入站方向,100条/出站方向 |
实例关联安全组个数 | 无限制 |
安全组内实例的个数 | 无限制 |
创建、管理和删除安全组规则
云数据库共享云服务器的安全组规则,您可以根据实际情况在云数据库安全组管理页面匹配或调整优先级。创建、管理和删除安全组规则在 安全组管理页面 进行,具体操作请参见 管理安全组。
SSL 连接加密
SSL 连接加密背景
当使用非加密方式连接数据库时,在网络中传输的所有信息都是明文,因此存在被非法用户窃听、篡改、冒充的三大风险;而 SSL/TLS 协议是为解决这三大风险而设计的,理论上可达到:
- 所有信息都是加密传播,第三方无法窃听。
- 具有校验机制,一旦被篡改,通信双方会立刻发现。
- 配备身份证书,防止身份被冒充。
SSL 连接加密概述
SSL 协议要求建立在可靠的传输层协议(TCP)之上。SSL 协议的优势在于它是与应用层协议独立无关的,高层的应用层协议(例如:HTTP、FTP、TELNET 等)能透明地建立于 SSL 协议之上。SSL 协议在应用层协议通信之前就已经完成加密算法、通信密钥的协商及服务器认证工作。在此之后应用层协议所传送的数据都会被加密,从而保证通信的私密性。
然而,加密和解密过程需要耗费系统大量的开销,严重降低机器的性能,相关测试数据表明使用 SSL/TLS 协议传输数据的工作效率只有使用不使用协议传输的十分之一。假如为了安全保密,将一个数据库所有的数据通讯应用都启用 SSL 技术来加密,并使用 TLS 协议进行传输,那么该业务系统的性能和效率将会大大降低,而且没有这个必要,因为一般来说并不是所有数据都要求那么高的安全保密级别。
SSL 加密并不保护数据本身,而是确保了来往于数据库和服务器之间的流量安全。从某个角度来看,由于企业内网天然的安全和隔离性,管理员通常可以放心内网传输安全,并在必须使用时再进行应用 SSL 连接加密。当然,通常建议管理员利用更合理的方法来应对企业内网的安全和隔离,而非仅仅依赖于 SSL 连接加密。
相关名词
- SSL(Secure Sockets Layer):安全套接层,是一种安全协议,目的是为互联网通信提供安全及数据完整性保障,使用 X.509 认证。
- TLS(Transport Layer Security):安全传输层,IETF 将 SSL 标准化后的产物。TLS 可以理解为 SSL 的升级版,TLS 目前有三个版本:TLS1.0、TLS1.1、TLS1.2,目前常用的为 TLS1.2,server 配置通常三个版本均支持。
- X.509 标准:SSL 证书格式遵循 X.509 标准,X.509 是由国际电信联盟(ITU-T)制定的数字证书标准。X.509 给出的鉴别框架是一种基于公开密钥体制的鉴别业务密钥管理,即一个用户有两把密钥,公钥和私钥,同时该标准也规范了公开密钥认证、证书吊销列表、授权证书、证书路径验证算法等。
- Openssl:一个开源的加密库,由 C 语言写成,SSL/TLS 协议基于该库进行的加解密。
- 认证机构 CA(Certificate Authority):在 HTTPS 中是一个很重要的角色,通常称之为认证中心,从广义上讲,认证中心还应该包括证书申请注册机构 RA(Registration Authority),它是数字证书的申请注册、证书签发的管理机构。而在公司内网,通常也可以自己搭建认证服务器,发送证书,简称“自签发证书”。
- 公钥(Public-key):公共证书,由 CA 中心颁发的合法文件,可以在互联网传播。公钥证书文件的扩展名包括 crt、cer、key、der、pem、pem。公钥中包含颁发给哪个域名、公司名、加密算法、组织机构、有效期等信息。
- 私钥(private-key):即通常就叫所谓的私钥,私钥在生成 CSR 文件的时候同时生产,后缀通常为 .key,由使用者自己保管,不可在互联网传播,极其重要。
配置 SSL 连接加密
- SSL 连接加密仅为连接加密,不会对数据加密。
- 由于启用 SSL 加密依赖当前 SQL 引擎版本,如果 SQL 引擎不匹配,后台会先进行静默升级(静默升级优先确保现有连接和实例稳定影响,业务无感知升级过程,升级过程可能历时1 - 2小时或更长)。
内网链路相对较安全,通常无需对连接加密;由于 SSL 加密的固有缺陷,启用 SSL 加密会存在以下问题:
- 部分客户端(含应用程序)需采用 SSL 连接加密模式。
- 会显著增加 CPU 使用率,并根据通讯数据量大小线性增加。
- 明显增加网络连接响应时间。
您可以在 TDSQL MySQL版 控制台,单击实例 ID 进入实例管理页,在数据安全性 > 连接加密中配置 SSL 加密。
连接启用连接加密的实例
MySQL/MariaDB 客户端
使用 SSL 连接加密的方式连接数据库:
mysql -P 3306 -h 10.xx.xx.168 -u test -p --ssl
登录成功后,可以使用\s命令查询当前登录状态: 其中SSL: Cipher in use is AES256-GCM-SHA384表示该用户是使用 SSL 连接至 MySQL 服务器。
Navicat 等图形化客户端
直接选择使用 SSL,无需选择使用验证即可连接。
JDBC 等连接程序示例
如果实例开启 SSL 连接加密,但 JDBC&ODBC 没有配置 SSL 加密,业务会报 WARN 错误。
JDBC 连接串添加 useSSL 参数:
connection = DriverManager.getConnection("jdbc:mysql://ip:port/jsp_db?useSSL=true&verifyServerCertificate=false","root","123456");
也可以修改在 Properties 对象中设置 useSSL 的值:
properties.setProperty("useSSL", "true");
要显示指定使用 TLS1.2 协议,可以在启动 JVM 时传递下列选项:
-Djavax.net.debug=all -Djdk.tls.client.protocols="TLSv1.2" -Dhttps.protocols="TLSv1.2"
TDE 数据加密
操作场景
TDSQL MySQL 版 提供透明数据加密(Transparent Data Encryption,TDE)功能,透明加密指数据的加解密操作对用户透明,支持对数据文件进行实时 I/O 加密和解密,在数据写入磁盘前进行加密,从磁盘读入内存时进行解密,可满足静态数据加密的合规性要求。
本文为您介绍如何通过控制台开启数据加密功能,以及如何加密或解密数据。
限制条件
- TDE 加密功能当前仅支持 MySQL 8.0.24 版本和香港地区 Percona 5.7 版本。
- 需开通 密钥管理服务 KMS。如未开通,请根据 TDE 加密功能引导进行开通。
- 需获得 KMS 密钥权限。如未开通,请根据 TDE 加密功能引导进行开通。
- 加密算法: AES256,加密模式: AES256: 256_CBC。
注意事项
- 开启 KMS 后,可能产生密钥管理服务(KMS)费用,请参见 KMS 购买指南。
- TDE 加密功能开通后无法关闭。
- 若已开通灾备/只读实例,暂时不支持 TDE 加密功能。
- 开启 TDE 加密功能后,暂时不支持创建灾备/只读实例。
- 开启 TDE 加密功能后,暂时不支持用备份文件在本地恢复数据库实例,推荐采用 回档数据库 进行恢复。
- 开启 TDE 加密功能后,可提高静态数据的安全性,但同时会影响访问加密数据库的读写性能,请结合实际情况选择开启 TDE 加密功能。
- 开启 TDE 加密功能后,会增加 CPU 资源的消耗,大约会影响5%左右的性能。
操作步骤
- 登录 TDSQL 控制台 ,单击实例 ID 或操作列的管理,进入实例管理页面。
- 在实例管理页,选择数据安全性 > 数据加密,单击“加密状态”的开关。
- 在弹出的对话框,开通 KMS 服务和授予 KMS 密钥权限,选择密钥后,单击确定。
- 开启了数据加密之后,需要对数据库表进行 DDL 操作才能进行数据加密或者解密,具体做法如下:
- 数据表创建时加密:
CREATE TABLE t1 (c1 INT) ENCRYPTION='Y'
- 已创建数据表加密:
ALTER TABLE t1 ENCRYPTION='Y'
- 数据表解密:
ALTER TABLE t1 ENCRYPTION='N'
性能检测
简介
性能检测是针对数据库实例性能及运行状况综合分析的服务,针对 SQL 语句的性能、CPU 使用率、IOPS 使用率、内存使用率、磁盘空间使用率、连接数、锁信息、热点表、事务等进行综合分析,性能检测提供智能的诊断及优化功能,能最大限度发现数据库存在的或潜在的健康问题。
目前如下版本实例支持此功能:
- TDSQL MySQL版
- 云数据库 MariaDB
针对某些检测结论,性能检测报告提供了一系列的优化建议,请您在应用这些建议前谨慎测试,以防加重实例的性能问题。
功能介绍
登录 控制台,在实例列表,单击实例 ID 进入管理页,选择性能优化 > 性能检测页,可进行性能检测。
- 健康评分:您可以看到当前数据库性能综合打分,满分100分;长期低于60分请注意优化业务或数据库配置。
- 报告生成、查看与保存:您可以任意创建报告;并查看最近一次生成的报告;报告可以通过另存网页下载到本地查阅。
性能检测主要功能
资源分析
分析一定时间内数据库实例资源(CPU、磁盘、连接)的使用情况,并综合评分。
由于多数实例默认开启了闲时超用策略,因此您可能观察到最大 CPU 使用率超过100%。如果您的 CPU 长期超过100%,且平均值高于建议值,建议您尽快扩容。
系统状态
梳理实例关键指标,并列举其状态、出现时间和提出对应修改建议。
表空间分布
列出按数据空间倒序的当前 TOP10表,协助您分析超大表情况。
冗余索引检测
列出当前可能的冗余索引(区分度小于1%的冗余),并提出优化建议。
由于查询语句要先查询索引,再通过索引去查询表,所以,如果索引列相同数据过多不利于减少筛选的数据量,反而不如直接全表扫描性能快。
死锁诊断
死锁诊断通过诊断show engine innodb status获取 DB 最后一次死锁信息,如果死锁发生时间在用户选择的诊断时间段内,便展示出来。
死锁出现频率过高代表事务内的 SQL 在并发执行场景中的持锁容易产生环路,根本解决方案是修改 SQL 运行逻辑顺序,优化加锁机制,减少死锁产生概率。临时解决方案是 kill 掉领头的阻塞会话。
锁等待诊断
当前时间段内的锁等待超过60s的报告。
- 有锁等待是正常现象,但有时候业务会出现 Lock wait timeout exceeded;try restarting transaction 锁等待超时等报错。MySQL 的 innodb 锁信息保存在系统库 information_schema 中的 innodb_trx,innodb_lock_waits,innodb_locks 三张表下,锁等待诊断通过分析诊断 set 主 DB 中的三张表的锁依赖关系,找出持有锁时间超过一定阈值,并阻塞的其他会话的领头事务信息和会话信息,以及被阻塞事务的会话信息,并 kill 掉该领头会话。
- 当前锁等待只支持 InnoDB 引擎。
长会话诊断
列通过诊断 set 主 DB 中的 information_schema.processlist 获取 Command 不是 Sleep,但执行时间(Time)超过10s的会话。
最佳解决长会话的手段是优化 SQL,并在业务代码中主动植入 session 失效配置,当然,您也可以通过调整interactive_timeout、wait_timeout两个参数,让过期 session 主动失效。
慢查询分析
基于执行次数倒序,列出当前 TOP20的慢查询语句。
慢查询可以通过 long_query_time 配置调整;慢查询产生的原因产生较多。通常,如果您的实例消耗资源合理且慢查询较多,则建议您关注业务 SQL、索引是否合理;如果您实例消耗性能较高且慢查询较多,建议您关注实例配置是否合理,并优化业务 SQL、索引等。慢查询数据可以在慢查询分析功能下,查询更多详细数据。
DB 状态检查
检查当前数据库 DB 层的健康状态。
其他
列出需要 DBA 关注的其他值。
慢查询分析
功能说明
将超过指定时间的 SQL 查询语句称为“慢查询”,对应语句称为“慢查询语句”,而数据库管理员(DBA)对慢查询语句进行分析并找到慢查询出现原因的过程叫做慢查询分析。
登录 TDSQL MySQL版 控制台,在实例列表单击实例 ID 进入管理页,选择性能优化 > 慢查询分析页,可进行慢查询分析。
- 单击右上角的
可自定义显示列表字段。
- 目前慢查询分析需要拆分到每个分片分别查看。
- 下载慢日志,需复制下载地址,并 登录到云数据库所在 VPC 下的 CVM(Linux 系统)中,运用 wget 命令进行内网下载。
主要参数说明
主要默认设置
- 慢查询功能:默认开启。
- 慢查询时间(long_query_time):默认配置为1秒;即慢查询语句查询时间超过1秒的才被记录。
- 分析数据输出延迟:1分钟 - 5分钟。
- 日志记录时长:30天,根据备份和日志设置周期决定。
分析列表字段说明
- 校验值(checksum):表示慢查询语句的一串序列数字,默认64bit。
- 抽象后的慢查询语句(fingerprint):隐去用户数据以后的慢查询语句。
- 数据库:出现慢查询语句的数据库。
- 账号:出现慢查询语句的账号。
- 最后执行时间(last_seen):时间范围内,最后一次出现慢查询语句的时间。
- 首次执行时间(first_seen):时间范围内,第一次出现慢查询语句的时间。
- 总次数(ts_cnt):时间范围内,慢查询语句出现的次数。
- 总次数占比:时间范围内,慢查询语句占所有慢查询语句次数的占比。
- 总时间(query_time_sum):时间范围内,慢查询语句查询总耗时。
- 总时间占比:时间范围内,慢查询语句查询总耗时的占比。
- 平均时间(query_time_avg):慢查询语句总时间除以总次数的平均时间。
- 最小时间(query_time_min):慢查询语句出现的最小时间。
- 最大时间(query_time_max):慢查询语句出现的最大时间。
- 总锁时间(lock_time_sum):慢查询语句出现锁的总耗时。
- 总锁时间占比:时间范围内,慢查询语句占所有慢查询语句锁时间的占比。
- 平均锁时间(lock_time_avg):慢查询语句总锁时间除以总锁次数的平均时间。
- 最小锁时间(lock_time_min):慢查询语句锁出现的最小时间。
- 最大锁时间(lock_time_max):慢查询语句锁出现的最大时间。
- 发送行数(Rows_sent_sum):该条慢查询语句发送的数据行数总和。
- 扫描行数(Rows_examined_sum):该条慢查询语句扫描的数据行数总和。
- 主机地址(Host):该条慢查询所来自的主机。
- 监控:单击查看 SQL 语句分析详情。
- SQL 示例:典型 SQL 的示例展示。
账号管理
创建账号
操作场景
本文为您介绍通过控制台创建 TDSQL MySQL版 的数据库账号,用以管理连接数据库实例。
操作步骤
- 登录 TDSQL 控制台,在实例列表中,单击实例 ID 或操作列的管理,进入实例管理页面。
- 在实例管理页面,选择账号管理页,单击创建账号。
- 在弹出的对话框,输入账号名、主机、密码等,确认无误后,单击确认,下一步。
- 账号名:需要1个 - 32个字符,由字母、数字或特殊字符组成;以字母开头。
- 主机:IP 形式,支持填入%。
- 密码:需要 8个 - 32个字符,不能以 '/' 开头,且必须包含小写字母、大写字母、数字和符号 ()~!@#$%^&*-+=_|{}[]:<>,.?/。
- 连接数限制:若填写0或者不填写则不做额外限制(但会受到最大连接数限制)。
- 当选择创建只读账号后,需要对只读账号 配置读写分离,确认无误后,单击确定。
- 选择主机则全部备机延迟时,从主机读取。
- 选择直接报错则全部备机延迟时,直接报错。
- 选择只从备机读取则忽略备机延迟,一直从备机读取(一般用于拉取 binlog 同步)。
- 若您的实例架构是一主一从,请谨慎选择只从备机读取,避免大事务等高负载任务,影响备机备份任务及可用性。
- 进入修改权限对话框,根据需求分配权限后,单击确定修改即可完成权限分配。若需稍后设置权限,单击取消修改即可。
相关 API
API 名称 | 描述 |
|---|---|
创建账号 |




