MySQL数据库导入sql文件报错解决

前言

导入SQL文件到MySQL,经常报各种错。本文总结最常见的导入报错和解决方法。

常用导入命令

mysql -u root -p 数据库名 < xxx.sql

或者登录MySQL后:

source /路径/xxx.sql;

常见报错及解决

报错1:Unknown database

ERROR 1049 (42000): Unknown database 'xxx'

原因: 数据库不存在。

解决: 先创建数据库:

CREATE DATABASE xxx DEFAULT CHARSET utf8mb4;

然后再导入。

报错2:Access denied

ERROR 1044 (42000): Access denied for user

原因: 用户没权限。

解决: 用root用户导入,或者给用户授权。

报错3:File not found

ERROR 1045 (28000): Access denied

或者文件找不到。

原因: 文件路径不对,或者文件权限不对。

解决:

  1. 确认文件存在:ls -l /路径/xxx.sql
  2. 确认文件可读:chmod 644 /路径/xxx.sql
  3. 用绝对路径,别用相对路径

报错4:Table already exists

ERROR 1050 (42S01): Table 'xxx' already exists

原因: 表已经存在了。

解决: 两种方法:

  1. 先删表再导入:DROP TABLE xxx;
  2. SQL文件里加 DROP TABLE IF EXISTS xxx;

报错5:Duplicate entry

ERROR 1062 (23000): Duplicate entry 'xxx' for key

原因: 主键重复。

解决:

  1. 先清空表再导入
  2. 或者用 INSERT IGNORE 跳过重复

报错6:字符集乱码

导入后中文变成乱码。

原因: 字符集不对。

解决: 导入前设置字符集:

SET NAMES utf8mb4;
source /路径/xxx.sql;

或者命令行指定:

mysql -u root -p --default-character-set=utf8mb4 数据库名 < xxx.sql

报错7:max_allowed_packet太小

ERROR 2006 (HY000): MySQL server has gone away

原因: SQL文件太大,MySQL接收不了。

解决: 修改my.cnf,加大max_allowed_packet:

[mysqld]
max_allowed_packet = 64M

重启MySQL生效。

导入大文件技巧

方法1:分卷压缩

把大SQL文件拆成小的:

split -b 10M xxx.sql small_

然后逐个导入。

方法2:跳过外键检查

导入时临时关闭外键检查,更快:

SET FOREIGN_KEY_CHECKS = 0;
source /路径/xxx.sql;
SET FOREIGN_KEY_CHECKS = 1;

常见坑

坑1:用错用户名密码

导入时一直提示密码错误。

解决: 确认用户名密码,或者用 mysql -u root -p 交互式输入密码。

坑2:SQL文件不是UTF-8编码

导入后中文乱码。

解决: 用 file 命令查看文件编码:

file -i xxx.sql

坑3:没选对数据库

导入后数据不知道导到哪去了。

解决: 命令行一定要指定数据库名,或者先 USE 数据库名;

总结

导入SQL文件三步走:

  1. 先确认数据库存在
  2. 用正确的字符集导入
  3. 大文件就调大max_allowed_packet

记住: 报错信息一定要看清楚,别瞎试。

遇到问题加QQ23979811 协助处理


emer 发布于  2026-10-8 07:35