使用命令行工具导入
命令行是专业数据库管理员和开发者的首选,因为它功能强大、效率高且适合自动化脚本。

mysql 命令重定向导入
这是最经典的导入SQL脚本文件的方法,它将一个包含SQL语句(如CREATE TABLE和INSERT INTO)的.sql文件直接导入到指定的数据库中。
- 
语法结构:
mysql -u [用户名] -p [数据库名] < [文件路径].sql
 - 
参数说明:
-u [用户名]:指定登录MySQL的用户名。-p:提示输入密码(为了安全,建议不要在-p后直接写密码)。[数据库名]:目标数据库的名称,该数据库必须已存在。<:重定向符号,将后面的文件内容作为标准输入传递给mysql命令。[文件路径].sql:要导入的SQL文件的完整或相对路径。
 - 
示例: 假设有一个名为
backup.sql的文件在当前目录下,要将其导入到名为my_app_db的数据库中,用户为root。mysql -u root -p my_app_db < backup.sql
执行后,系统会提示输入
root用户的密码,验证成功后即开始导入过程。 
SOURCE 命令导入
此方法在已经登录到MySQL客户端后使用,适合执行多个脚本或在交互式会话中加载数据。

- 
语法结构:
SOURCE [文件路径];
或者使用其缩写:
\. [文件路径];
 - 
步骤:
- 首先登录MySQL,并选择目标数据库。
mysql -u root -p mysql> USE my_app_db;
 - 然后执行
SOURCE命令。mysql> SOURCE /home/user/backup.sql;
 
 - 首先登录MySQL,并选择目标数据库。
 
高效导入CSV等格式数据 (LOAD DATA INFILE)
当数据源是结构化的纯文本文件(如CSV或TSV)时,使用LOAD DATA INFILE命令是速度最快的方法,它直接读取文件并插入数据, bypasses(绕过)了SQL解析的开销,性能远超逐行INSERT。
- 
语法结构:
LOAD DATA INFILE '文件路径' INTO TABLE 表名 FIELDS TERMINATED BY '字段分隔符' ENCLOSED BY '字段包裹符' LINES TERMINATED BY '行分隔符' IGNORE 1 LINES; -- 如果CSV文件有标题行,使用此选项忽略第一行
 - 
示例: 假设有一个
users.csv如下,要导入到users表中。id,name,email 1,"Alice","alice@example.com" 2,"Bob","bob@example.com"
对应的导入命令为:
LOAD DATA INFILE '/tmp/users.csv' INTO TABLE users FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 LINES;
 - 
注意事项: 使用此命令时,需要确保MySQL服务器有权限读取指定文件,且文件路径必须在
secure_file_priv系统变量指定的目录中,可以通过SHOW VARIABLES LIKE 'secure_file_priv';查看该目录。
 
利用图形化界面(GUI)工具导入
对于不习惯命令行的用户,图形化工具提供了直观、易操作的导入功能,常见的工具有MySQL Workbench、phpMyAdmin、Navicat等。
以phpMyAdmin为例,导入步骤通常如下:
- 登录phpMyAdmin,选择目标数据库。
 - 点击顶部导航栏的“导入”选项。
 - 在“文件上传”区域,点击“选择文件”,选择要导入的
.sql或.csv文件。 - 根据文件类型,在“格式”部分进行相应设置(如CSV的格式选项)。
 - 点击页面底部的“执行”按钮,即可开始导入。
 
GUI工具的优点是可视化、配置简单,尤其适合中小型文件和初学者,但对于超大文件(如GB级别),可能会因PHP或Web服务器的超时限制而失败。
方法对比与选择
为了更清晰地做出选择,下表对比了上述几种主要方法:
| 方法 | 适用场景 | 速度 | 易用性 | 灵活性 | 
|---|---|---|---|---|
mysql命令重定向 | 
导入.sql脚本文件,自动化脚本 | 
快 | 中等 | 高 | 
SOURCE命令 | 
在MySQL会话中执行脚本 | 快 | 中等 | 高 | 
LOAD DATA INFILE | 
导入CSV/TSV等纯文本数据 | 非常快 | 较低 | 高 | 
| GUI工具 (如phpMyAdmin) | 中小型文件,非技术用户 | 较慢 | 非常高 | 中等 | 
导入过程中的注意事项
- 备份先行:在执行任何导入操作前,尤其是对已有数据的数据库,务必先进行完整备份,以防操作失误导致数据丢失。
 - 字符集编码:确保导入文件的字符集(如UTF-8)与目标数据库或表的字符集一致,否则极易出现中文乱码问题。
 - 大文件优化:导入大型SQL文件时,可以临时调大MySQL的
max_allowed_packet参数,以避免因单个SQL语句过大而失败,对于LOAD DATA INFILE,导入前可以暂时禁用索引和外键检查,导入完成后再重新启用,能显著提升速度。 - 错误检查:导入后,应检查数据行数、内容是否正确,并留意MySQL的错误日志,以便及时发现并解决问题。
 
相关问答 (FAQs)
导入大文件时遇到错误或中断怎么办?
解答: 导入大文件(如超过1GB的SQL文件)时,常见问题包括超时和内存限制,可以尝试通过命令行导入,因为它不受Web服务器超时限制,如果使用mysql命令行工具仍然报错,可能是max_allowed_packet变量值太小,可以临时调大它,启动mysql时加入--max_allowed_packet=512M参数,对于特别巨大的文件,最佳实践是将其分割成多个小文件后逐一导入。
使用 LOAD DATA INFILE 提示 'secure_file_priv' 错误应如何处理?
解答: 这个错误表示你试图导入的文件路径不在MySQL允许的目录内,MySQL通过secure_file_priv系统变量限制数据导入/导出操作,以增强安全性,解决方法有两种:一是将你的数据文件移动到secure_file_priv指定的目录下(可通过SHOW VARIABLES LIKE 'secure_file_priv';查询);二是在有足够权限的情况下,修改MySQL的配置文件(如my.cnf),设置secure_file_priv为一个空字符串(,表示允许任何目录)或你希望的特定目录,然后重启MySQL服务,出于安全考虑,推荐使用第一种方法。