想在mysql8.0.32里导入txt文件,遇到几个报错,找到一些解决方法,在这里归纳整理:
1、中文操作手册里,查到用以下语句可以实现导入。
mysql> LOAD DATA LOCAL INFILE '/path/pet.txt' INTO TABLE pet;
但出现报错:
10:47:28 LOAD DATA LOCAL INFILE 'D:\mysql学习\menagerie-db\pet.txt' INTO TABLE pet Error Code: 3948. Loading local data is disabled; this must be enabled on both the client and server sides 0.000 sec
解决方法:
Step1:检查一个全局系统变量 'local_infile' 的状态:
show global variables like 'local_infile';
如果得到如下显示 Value=OFF,则说明这是不可用的。如果得到的是 Value=ON,请直接跳往Step3
Step2:要把这个值变为 ON,这里找到两种方法:
第一种方法:
1).在mysql客户端输入:
set global local_infile=1;
2).然后退出quit 退出mysql。再次进入时,便会出现 Value=ON
第二种方法:
1).在 C:\ProgramData\MySQL\MySQL Server 8.0(此处为Windows10系统) 路径下,找到初始化文件 my.ini,打开
2).找到以 [client], [mysql], [mysqld] 开头的三处位置,在每处的下面加一行 local_infile=ON,保存更改
3).重启mysql服务器后,同样会得到预期的结果
Step3:
在进入数据库的命令行要加上 --local_infile=1 这个配置,具体如下:
mysql --local_infile=1 -u <username> -p
2、我把local_infile变量设置成ON。
然后再执行mysql> LOAD DATA LOCAL INFILE '/path/pet.txt' INTO TABLE pet;
仍然报错:
10:52:12 LOAD DATA LOCAL INFILE 'D:\mysql学习\menagerie-db\pet.txt' INTO TABLE pet Error Code: 2068. LOAD DATA LOCAL INFILE file request rejected due to restrictions on access. 0.000 sec
继续找解决方案。
在workbench里面导数,步骤如下:
Step1:执行代码:show variables like '%secure%'; 查看安全路径;
Step2:找到安全路径,把数据文件拷贝进去。这里注意的是,ProgramData文件夹默认情况下是隐藏的,需要把它显示出来,再把文件烤进去。
Step3:最后执行以下导入语句,注意路径里的双斜杠 '\\',导入成功了!
LOAD DATA INFILE 'C:\\ProgramData\\MySQL\\MySQL Server 8.0\\Uploads\\pet.txt' INTO TABLE pet1;