导入csv文件到docker容器中的MySQL
1. 问题概述
最近需要导入大批量的Excel表格数据到MySQL中,为了方便,直接将Excel文件保存为UTF-8编码的csv文件,采用逗号分割,使用MySQL的LOAD DATA INFILE
命令去实现这一功能。
2. 解决方案
首先设置好docker中的MySQL配置文件允许导出导入的目录权限
由于我这里的MySQL是之前就启动的容器里的,所以我为了方便,直接进到容器中去修改相关配置
-
使用命令
docker exec -it 你的容器名或ID /bin/bash
进入容器中 -
找到docker的安装目录,我这里是使用
whereis mysql
的命令找到了相应的安装目录在/etc/mysql
中,这时候另一个难题来了,众所周知,docker容器为了精简化,删除掉很多诸如vi/vim的文件编辑器,这里我只能使用cat EOF
来修改配置文件的内容。cat my.cnf cp my.cnf my1.cnf cat>my1.cnf<
将修改后的文件内容粘贴到终端中(这里要把
secure_file_priv
的值删除掉,也就是=号后边的NULL删除)结尾加上EOF结束文件编辑。重启容器。这时候再进到MySQL中SHOW VARIABLES LIKE "secure_file_priv"
;发现VALUE已经不再是NULL了,这里解释一下这个变量的区别- NULL,表示禁止。
- 如果value值有文件夹目录,则表示只允许该目录下文件(PS:测试子目录也不行)。
- 如果为空,则表示不限制目录。
设置启用MySQL的加载本地数据的功能
-
使用终端
mysql --local-infile=1 -h172.111.111.111 -u root -p123456 -P 2220
登录到docker中的MySQL中 -
查看是否开启加载本地文件
show variables like 'local_infile';
-
如果查询到的
value
值为OFF则开启全局本地文件设置set global set local_infile=on;
3. 导入数据
-
在终端中输入以下类似命令
LOAD DATA local INFILE 'C:\Users\Administrator\Desktop\pingan.csv' INTO TABLE baoxian FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n' IGNORE 1 LINES
运行即可导入CSV中的数据
Enjoy!
4. SQL语句语法解释
LOAD DATA INFILE
加载文件‘D:\tmcsv\sblc_45.csv’ 文件目录路径FIELDS TERMINATED BY
‘,’ 指定字段分隔符INTO TABLE tm_process
: 插入+表名OPTIONALLY ENCLOSED BY
‘\"’ 认为双引号中的是一个独立的字段。Excel 转 CSV 时,有特殊字符(逗号、顿号等)的字段,会自动用双引号引起来。LINES TERMINATED BY
‘\n’ 指定行分隔符,注意,在 Windows 平台上创建的文件,分隔符是 ‘\r\n’IGNORE 1 LINES
:忽略第一行,第一行是字段名的可以加( reg_no, class_id, apply_title, apply_status, date, apply_no)
对应的表字段名然后,创建数据表tm_process,根据csv的字段自己创建。
- 0
-
分享