【mysql】mysql执行load data遇到的问题总结(全)
#问题一:
使用python
连接 mysql load data
报错。
报错内容:
(1148, u'The used command is not allowed with this MySQL version')
问题原因:
python
通过load data
导入mysql 数据库时候需要配置connect
为 local_infile=1
解决方案:
- 查看mysql服务端配置
show global varaiables like 'local_infile';
- 得到结果
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| local_infile | OFF |
+---------------+-------+
1 row in set (0.00 sec)
- 修改服务端配置
set global local_infile = 'ON';
此时,使用客户端连接的方式,是可以成功的load data,但是使用python
的方式进行load data
仍然是不行,还需要继续配置。
- 修改服务端配置
set global local_infile = 1;
python
连接mysql
代码处添加参数
local_infile=1
最终代码如下:
db = pymysql.connect(hostname, user, password, database, port=port, local_infile=1)
问题二:
命令执行成功,但其实没有导入数据
问题原因:
pymysql
在连接数据库的时候会有一个参数autocommit
默认为False
,表示执行完SQL语句后是否自动提交到真正的数据库,如果没有设置为True
,那么你执行sql过后,是需要显式提交的,即conn.commit()
。
解决方案:
db = pymysql.connect(hostname, user, password, database, port=port, local_infile=1, autocommit=True)
问题三:
使用python load data
导入数据,如何指定导入的字段。
解决方法:
最后加上(字段名1, 字段名2,字段名3)
案例如下:
load data infile 'elasticsearch.txt' into table es_shard_store fields terminated by ' ' lines terminated by '\n' (disk, index_uuid, node) ;
问题四:
使用python load data导入数据,报找不到该文件,但是该文件确实存在。
问题原因:
导入模式不是本地文件模式,默认是去找mysql所在节点目录下的文件。
解决方法:
加上 local
关键字
案例如下:
load data local infile 'elasticsearch.txt' into table es_shard_store fields terminated by ' ' lines terminated by '\n' (disk, index_uuid, node) ;
问题五:
报错内容:
'Loading local data is disabled; this must be enabled on both the client and
问题原因:
提示是限制了本地文件加载:
根据文档LOAD DATA LOCAL提示:https://dev.mysql.com/doc/refman/8.0/en/load-data-local-security.html#load-data-local-permitted-files
解决方案:
修改本地加载功能:
set global local_infile = 1;
参考文章
https://blog.csdn.net/u010787690/article/details/80473419
https://blog.csdn.net/rainjeyin/article/details/107779060
https://www.cnblogs.com/Thancoo/p/mysql8loaddatadisable.html