偶尔加索引失败

DDL job rollback, error msg:
cannot get disk capacity at /tmp/tidb/tmp_ddl-4001: no such file or directory

为什么偶尔会发生这个问题,会面都是手动添加,赋权才行。是什么原因造成文件夹丢失了?

以前肯定没有报错,是在/tmp下的什么原因?

低版本升级上来的吗
参考下这里

确实是升级上来的,但是已经很久了,升级完也加过很多ddl

/tmp/tidb这目录的权限发一下看看呢

是目录没有了,重建的

可以把 tidb_ddl_enable_fast_reorg 关掉,老版本没有这个目录,新版本引入的特性默认开启,但是目录升级没能自动创建

加过目录,后来不知道为什么没了。才报错

tidb_ddl_enable_fast_reorg 从 v6.3.0 版本开始引入

  • 作用域:GLOBAL
  • 是否持久化到集群:是
  • 类型:布尔型
  • 默认值:ON
  • 这个变量用来控制是否开启添加索引加速功能,来提升创建索引回填过程的速度。开启该变量对于数据量较大的表有一定的性能提升。
  • TiDB v7.1.0 引入了快速加索引功能的检查点机制,即使 TiDB owner 因故障重启或者切换,也能够通过自动定期保存的检查点恢复部分进度。
  • 要验证已经完成的 ADD INDEX 操作是否使用了添加索引加速功能,可以执行 ADMIN SHOW DDL JOBS 语句查看 JOB_TYPE 一列中是否含有 ingest 字样。

注意

  • 要使用索引加速功能,你需要提供一个可写且具有足够空余空间的临时路径 temp-dir。如果 temp-dir 无法使用,TiDB 会退回到非加速的索引创建方式。建议将 temp-dir 挂载在 SSD 磁盘上。
  • 在升级到 v6.5.0 及以上版本时,请确保 TiDB 的 temp-dir 路径已正确挂载了 SSD 磁盘,并确保运行 TiDB 的操作系统用户对该目录有读写权限,否则在运行时可能产生不可预知的问题。该参数是 TiDB 的配置参数,设置后需要重启 TiDB 才能生效。因此,在升级前提前进行设置,可以避免再次重启。
  • 在 v7.0.0 之前版本中,PITR 恢复会额外处理日志备份时间段内通过索引加速功能创建的索引,以达到兼容效果。详细内容请参考索引加速功能为什么与 PITR 功能不兼容

确实需要使用到temp-dir,这个目录是否能够指定不在tmp下好点?

啊,正常这个建上,怎么会被删除呢?你看下你的主机策略有针对/tmp目录的处理没。。。

指定在别的目录也可以

刚看了,又消失了文件夹

每次消失都是同一个tidb节点上吗

本地有配置对tmp清理的任务没

2个节点的,都没了。。最近没执行ddl

百度了下,没有crontab 或者 tmpwatch这种

more /etc/crontab里边包含一行
2 4 * * * root run-parts /etc/cron.daily 注:表示每天的4点2分,开始执行/etc/cron.daily目录下的可执行程序或脚本;
其中有一个tmpwatch程序,会自动把/tmp目录下的过期文件和目录删除掉。可以通过修改该文件的方式,把该目录作例外处理。
more /etc/cron.daily/tmpwatch

修复当 tmp 路径不存在时快速添加索引的 DDL 会卡住的问题 #45456
你是什么版本7.1.2后有个这个修复,没有目录时能自己建

1 个赞

看到了,感谢

这个是目录和对应目录权限的问题,tidb执行创建索引的ddl语句时默认会使用/tmp/tidb/tmp_ddl-4001目录,如果服务器所在节点没有该目录,就会报错,所以需要自己创建目录并赋予权限,之前也遇到过这种问题,不知道高版本是否解决了该问题,不过可以自己在集群配置文件中修改该目录

看来是全县问题 你创建好目录就行