本文汇总了使用云数据库 MySQL 版的过程中常见的问题。
服务与支持
为什么云数据库 MySQL 版不支持 MyISAM 引擎、 Memory 引擎?
云数据库 MySQL 版在 MySQL 5.7 及以上版本中默认支持 InnoDB 引擎,不再支持 MyISAM 引擎、Memory 引擎或 Archive 引擎,主要原因是:
- 云数据库 MySQL 版对 InnoDB 做了很多内核优化,已具备明显的性能优势。
- MyISAM 采用的是表级锁机制,而 InnoDB 采用的是行级锁机制,InnoDB 在通常情况下具备更高的写入效率。
- MyISAM 对数据完整性的保护存在缺陷,这些缺陷会导致数据库数据的损坏甚至丢失。这些缺陷多为设计问题,无法在不破坏兼容性的前提下进行修复。
- MyISAM 和 Memory 向 InnoDB 的迁移代价低,大多数应用仅需要改动建表的代码即可完成迁移。
- MySQL 的发展在向 InnoDB 转移。在官方最新的 MySQL 8.0 版本中,系统表均已采用 InnoDB。
- Memory 无法保证数据的完整性,实例重启或者切换主备节点时,表中的所有数据都会丢失。
如您对 MyISAM 引擎和 Memory 引擎有特别需要,可提交工单联系云数据库 MySQL 版技术支持。 如何把查询结果导出到文件?
如何升级 MySQL 5.7 实例到 MySQL 8.0 实例?
MySQL 5.7 实例不能直接升级为 MySQL 8.0 实例。如需升级实例版本,可以先创建一个 MySQL 8.0 实例,通过数据库传输服务 DTS(Database Transmission Service)将数据从 MySQL 5.7 迁移至 MySQL 8.0 实例。关于使用 DTS 迁移数据的详细信息,请参见什么是数据库传输服务。 创建云数据库 MySQL 版实例时,是否支持指定实例的内核小版本?
不支持。
创建云数据库 MySQL 版实例后,支持切换时区吗?
支持切换时区。创建 MySQL 实例后,您可以登录云数据库 MySQL 版控制台,在参数管理页签下,通过修改 default_time_zone 参数修改时区。 说明
切换时区后可能会导致数据表中部分时间字段失效等问题,请您谨慎操作。
网络连接
为什么无法连接数据库?
若您出现无法连接数据库的问题,请根据如下建议进行排查:
- 若通过私网连接,请确认 ECS 实例和 MySQL 实例在同一个 VPC 下。
若排查之后仍无法连接 MySQL 实例,您可以提交工单联系技术支持。 在 ECS 实例使用 MySQL 客户端连接 MySQL 实例时收到错误提示 Access denied。
在 ECS 实例使用 MySQL 客户端连接 MySQL 实例时如果收到如下错误提示,建议优先确认是否将 ECS 实例的地址加入了 MySQL 实例的白名单。更多关于创建白名单的信息,请参见创建白名单。 可以获得 MySQL 实例公网连接或私网连接的 IP 吗?
不可以。MySQL 的连接地址都是以域名的形式提供。
MySQL 实例公网连接或私网连接的 IP 会变化吗?
通常情况下,在不变更实例绑定的私有网络或子网的情况下,连接地址的 IP 不会变化,一个连接终端对应一个 ENI 网卡地址。但建议通过域名访问,使用域名访问时可以隐藏真实的 IP 并提高可用性。关于查看域名的详细信息,请参见查看连接地址和端口。 重启实例或切换主备节点后,收到错误提示 ERROR 3300 (HY000): Backend NetWork Error。
重启实例或切换主备节点后,可能会收到 ERROR 3300 (HY000): Backend NetWork Error 提示,该错误信息表示代理的网络异常,通过重试即可解决。
云数据库 MySQL 版是否支持通过公钥、私钥方式从本地进行连接?
不支持。您可以在创建数据库账号时将账号的验证方式为 IAM 验证,此时不需为账号设置密码。连接实例时,系统会通过获取的临时 Token 代替密码进行验证登录。
如何解决通过客户端连接 MySQL 实例时,报错 Public Key Retrieval is not allowed?
原因:该报错是由于 MySQL 实例采用安全性更高的 caching_sha2_password 密码认证插件,而业务使用的客户端驱动版本较旧,不兼容该认证方式所导致。
解决方法:配置客户端参数,以允许客户端主动从服务端获取公钥,不同客户端配置项如下:
- MySQL 命令行:--get-server-public-key。
- JDBC 连接字符串:allowPublicKeyRetrieval=true。
- Python(mysql‑connector‑python):allow_public_key_retrieval=True。
高权限账号和普通账号有什么区别?
高权限账号:一个实例只能创建一个,可以管理所有普通账号和数据库。
普通账号:一个实例中可以创建多个,需要手动给普通账号授予特定数据库权限。
高权限账号能否修改指定权限?
高权限账号只能重置为初始状态,无法修改为指定的权限。
数据库是否可以绑定多个账号?
可以。
为什么账号的状态显示“不可用”?
原因分析:如果在创建数据库账号后,通过命令行删除了该账号,那么在控制台的账号列表中,该账号的状态会显示为不可用。
解决办法:在控制台为账号重置密码,即可恢复账号为可用状态。关于重置密码的详细信息,请参见重置账号密码。建议在控制台进行账号管理相关操作,以避免账号不可用的情况。 只读节点
什么是只读节点?
面对有大量读请求的应用场景,可以创建一个或多个只读节点,利用只读节点满足大量的数据库读取需求,增加应用的吞吐量,详情请参见只读节点概览。 如何选择只读节点的规格?
可以与主节点不一样,并且可以随时更改。建议只读节点规格高于主节点规格,否则容易导致只读节点延迟偏高、负载高等现象。
只读节点的账号和主节点一样吗?
一样,可以通过主节点的账号访问只读节点。
一个实例下最多可以创建多少个只读节点?
10 个。
只读节点为何没有备份功能?
因为主节点已有备份,只读节点暂时不支持备份设置以及手动发起备份。
可以将已有的节点切换为只读节点吗?
只能为实例新增只读节点,不能将已有的节点切换为只读节点。
创建只读节点会影响主节点吗?
增加只读节点时,可能会因为集群所在资源池或当前实例适合的迁移方式不同而引起主、备库迁移或连接闪断,具体影响以变更配置页面展示的预估影响为准。如果在变更配置中只增加只读节点,选择执行时间为立即执行时有较小概率引起主、备库迁移或连接闪断。
- 无需修改业务代码的场景:若已使用代理终端并开启了读写分离功能,且开启了代理终端的自动添加新节点功能,新增的只读节点会自动关联到代理终端,读请求会自动按照权重分配到新的只读节点上,无需修改业务代码。
- 若未使用代理终端,仅通过直连终端访问主节点,新增只读节点后需要修改业务代码配置,将读请求指向新增的只读节点对应直连终端地址,才能将请求分流到只读节点。
- 若使用代理终端但未开启读写分离,或未开启自动添加新节点功能,需要手动将新增只读节点关联到代理终端并配置读写分离规则,若之前业务未使用代理地址则需要修改程序连接地址为代理终端地址。
只读节点发生故障后,读请求是否会自动路由至主节点?
满足以下两个条件的连接终端,在只读节点发生故障后,读请求会自动路由至主节点:
说明
- 若连接终端未开启过载保护,当全部只读节点故障或延迟超过阈值被删除后,所有读请求会自动路由到关联的主节点,保障业务读请求可用性。
- 若连接终端开启了过载保护,系统会在只读节点整体异常时触发主节点保护机制,在设定的过载保护时间内,读请求不会路由到主节点,防止主节点被突发流量击穿,保护时间结束后,读请求会自动切换到主节点。
读写分离
为何选择读写分离会报错?
开启读写分离前请确保已创建只读节点,若您出现读写分离报错的问题,请根据如下建议进行排查:
若排查之后仍出现读写分离报错,您可以提交工单联系技术支持。 读写分离的作用是什么?
开启读写分离后,可将满足条件的读请求转发至只读节点执行,降低主节点的读压力。关于开启读写分离后转发请求逻辑的详细信息,请参见开启读写分离。 什么是全局只读?
开启全局只读后,可设置 MySQL 实例只允许读取,无法写入。
开启全局只读后,是否会覆盖账号权限?
开启全局只读后只有读权限,没有其他权限。
备份恢复
为什么无法进行备份操作?
若您出现无法进行备份操作的问题,请根据如下建议进行排查:
- 确认备份期间未执行 DDL 操作,避免锁表导致备份失败。
- 表的数量超过 600,000 时将无法为实例进行备份。表数量过多的时候,建议对实例进行拆分。
若排查之后仍出现无法进行备份操作的问题,您可以提交工单联系技术支持。 备份类型是否支持逻辑备份?
支持。
云数据库 MySQL 版有哪些容灾方案?
- 云数据库 MySQL 版提供在线的主备高可用架构,保障服务可用性,在主节点出现故障后,会自动检测并秒级主备切换。
- 支持多可用区部署。在创建新实例、恢复到新实例时,支持为主节点、备节点和只读节点指定同一地域的不同可用区,使实例具备跨可用区容灾能力。
- 可以通过数据库传输服务配置同步任务来实现在线的跨地域容灾,更多详细信息,请参见同步方案概览。
- 主备切换过程中可能会有 1~2 次闪断,请确保您的应用程序具有自动重连机制。
- 如果实例下挂载有只读节点,主备切换后,只读节点的数据会因重建复制链路、同步增量数据等产生一段时间的延迟。
- 在没有主从复制延迟的情况下 5 秒内即可切换成功。
主备地址一样,主备切换后不需要更换地址,但需要注意主备切换过程中会有闪断的情况。
云数据库 MySQL 版如何执行初始化 SQL 脚本?
- 如果您通过数据库传输服务 DTS 进行迁移,可查看 DTS 任务结果,在迁移任务列表点击迁移任务名称,再点击数据校验查看校验结果。
- 如果您通过其他方式迁移数据,可以登录数据库执行如下 SQL 统计对比表行数,查看表数量是否一致。
说明
- 执行 COUNT 命令会导致 CPU 和内存升高,不建议在业务高峰期执行。
- 可以执行 ANALYZE TABLE oneapi_eye 后再查询。
MySQL 实例必须设置白名单吗?
如果当前地域有配置默认白名单,MySQL 实例在创建后会绑定默认白名单,默认白名单内的 IP 地址或地址段可以访问实例。如果当前地域没有配置默认白名单,MySQL 实例在创建后不会绑定任何白名单,任何 IP 均无法访问该 MySQL 实例。
单个实例最多可以绑定多少个白名单?
单个实例最多可以绑定 100 个白名单。
每个白名单最多支持多少 IP 或者 IP 段?
每个白名单最多支持 300 个 IP 或 IP 段。
一个白名单支持绑定到多个实例吗?
支持。一个白名单最多支持绑定到 500 个实例。
不支持。创建云数据库 MySQL 版实例后,不会绑定任何白名单和IP地址,且默认禁止所有IP地址访问实例,后续您可按需配置实例的白名单。实例白名单绑定的 IP 地址中,只要有 0.0.0.0/0,则表示允许所有地址的访问;实例只绑定了 127.0.0.1 地址,表示禁止所有地址访问实例。 日志
慢日志明细可保留多久?
慢日志明细可保留 30 天。
被记录在慢日志 SQL 语句的默认时长是?能否自定义?
默认执行时间超过 1 秒的 SQL 语句会被记录在慢日志。可在参数设置中修改 long_query_time 参数来修改这个时长,详情请参见修改参数。 如何查看云数据库 MySQL 版的 SQL 执行记录?
- 您可以在数据库工作台 SQL 窗口的执行历史区域查看 SQL 语句执行历史记录。但数据库工作台仅记录当前登录账号在工作台执行的 SQL 操作,无法记录通过其他客户端执行的操作。
- 若您已开启数据库审计功能,可以在数据库工作台的数据库审计页签中查看 SQL 语句执行历史记录。
- 若您未开启数据库审计功能,可以在控制台下载 Binlog 日志进行解析查看 SQL 语句执行历史记录,但是 Binlog 日志仅记录增加、删除、修改等操作,不记录查询操作。
参数
在参数管理中为什么找不到需要修改的参数?
修改参数后,需要重启实例吗?
部分参数修改后需要重启实例,您可在控制台的参数配置>MySQL 参数的是否重启生效列查看是否需要重启实例,详情请参见修改参数。 说明
建议在业务低峰中操作,并确保应用程序具有重连机制。
支持修改系统参数模板吗?
如何查询云数据库 MySQL 版不支持修改的参数的设定值?
可登录数据库工作台,使用 SQL 语句 SHOW variables like '参数名'查看。 如何解决执行 alter table operator_log engine=innodb 语句时报错“PrecheckFailed_DiskSpaceInsufficient` 磁盘空间不足”?
- (建议)扩容存储空间,实例剩余的磁盘空间需大于当前表占用存储空间的两倍。
- 如果您使用无锁方式变更表结构,在此过程中不会影响业务读写,但会占用部分存储空间,建议您在业务低峰期及时清理表空间。
通过 DELETE 命令删除数据库后,不会立即释放存储空间,需要执行 OPTIMIZE TABL<表名>; 命令清除表空间才会释放。
说明
OPTIMIZE TABLE <表名>;命令执行后会重新建表,数据量大时请谨慎操作。建议在业务低峰期操作,避免长时间阻塞影响业务正常运行。