mysql如何导入数据:四种主流方案对比
mysql如何导入数据分为命令行source、mysql命令、LOADDATAINFILE、图形工具导入四类,source适合本地sql文件批量执行,mysql命令可直接管道导入,LOADDATAINFILE导入csv文本速度更快,图形工具适合不熟悉命令的使用者;LOADDATAINFILE会受secure_file_priv参数限制,该参数不为空时,文件只能放在参数指定目录,这一限制只针对服务器本地文件导入,客户端本地文件导入用LOADDATALOCALINFILE,部分版本默认关闭local_infile开关,需要提前在配置文件开启。
mysql如何导入数据之命令行source方式
你先登录mysql客户端,进入目标数据库,再执行source完整文件路径,路径分隔在Windows下建议使用斜杠,避免转义字符报错。这个方法会逐行执行文件里的SQL语句,包含建表、插入、索引、存储过程等全部内容,适合备份出来的sql整库迁移。文件编码要和数据库字符集匹配,文件是gbk而数据库是utf8mb4时,中文大概率出现乱码,导入前可以先用记事本另存为utf8编码。
source导入大文件时不会显示实时进度,只能等待执行结束,上万行的sql文件导入耗时会明显变长,导入期间不要中断会话,断开连接会直接终止导入,已经执行成功的语句不会自动回滚。
mysql如何导入数据之mysql管道命令
不用进入mysql交互界面,直接在系统终端执行mysql-u账号-p密码库名<文件.sql,回车即可开始导入。这条命令和source底层执行逻辑接近,区别是在操作系统层面做输入重定向,适合写进定时脚本、自动化迁移流程。密码直接写在命令里会留在终端历史记录,生产环境更推荐只写-p,执行后手动输入密码。
mysql如何导入数据之LOADDATA文本导入
LOADDATAINFILE专门用来导入csv、txt这类结构化文本,比逐条insert快很多,百万级数据场景优势明显。基础写法为LOADDATAINFILE'文件路径'INTOTABLE表名FIELDSTERMINATEDBY','ENCLOSEDBY'"'LINESTERMINATEDBY'\n'IGNORE1ROWS,IGNORE1ROWS用来跳过表头行。
你使用LOCAL关键字时,文件读取权限来自客户端,不受secure_file_priv目录约束,但需要服务端和客户端同时开启local_infile。有一个高频错误操作,直接把本地csv用不带LOCAL的语句导入,会抛出找不到文件报错,很多新手在这里混淆服务端和客户端文件位置。
mysql如何导入数据之图形工具导入
Navicat、DBeaver这类工具自带导入向导,你选择目标表,选定本地文件,再依次配置分隔符、编码、跳过行数、字段映射,可视化完成导入,不需要记忆语法。它内部底层封装了LOADDATA或者批量insert,小数据量使用体验友好,千万行以上大数据导入时,速度通常弱于直接使用LOADDATA语句。
| 导入方式 | 适合文件 | 速度 | 主要限制 |
|---|---|---|---|
| source | sql备份文件 | 中等 | 依赖mysql会话,无进度反馈 |
| mysql管道 | sql备份文件 | 中等 | 明文密码存在泄露风险 |
| LOADDATAINFILE | csv、txt文本 | 较快 | 受secure_file_priv参数管控 |
| 图形向导 | sql、csv | 小文件合适 | 大数据导入效率偏低 |
导入前核对表结构。
目标表字段顺序、数据类型必须和待导入文件对齐,数值字段传入字符串、日期格式不匹配,会出现数据截断或者导入失败。导入前可以先单独创建空表,主键、唯一索引提前建好,导入时重复主键会触发报错,你可以搭配IGNORE或者REPLACE控制冲突处理逻辑,IGNORE会跳过重复行,REPLACE会用新数据覆盖原有记录。
导入完成后,你执行selectcount(*)from目标表核对行数,抽样查询几条数据校验内容、中文、日期是否正常,确认导入结果。
secure_file_priv设置为NULL时,所有LOADDATA文件导入功能禁用,只能改用source或者图形工具导入sql格式数据。
description:mysql如何导入数据有source、mysql管道、LOADDATAINFILE、图形工具四种方式,source适合sql备份,LOADDATA导入csv速度更快,会受secure_file_priv参数约束,导入前需要核对表结构、编码,处理主键冲突。