我的虚拟主机已升级其服务器。他们安装的较新的 5.7.27 版本的 MySQL 有 LOAD DATA LOCAL INFILE
默认情况下禁用,导致当我尝试执行该命令时出现错误 1148。不幸的是,我无法启动或停止 MySQL 实例,因为它是在 Web 主机的控制之下。有哪些解决方法或替代方法可以让我以最少的努力导入数据?我想要导入的所有数据目前均为 TSV(制表符分隔值)格式,但如果需要,我可以切换为 CSV 或其他格式。如果有帮助的话,我也安装了 Workbench。
问题与this one基本相同,但我无法访问和重新配置服务器(该问题的选定答案)。
最佳答案
我会编写一个 Python 脚本来获取 TSV 输入,并使用它在循环中生成 INSERT
语句。每个语句可能会处理 100-200* 个新行。然后它会执行这些语句。
在同一服务器上运行它。在事务中执行此操作,这样如果出现错误,您就不会在前几次尝试中陷入困惑。
现在你已经完成了:TSV 导入。
* 或者,好吧,无论你想要什么。一次执行一个操作会很慢(因为每个 SQL 语句的执行都会产生很小的开销),但您可能无法将它们全部转储到单个 INSERT
中,除非数量的信息量很小。检查您的服务器设置/限制,并为您的用例提出合理的批量大小。对于 <2000 行和相当“短”的行数据,每个语句 100-200 行通常是合适的。
伪代码:
batchSize = 100
buffer = []
handleInput():
for each line in tsvFile:
data = parse(line)
add data to buffer
if size(buffer) > batchSize:
flushBuffer
if size(buffer) > batchSize:
flushBuffer
flushBuffer:
str = "INSERT INTO tbl (col1, col2, col3) VALUES"
for each row in buffer:
if !str.empty():
str += ","
str += "(" + row[col1] + ", " + row[col2] + ", " + row[col3];
executeSqlStatement(str)
buffer = []
关于mysql - 加载本地数据文件的解决方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59515701/