【MySQL】MySQL的tmpdir临时文件说明及使用设置

【MySQL】MySQL的tmpdir临时文件说明及使用设置,第1张

MySQL临时目录用于存储临时文件或临时表,值可以是一个使用“:”(Unix)或“”(Windows)分隔的路径列表,这些路径可被轮流使用,以便将负载分到不同磁盘。 若MySQL server是作为Slave的角色,则不能将该目录指向基于内存文件系统的目录或者当主机重启时会被清理掉的目录,因为Slave需要这些文件复制临时表或执行LOAD DATA INFILE *** 作,这些文件丢失会导致复制失败。这意味着不能将slave的tmpdir设置为linux系统默认的/tmp目录。 对于Slave可以使用另一配置项slave_load_tmpdir来设置其临时目录,这样Slave可以不使用通用选项tmpdir设置的临时目录,对于非Slave角色的MySQL server没此限制。 若临时目录不存在或权限不正确不仅会引起MySQL Server启动失败还会导致其他可能使用到临时目录的MySQL实用程序运行异常。很多MySQL相关程序会从MySQL Server的配置文件读取选项值。MySQL 日志配置http://xiaochencui.github.io/2018/01/03/mysql-%E6%97%A5%E5%BF%97%E9%85%8D%E7%BD%AEMySQL的tmpdir临时文件说明及使用设置https://www.cnblogs.com/paul8339/p/11983747.html一个MysQL /tmp目录爆满问题的处理https://blog.51cto.com/lee90/1939469Shall I change the mysql tmpdir from /tmp to /var/lib/mysql/tmp ?https://serverfault.com/questions/431640/mysql-shall-i-change-the-mysql-tmpdir-from-tmp-to-var-lib-mysql-tmpMySQL 临时目录https://blog.csdn.net/zyz511919766/article/details/38084515How to know if mysql tmpdir is being used?https://dba.stackexchange.com/questions/159296/how-to-know-if-mysql-tmpdir-is-being-usedMySQL, RAM disk for tmpdir https://dba.stackexchange.com/questions/94304/mysql-ram-disk-for-tmpdir-how-to-figure-out-what-size-it-should-beChanging the tmp folder of MySQLhttps://stackoverflow.com/questions/11990887/changing-the-tmp-folder-of-mysql

本文内容来源于对客户的三个问题的思考:

以下测试都是在 MySQL 8.0.21 版本中完成,不同版本可能存在差异,可自行测试;

临时表和临时文件都是用于临时存放数据集的地方;

一般情况下,需要临时存放在临时表或临时文件中的数据集应该符合以下特点:

从临时表|临时文件产生的主观性来看,分为2类:

用户创建临时表:

  -- 用户创建临时表(只有创建临时表的会话才能查看其创建的临时表的内容)

  注意:

  可以创建和普通表同名临时表,其他会话可以看到普通表(因为看不到其他会话创建的临时表);

  创建临时表的会话会优先看到临时表;

  -- 同名表的创建的语句如下

  当存在同名的临时表时,会话都是优先处理临时表(而不是普通表),包括:select、update、delete、drop、alter 等 *** 作;

查看用户创建的临时表:

  任何 session 都可以执行下面的语句;

  查看用户创建的当前 active 的临时表(不提供 optimizer 使用的内部 InnoDB 临时表信息)

  注意

  用户创建的临时表,表名为t1,

  但是通过 INNODB_TEMP_TABLE_INFO 查看到的临时表的 NAME 是#sql开头的名字,例如:#sql45aa_7c69_2 ;

  另外 information_schema.tables 表中是不会记录临时表的信息的。

用户创建的临时表的回收:

用户创建的临时表的其他信息&参数:

  会话临时表空间存储 用户创建的临时表和优化器 optimizer 创建的内部临时表(当磁盘内部临时表的存储引擎为 InnoDB 时);

  innodb_temp_tablespaces_dir 变量定义了创建 会话临时表空间的位置,默认是数据目录下的#innodb_temp 目录;

  文件类似temp_[1-20].ibt ;

  查看会话临时表空间的元数据:

  用户创建的临时表删除后,其占用的空间会被释放(temp_[1-20].ibt文件会变小)。

  在 MySQL 8.0.16 之前,internal_tmp_disk_storage_engine 变量定义了用户创建的临时表和 optimizer 创建的内部临时表的引擎,可选 INNODB 和 MYISAM ;

  从 MySQL 8.0.16 开始,internal_tmp_disk_storage_engine参数被移除,默认使用InnoDB存储引擎;

  innodb_temp_data_file_path 定义了用户创建的临时表使用的回滚段的存储文件的相对路径、名字、大小和属性,该文件是全局临时表空间(ibtmp1);

  可以使用语句查询全局临时表空间的数据文件大小:

SQL 什么时候产生临时表|临时文件呢?

  需要用到临时表或临时文件的时候,optimizer 自然会创建使用(感觉是废话,但是又觉得有道理=.=!);

  (想象能力强的,可以牢记上面这句话;想象能力弱的,只能死记下面的 SQL 了。我也弱,此处有个疲惫的微笑

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/6106055.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-15
下一篇 2023-03-15

发表评论

登录后才能评论

评论列表(0条)

保存