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


    晚上收到告警MySQL数据库服务器磁盘占满发现是,数据库在tmpdir写数据的文件占用过大

    执行命令lsof -n | grep deleted印出所有针对已删除文件的读写操作,这类操作是无效的,也正是磁盘空间莫名消失的根本原因!
    
    主要原因是很多进程使用后台执行,在执行完成后,有删除日志操作,但进程未停止,所以导致日志还继续占用磁盘容量,查询到该步后,直接重启一下应用服务,释放基础即可。
    另外需注意,删除大的日志文件时,最好关闭写入它的程序,或 用 echo > logfile 把日志文件倒空。

    需要重启mysql服务才能释放掉。重启时发现MySQL停不掉,使用了比较暴力的方法,直接kill掉进程,这种方法不推荐会损坏数据库文件造成服务无法启动。

    下面介绍一下MYSQL 5.7中临时文件的使用

    使用临时文件
    一、使用tmpdir
    1、执行计划file sort    文件名字MY开头
    lsof|grep delete
    如:/tmp/MYdRH1GW (deleted)
    
    2、大事物binary log缓存 文件名字ML开头
    lsof|grep delete
    如:/tmp/MLq9INFu (deleted)
    
    3、压缩的tempory table  
    CREATE TEMPORARY TABLE tmp_table1(id int) ROW_FORMAT=COMPRESSED ;
    ls /tmp/
    如:
    #sql6b82_6_7.frm
    #sql6b82_6_7.ibd
    
    4、online DDL 涉及排序比如add key
    alter table testsort add key(id);
    lsof|grep delete
    如:
    /tmp/ibCxlYQg (deleted)
    /tmp/ib51nvZ1 (deleted)
    设置 innodb_tmpdir可以将这类文件放到指定的目录
    
    二、使用innodb_temp_data_file_path
    1、执行计划use temporay table 5.7以后为innodb 内部表
    2、非压缩tempory table  
    CREATE TEMPORARY TABLE tmp_table1(id int);
    可以使用 select * from INNODB_TEMP_TABLE_INFO  ;查询
    这些也看不到 表现为innodb表
    
    
    三、使用innodb data 
    就是online ddl 
    1、ALGORITHM copy 名字为 #sql-
      alter table testsort ALGORITHM=copy ,add  im int  ;
    #sql-6b82_6.frm
    #sql-6b82_6.ibd
    
    2、ALGORITHM inplace 名字为 #sql-ib 
      alter table test add key id int
    比如
    #sql-6b82_6.frm
    #sql-ib59-867962583.ibd
    但是涉及到排序比如add key 则使用tmpdir或者innodb_tmpdir见上

    Mysql tmpdir参数修改

    由于操作系统的/tmp空间有限,需要进行参数修改,将tmpdir的值路径进行修改。
    
    mysql> show variables like 'tmpdir';
    
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | tmpdir        | /tmp  |
    +---------------+-------+
    1 row in set (0.00 sec)
    
    mysql> set global tmpdir = '/Data/app/mysql5.6.25/mysqltmp';
    ERROR 1238 (HY000): Variable 'tmpdir' is a read only variable
    
    只能通过配置文件进行修改了。
    重启mysql 
    
    mysql> show variables like 'tmpdir';
    +---------------+--------------------------------+
    | Variable_name | Value                          |
    +---------------+--------------------------------+
    | tmpdir        | /mysql5.6/var/tmp |
    +---------------+--------------------------------+
    1 row in set (0.00 sec)
    
    问一下:但是生产环境不能重启服务,这要怎么搞呢?
    答:最好搭建主从同步或其他高可用架构,将业务切换至备机,在重启MySQL服务

    转自

    MYSQL 5.7中临时文件的使用_ITPUB博客 http://blog.itpub.net/7728585/viewspace-2146356/

    (1条消息)Linux文件系统被占用,磁盘使用量与实际不一致 - peterxiaoq的专栏 - CSDN博客 https://blog.csdn.net/peterxiaoq/article/details/78676046

    Mysql tmpdir参数修改-任何事贵在坚持!-51CTO博客 https://blog.51cto.com/zhaowl/1743293

  • 相关阅读:
    高斯核函数的代码体现
    程序编译
    DoH
    随笔1
    获取节点值的方式
    DOM解析XML
    URLConnection发送请求,并接收数据
    myeclipse编译后的jsp文件存放位置
    各种中文乱码
    各种提交的区别
  • 原文地址:https://www.cnblogs.com/paul8339/p/11983747.html
Copyright © 2020-2023  润新知