• 首页 > 
  • 应急预案:专有云V3环境中RDS MySQL5.7实例修改innodb_temp_data_file_path参数的方法

应急预案:专有云V3环境中RDS MySQL5.7实例修改innodb_temp_data_file_path参数的方法

KB: 194998

 · 

更新时间:2020-12-15 20:50

1. 概述

本文主要介绍在专有云V3环境中,RDS MySQL5.7实例修改innodb_temp_data_file_path参数的方法。

1.1. 适用范围

  • 专有云V3企业版,RDS
    说明:适用于专有云V3.8.0及以上环境,RDS MySQL5.7版本。

1.2. 用户告知

  • 适用平台:x86
  • 授权级别:L1(一线驻场工程师)、L2(二线技术支持工程师)
  • 临时或固化方案:临时
  • 操作复杂度:中
  • 预估执行时长:30分钟
  • 业务影响:否
    说明
    • 临时表空间文件达到阈值后,所有使用到临时文件(Using temporary)的查询都不可以执行,此时需要重启数据库自动清空临时文件,使恢复正常。
    • innodb_temp_data_file_path参数会因为实例迁移回退为默认值,只能修改大小,严禁修改路径,否则后果非常严重。
  • 风险等级:中

1.3. 用户告知

  • 严禁修改参数的路径,只允许修改大小。
  • 修改的参数大小不能超过实例磁盘规格的大小。
  • 临时文件达到阈值后,无法执行Using temporary的查询。

    为了尽快达到阈值,图中的案例限制最大为20M,此时需要重启数据库恢复。

2. 问题描述

临时文件无限增长,导致实例被锁定,所有select语句的查询都查询不到结果。

3. 解决方案

3.1. 环境检查

  1. 登录实例数据库,执行以下SQL语句,确认MySQL为5.7版本。
    select version();
    系统显示类似如下。
  2. 执行以下SQL语句,查看innodb_temp_data_file_path参数的信息,确认参数的值为ibtmp1:12M:autoextend
    说明:该值表示默认值为12M,自动增长大小无上限。
    show variables like 'innodb_temp_data_file_path';
    系统显示类似如下。
  3. 登录RDS运维管理控制台,在实例基本信息页面,确认实例的链路类型为Proxy。若非Proxy链路类型的实例,主备切换会引起闪断,需要现场或业务确认是否能接受该风险,否则不能执行该方案。

3.2. 实施步骤

修改备库的配置文件

  1. 登录备库所在机器,修改备库的/etc/my[$Port].cnf配置文件,在[mysqld]这一节中添加以下参数,如参数已存在,则修改为目标值。
    注意:[$Port]为端口号,需要将端口替换成备库的端口,修改的参数大小不能超过实例磁盘规格的大小,本例最大限制10GB,实例规格100GB。
    innodb_temp_data_file_path = ibtmp1:12M:autoextend:max:10G
    系统显示类似如下。
  2. 登录RDS运维管理控制台,在实例基本信息页面,单击重启备库
    注意:重启任务如发生中断,请立即停止操作,并提交工单到阿里云技术支持进行处理。

主备库进行切换

  1. 进行一次主备切换,主备切换的方法请参见通用方案:专有云RDS产品MySQL实例主备切换
  2. 主备切换成功后,原来的主库成为备库,在当前的备库上按顺序重复修改备库的配置文件操作。

修改实例参数模板

为防止因备库重搭、全量备份或重启导致参数的丢失,需要修改dbaas数据库的元数据表。

  1. 登录RDS运维管理控制台,查看当前登录用户名。
  2. 在实例基本信息页面,查看实例ID。
  3. 登录到天基控制台,选择运维>集群运维,在Project框中选择rds,在集群框中搜索maotai,单击对应的集群,进入集群Dashboard页面。
  4. 集群资源区域,查看dbaas数据库的连接信息。
  5. 登录dbaas数据库,依次执行以下SQL语句,查询user_id。
    use dbaas;
    select * from user where user_name='aliyuntest'\G
    系统显示类似如下。
  6. 执行以下SQL语句,修改实例参数模板。
    insert into mycnf_custinstance(id,custins_id,name,para_value,gmt_created,gmt_modified,creator,modifier) 
    values ('',[$Instance_ID], 'innodb_temp_data_file_path','ibtmp1:12M:autoextend:max:100G',now(),now(), '[$User_ID]','[$User_ID]');
    说明
    • [$Instance_ID]为实例ID。
    • [$User_ID]为上一步获取的user_id。
    • 如果存在只读实例和备用只读实例,则主实例、只读实例和备用只读实例都需要添加,若不确定,请联系阿里云技术执行进行协助排查。

备份实例

  1. 在左侧导航栏中单击备份策略,在页面最下方单击创建临时备份
  2. 在弹出的提示框中,选择备份类型FULL,选择相应的备份方法,选择具体的备份时间。单击确定
    说明:主备库都需要备份。
  3. 备份完成后,在备份恢复页面,确认备份任务的状态为OK,且为有效的临时备份。

3.3. 结果验证

登录实例数据库,执行以下SQL语句,查看参数,确认修改成功。

show variables like 'innodb_temp_data_file_path';

系统显示类似如下。

4. 回滚方案

  1. 登录备库所在机器,在备库的配置文件中,根据实施步骤中操作情况,删除innodb_temp_data_file_path参数或者修改为默认值。
  2. 登录RDS运维管理控制台,在实例基本信息页面,单击重启备库
  3. 进行主备切换,主备切换的方法请参见通用方案:专有云RDS产品MySQL实例主备切换
  4. 重复执行本节中的第1步和第2步。
  5. 登录dbaas数据库,执行以下SQL语句,回滚参数模板元数据表。
    delete from mycnf_custinstance where custins_id=[$Instance_ID] and name='innodb_temp_data_file_path' limit 1;
  6. 登录实例数据库,执行以下SQL语句,确认参数已恢复默认的值。
    show variables like 'innodb_temp_data_file_path';
    系统显示类似如下。
  7. 执行以下SQL语句,确认元数据表无对应记录。
    select * from mycnf_custinstance where custins_id=[$Instance_ID] and name='innodb_temp_data_file_path'\G;