背景

  innodb_tmpdir是在innodb online ddl中提到的一个参数;大致的意思是innodb在做online-ddl的时候会向临时目录写入“临时排序文件”

  而这些文件的大小基本上就要与表的数据+索引的大小差不多。

  这里的临时目录默认就是由“tmpdir”这个参数的值,在我的主机上用了/tmp/这个目录

show global variables like 'tmpdir';
+----------------+----------+
| Variable_name  | Value    |
+----------------+----------+
| tmpdir         | /tmp     |
+----------------+----------+

  通常来说linux上的tmp目录不可能会特别大,常见的也就几个G吧,但是innodb单个表中的“数据”+“索引”几十个G的多了去了;如果是对

  这样的表做online ddl 那么临时目录是保存不下这么大的数据量的,最终的结果就是online ddl失败。

innodb_tmpdir

  如果有设置innodb_tmpdir的值、那么在online ddl时innodb会以innodb_tmpdir的值为准、也就是说事实上形成了一种innodb_tmpdir覆盖

  tmpdir的效果。

  回过头来、如果MySQL实例没有设置innodb_tmpdir的值自然就是以tmpdir的值为准啦。

设置innodb_tmpdir的注意事项

  1、设置innodb_tmpdir要求用户有file权限

  2、innodb本身要求innodb_tmpdir的值不能与datadir的值相同

-- 把innodb_tmpdir设置为datadir是行不通的
mysql> set @@global.innodb_tmpdir='/database/mysql/data/3306/';
ERROR 1231 (42000): Variable 'innodb_tmpdir' can't be set to the value of '/database/mysql/data/3306/'

innodb_tmpdir的最佳实践

  1、设计时应该尽可能的想到用数据分片来处理表、不要让表太大(超过tmpdir目录的大小)、虽然这条写在最前面我自己并不怎么care!

  2、推荐把数据(datadir)与数据库备份文件保存在不同的物理磁盘上,一来可以在备份的时候尽可能的减小对oltp的影响,二来这种情况

  下把tmpdir配置成备份盘的一个目录是非常好的一个选择。(我们的数据库主机上没有第二块盘呀!“穷”本身就是一个问题)

  3、实在没有办法就在执行online ddl前给innodb_tmpdir分配一个大点的目录吧,好歹也能保证执行成功呀!

innodb online ddl的官方文档

  官方文档 : https://dev.mysql.com/doc/refman/8.0/en/innodb-online-ddl.html

----

转载于:https://www.cnblogs.com/JiangLe/p/10156689.html

谈谈tmpdir与innodb_tmpdir的区别和用处相关推荐

  1. iOS-----程序异常处理----- 断言NSAssert()和NSParameterAssert区别和用处

    iOS-----程序异常处理----- 断言NSAssert()和NSParameterAssert区别和用处 参考文章: (1)iOS-----程序异常处理----- 断言NSAssert()和NS ...

  2. int在c语言中的作用,C语言中int,Uint,uint16等有什么区别以及用处

    C语言中int,Uint,uint16等有什么区别以及用处.在C中,既然有了int,为什么还要有uint?特别是uint16,uint32等又有什么用?他们有什么区别?" --------- ...

  3. 谈谈Java与C#的区别

    先听一个故事:Java与C/C++/C#的历史渊源 1972年的某一天,一个被称为"上帝的编程语言"的工具就此诞生,它是基于B语言的改进,并被正式命名为C语言.凭借着自身的优秀特性 ...

  4. 【每日一题~001】谈谈synchronized与ReentrantLock的区别?

    每日一题,共同成长,见证奇迹,加油老铁 问题:谈谈synchronized与ReentrantLock的区别?思考:2分钟...答案如下:1.底层实现:1)synchronized 是JVM层面的锁, ...

  5. linux arm9视频哪个好,谈谈ARM7与ARM9的区别

    本文是写给准备学习ARM技术,而又没想好要学ARM7还是ARM9或者对ARM7与ARM9的区别不是很了解的初学者.希望本文对你们有点用处. 由于职业的关系,经常会回答一些ARM初学者的问题,虽然问题千 ...

  6. XML简介,XML和HTML的区别,XML用处,XML规则,XML约束,XML语法,XML解析,DOM

    什么是xml XML 指可扩展标记语言(EXtensible Markup Language),它的结构是一种树形的结构,必须有一个根节点 XML 是一种标记语言,很类似 HTML XML 的设计宗旨 ...

  7. 谈谈ES5和ES6的区别

    我们都知道JavaScript是由三部分组成: 1. ECMAScript(核心):规定了语言的组成部分=>语法.类型.语句.关键字.保留字.操作符.对象 2. BOM(浏览器对象模型): 支持 ...

  8. 浅析 VO、DTO、DO、PO 的概念、区别和用处!

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:cnblogs.com/qixuejia/p/4390086 ...

  9. map和foreach的区别和应用场景_浅析项目中常用的 VO、DTO、DO、PO的概念、区别和用处...

    概念: 模型: VO与DTO的区别 VO与DTO的应用 DTO与DO的区别 DTO与DO的应用 DO与PO的区别 DO与PO的应用 本篇文章主要讨论一下我们经常会用到的一些对象:VO.DTO.DO和P ...

  10. 谈谈浅拷贝和深拷贝的区别,以及实现的方法

    两者的区别:一个对象浅复制后,是深层次的对象地址的复制,并没有开辟新的栈,也就是复制的结果是两个对象指向同一个地址,修改其中一个对象的属性,则另一个对象的属性也会发生改变,而深复制的则是开辟了一个新的 ...

最新文章

  1. Qt选择文件对话框-中文路径-转std::string
  2. 机器视觉-特征点检测:【2】Harrs角点检测原理
  3. 基于IPV6数据包分析(GNS3)
  4. 将字符串编码成 GBK
  5. Linux的实际操作:文件和文件夹的权限解读
  6. MagicMongoDBTool数据管理工具使用介绍
  7. 电脑底部任务栏点不动_15个小技巧,让我的Windows电脑更好用了!
  8. Spring Boot : SpringApplicationRunListener
  9. java之final的各种用法
  10. java flag 用法_Java中一些常用的方法
  11. e的ax次方怎么求导
  12. Java图片上传Base64 类型上传 后台转换工具类
  13. matlab自动打卡程序,MATLAB人脸考勤打卡签到系统[摄像头界面GUI]
  14. mathtype公式编辑器设置字母正体斜体的方法
  15. 十大BI报表可视化工具
  16. Java实现矩阵运算——矩阵乘法、矩阵转置、自动填充矩阵行
  17. mybatis 关于出现Parameter array not found. Available parameters are [collection, list]问题的解决方案
  18. 互联网大厂的会员“陷阱”
  19. 一些java语言的精巧写法
  20. 第十一课:磁场和洛伦兹力

热门文章

  1. python 文件写入多个参数_如何将多个参数写入txt文件(字符串和变量)
  2. 5000并发的qps是多少_高并发和高性能系统中进程、线程、协程、队列(如何调度的)...
  3. python 例子 银行_Python3 适合初学者学习的银行账户登录系统实例
  4. Python(十二):异常
  5. #读取json某一节点数据_06596.2.0Hive处理JSON格式数据
  6. 翻译: 自动驾驶汽车技术:自动驾驶汽车如何工作?
  7. python中字符a如何变成b_python 如何把'a=b'这样的字符解析成dict类型
  8. 2021-09-08推荐系统有如下三大类算法
  9. 简单机器学习系统的构建以及对于不对称性的分类介绍和性能评价
  10. an argument for principle #1:thoreau's new economics 36-38