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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM