当我在MySQL中执行查询时,我收到此错误:
错误代码:23
打开文件时没有资源'。\ test \ sample_table#P#p364.MYD' (错误代码:24 - 打开文件过多)
MySQL版本详细信息:
VERSION 5.6.21
version_comment MySQL Community SERVER (GPL)
version_compile_machine x86_64
version_compile_os Win64
如何解决这个问题?
答案 0 :(得分:10)
mysql错误:打开文件时资源不足...(错误代码:24)表示已超出允许打开msyql的文件数。
此限制由变量open_files_limit控制。您可以在phpMyAdmin(或MySQL命令行实用程序)中使用以下语句读取此内容:
SHOW VARIABLES LIKE 'open%'
要将此变量设置为更高的数字,请编辑/etc/my.cnf文件并添加以下行:
[mysqld]
open_files_limit = 5000
答案 1 :(得分:0)
This answer解释了错误代码24(位于错误消息的末尾)。
答案 2 :(得分:0)
如果您(像我一样)通过对35k行数据运行单个插入查询来进行一些hacky服务器维护,那么提升open_files_limit
不答案。尝试将你的陈述分成多个一口大小的作品。
以下是我解决问题的一些python代码,用于说明:
headers = ['field_1', 'field_2', 'field_3']
data = [('some stuff', 12, 89.3), ...] # 35k rows worth
insert_template = "\ninsert into my_schema.my_table ({}) values {};"
value_template = "('{}', {}, {})"
start = 0
chunk_size = 1000
total = len(data)
sql = ''
while start < total:
end = start + chunk_size
values = ", \n".join([
value_template.format(*row)
for row in data[start:end]
])
sql += template.format(headers, values)
start = end
请注意,我不建议像这样运行这样的语句;我的工作很快,很脏,忽视了适当的清洁和连接管理。