在mysql数据库的使用过程中,导入数据是经常会遇到的操作,无论是恢复备份数据、迁移项目数据还是初始化测试数据,都需要掌握对应的导入方法。不同的数据格式和场景对应不同的导入方案,下面逐一介绍常用的导入方式。

使用mysql命令行导入sql文件
这是最基础的导入方式,适合导入完整的sql备份文件,操作步骤如下:
步骤1:登录mysql服务
打开终端或者命令行工具,输入以下命令登录mysql,需要替换对应的用户名和密码:
# 登录mysql,-u后面是用户名,-p后面会提示输入密码 mysql -u root -p
步骤2:选择目标数据库
登录成功后,先选择要导入数据的数据库,如果没有需要先创建:
-- 查看所有数据库 SHOW DATABASES; -- 创建新的数据库,字符集设置为utf8mb4避免中文乱码 CREATE DATABASE IF NOT EXISTS test_db DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; -- 选择目标数据库 USE test_db;
步骤3:执行导入命令
如果sql文件在本地,可以直接使用source命令导入:
-- 替换为你的sql文件实际路径,注意路径分隔符用/或者\ source /home/user/backup.sql;
也可以不登录mysql,直接在命令行执行导入:
# 直接导入sql文件到指定数据库 mysql -u root -p test_db < /home/user/backup.sql
使用LOAD DATA语句导入文本数据
如果是csv、txt等文本格式的结构化数据,使用LOAD DATA语句效率更高,适合大批量数据导入。
基本语法
LOAD DATA [LOCAL] INFILE '文件路径'
INTO TABLE 表名
[CHARACTER SET 字符集]
[FIELDS
[TERMINATED BY '字段分隔符']
[ENCLOSED BY '字段包围符']
[ESCAPED BY '转义符']
]
[LINES
[STARTING BY '行起始符']
[TERMINATED BY '行结束符']
]
[IGNORE 忽略行数 LINES]
[(列1,列2,...)]
示例:导入csv文件
假设有一个用户数据文件user.csv,内容如下:
id,name,age,email 1,张三,20,zhangsan@ipipp.com 2,李四,22,lisi@ipipp.com 3,王五,25,wangwu@ipipp.com
对应的用户表结构为:
CREATE TABLE user (
id INT PRIMARY KEY,
name VARCHAR(50),
age INT,
email VARCHAR(100)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
导入该csv文件的sql语句如下:
-- LOCAL表示文件在客户端本地,没有LOCAL则表示文件在mysql服务器上 LOAD DATA LOCAL INFILE '/home/user/user.csv' INTO TABLE user CHARACTER SET utf8mb4 FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '\' LINES TERMINATED BY 'n' IGNORE 1 LINES (id,name,age,email);
使用可视化工具导入数据
如果不熟悉命令行,也可以使用Navicat、DBeaver等可视化工具导入,以Navicat为例:
- 连接目标mysql数据库,右键点击要导入数据的数据库,选择运行SQL文件
- 在弹出的窗口中选择本地的sql文件,设置编码为utf8mb4,点击开始即可完成导入
- 如果是导入表格数据,可以右键点击目标表,选择导入向导,按照提示选择文件类型、设置分隔符等参数即可
常见问题及解决办法
| 问题 | 原因 | 解决办法 |
|---|---|---|
| 导入sql文件时报权限错误 | mysql用户没有对应数据库的操作权限 | 给对应用户授予所有权限:GRANT ALL PRIVILEGES ON test_db.* TO 'user'@'localhost';然后执行FLUSH PRIVILEGES; |
| LOAD DATA导入时报文件找不到 | 文件路径错误或者没有LOCAL参数 | 确认文件路径正确,本地文件添加LOCAL参数,服务器文件确认mysql进程有读取权限 |
| 导入后中文乱码 | 文件编码和数据库字符集不一致 | 导入时指定CHARACTER SET为utf8mb4,确保sql文件或者文本文件编码为UTF-8 |
| 大文件导入超时 | mysql默认的执行时间限制 | 登录mysql后执行SET GLOBAL max_execution_time=0;取消时间限制,或者调整配置文件中的对应参数 |
注意事项
- 导入前建议先备份目标数据库现有数据,避免数据被覆盖
- sql文件中如果包含DROP TABLE语句,需要确认是否要清空原有表
- 导入大文件时尽量选择服务器空闲时段,避免影响正常业务
- 如果是迁移数据,导入后需要检查表结构、索引、触发器是否正常