谈谈tmpdir与innodb_tmpdir的区别和用处
【背景】
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
----
谈谈tmpdir与innodb_tmpdir的区别和用处的更多相关文章
- 我来谈谈PHP和JAVA的区别
这里的标题写的是谈谈PHP和JAVA的区别,其实是委婉的说法,其实别人是想听PHP好还是JAVA好!!! 从而从中找到存在感!!! 因为由于我是从多年的php开发转到java开发的.所以最,不时的有好 ...
- iOS-----程序异常处理----- 断言NSAssert()和NSParameterAssert区别和用处
NSAssert和assert是断言,主要的差别是assert在断言失败的时候只是简单的终止程序,而NSAssert会报告出错误信息并且打印出来.所以尽管的使用NSAssert,可以不去使用asser ...
- 谈谈__proto__和prototype的区别
我想javascript中的原型链一直想很多初学javascript的同学感到非常的困惑,今天看了一些文章,结合自己的理解,把原型链这个东西从新来整理一下,如有不对之处,望大家帮忙指出. 首先,我们应 ...
- [转]领域驱动设计系列文章(2)——浅析VO、DTO、DO、PO的概念、区别和用处
原文地址:http://www.blogjava.net/johnnylzb/archive/2010/05/27/321968.html 上一篇文章作为一个引子,说明了领域驱动设计的优势,从本篇文章 ...
- 浅析VO、DTO、DO、PO的概念、区别和用处
上一篇文章作为一个引子,说明了领域驱动设计的优势,从本篇文章开始,笔者将会结合自己的实际经验,谈及领域驱动设计的应用.本篇文章主要讨论一下我们经常会用到的一些对象:VO.DTO.DO和PO. 由于不同 ...
- 领域驱动设计系列文章——浅析VO、DTO、DO、PO的概念、区别和用处
本篇文章主要讨论一下我们经常会用到的一些对象:VO.DTO.DO和PO. 由于不同的项目和开发人员有不同的命名习惯,这里我首先对上述的概念进行一个简单描述,名字只是个标识,我们重点关注其概念: 概念: ...
- 也谈谈 Redis 和 Memcached 的区别
本文作者: 伯乐在线 - 朱小厮 . 说到redis就会联想到memcached,反之亦然.了解过两者的同学有那么个大致的印象: redis与memcached相比,比仅支持简单的key-value数 ...
- 领域驱动设计系列(2)浅析VO、DTO、DO、PO的概念、区别和用处
PO:persistant object持久对象 最形象的理解就是一个PO就是数据库中的一条记录.好处是可以把一条记录作为一个对象处理,可以方便的转为其它对象. BO:business object业 ...
- 领域驱动设计系列文章(2)——浅析VO、DTO、DO、PO的概念、区别和用处
本篇文章主要讨论一下我们经常会用到的一些对象:VO.DTO.DO和PO. 由于不同的项目和开发人员有不同的命名习惯,这里我首先对上述的概念进行一个简单描述,名字只是个标识,我们重点关注其概念: 概念: ...
随机推荐
- 关于cin的缓存区影响效果
1. 当缓冲区中有残留数据时,cin函数会直接去读取这些残留数据而不会请求键盘输入.而且,回车符也会被存入输入缓冲区中. int num{}; while(cin>>num) cout&l ...
- SpringBoot拦截器
在实际开发中,总存在着这样的场景,比如拦截请求的ip地址,或者在所有的请求都返回相同的数据,如果每一个方法都写出相同数据固然可以实现,但是随着项目的变大,重复的代码会越来越多,所以在这种情况我们可以用 ...
- 通过ipmitool找回遗忘的iDrac地址
Background: 在使用Dell服务器的过程中,如果发生一下情况:可以进入系统,但是忘记iDrac卡的地址,在系统的某个Linux下,可以使用ipmitool这个工具来get一下硬件的信息,从而 ...
- Navicat -- 远程连接问题
有朋友可能会碰到使用Navicat for mysql 远程连接 mySql数据库会提示10061.1045错误或 2003-Can’t connect to MySQL on ’192.168.1. ...
- 使用openCV打开USB摄像头(UVC 小米micro接口)
之前在AndroidStudio上就用了别人用写的库成功地打开了USB摄像头. 于是我之后又在PC上尝试了一下,首先去淘宝买了个MICRO母转USB公的转接口,然后在Qt上配置了一下OPENCV后开始 ...
- mongodb安装、配置
1.下载: https://www.mongodb.com/download-center#community 2.进入到mongodb下载目录: a .新建data目录:mkdir data; b. ...
- jenkins部署node项目
docker run -d --name jenkins -p 8081:8080 -v /home/jenkins_home:/home/jenkins_home jenkins
- Ubuntu 安装 Anaconda3 详细步骤
主要介绍在 Ubuntu 14.04中安装 Anaconda3 的详细过程.(原文地址:http://blog.csdn.net/u012318074/article/details/77074665 ...
- 用列表实现一个简单的图书管理系统 python
#coding=utf-8 book_list=[] #图书馆所有书 unborrowed_book=[] #可借阅的书 borrowed_book=[] #已经借出去的书 def add(): ...
- Tyrion 中文文档(含示例源码)
原文出处: Mr.Seven Tyrion是一个基于Python实现的支持多个WEB框架的Form表单验证组件,其完美的支持Tornado.Django.Flask.Bottle Web框架.Ty ...