導讀
MySQL 5.7的目標是成為發(fā)布以來最安全的MySQL服務器,其在SSL/TLS和全面安全開發(fā)方面有一些重要的改變。
MySQL 5.7起支持獨立臨時表空間,但個別時候也可能會踩坑的。
MySQL 5.7起,開始采用獨立的臨時表空間(和獨立的undo表空間不是一回事喲),命名ibtmp1文件,初始化12M,且默認無上限。
選項 innodb_temp_data_file_path 可配置臨時表空間相關參數(shù)。
| innodb_temp_data_file_path = ibtmp1:12M:autoextend | 
臨時表空間的幾點說明
有時執(zhí)行SQL請求時會產生臨時表,極端情況下,可能導致臨時表空間文件暴漲,幫人處理過的案例中最高漲到快300G,比以前遇到的 ibdata1 文件暴漲還要猛…
臨時表使用的幾點建議
附:臨時表測試案例
表DDL
| CREATE TEMPORARY TABLE `tmp1` ( `id` int(10) unsigned NOT NULL DEFAULT '0', `name` varchar(50) NOT NULL DEFAULT '', `aid` int(10) unsigned NOT NULL AUTO_INCREMENT, `nid` int(11) unsigned GENERATED ALWAYS AS ((`id` + 1)) VIRTUAL NOT NULL, `nnid` int(11) unsigned GENERATED ALWAYS AS ((`id` + 1)) STORED NOT NULL, PRIMARY KEY (`aid`), KEY `name` (`name`), KEY `id` (`id`), KEY `nid` (`nid`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 | 
原表大小只有 120MB,從這個表直接 INSERT…SELECT 導數(shù)據(jù)到tmp1表。
| -rw-r----- 1 yejr imysql 120M Apr 14 10:52 /data/mysql/test/sid.ibd | 
生成臨時表(去掉虛擬列,臨時表不支持虛擬列,然后寫入數(shù)據(jù)),還更大了(我也不解,以后有機會再追查原因)。