在运行bg.sql的时候,提示Error 1114 (HY000):The table ’ ’ is full.
开始,我想着是磁盘空间不足,想把TEMP文件存到C盘以外的磁盘中去。为此,我压缩了G盘,新建了一个H盘,并且在其中建立了文件夹 MySQL_Temp。同时,还要设置该磁盘的权限:属性 > 安全 > 编辑 > 完全控制。
在C:/Program Files/MySQL/my.ini,这个配置文件中添加
tmpdir = H://MySQL_Temp
语句在[mysql]栏下。
重启mysql服务后,虽然临时缓存换成了H盘,但还是提示Error 1114;
查了网上的教程后,网友建议在my.ini中添加
tmp_table_size = 256M
max_heap_table_size = 256M
但是,就算我把上限设置为100000M,Error 1114也没有解决;
查了外网论坛后,又有一种方法,即在my.ini中添加:
innobd_data_file_path = ibdata1:10M:autoextend:max:512M
同样,我将上限调到1000000M都没有解决问题。
理论上,InnoBD引擎在处理海量数据时更有优势,但有老帖子提到,这个引擎也有些问题: transactionor 大于1024时不好使。说实话,我没看懂这什么意思,但先假定是引擎的问题。那就换引擎啦!将innobd相关的语句在my.ini中注释掉,添加语句如下:
tmp_table_size = 256M
max_heap_table_size = 256M
default_storage_engine = MEMORY
internal_tmp_men_storage_engine = MEMORY
重启mysql后,再次运行程序就没有报错。
反思:
我运行的程序主要的语句是WITH AS,会不会这个语句更适合在MEMORY引擎下运行?
附记:
我用命令提示符运行的mysql:
net start mysql #注意要先cd至sql文件所在位置
mysql -u root -p my_database < test.sql > test.log
最后生成了一个100M的log文件,我用R语言处理后,以数据框的形式存储:
library(data.table)
library(tidyverse)
setwd('G:/') #转换至log保存的路径
test <- read.table('test.log', T, sep = '\t') %>% as.data.table
write.csv(test, 'G:/test.csv')