MySQL数据库导入导出大文件,source命令实操
为什么大文件导入导出推荐用 source 命令
当 SQL 文件体积达到几百 MB 甚至几 GB 时,用 phpMyAdmin 或图形工具导入经常超时或内存溢出。
MySQL 自带的 source 命令在命令行下执行,不依赖 Web 环境,能稳定处理大文件。
本文面向零基础用户,带你完成从导出到导入的全过程,并给出常见报错的处理方法。
操作前的环境确认
开始之前,请先确认以下三点,避免中途卡住:
- 已安装 MySQL 客户端,能在终端执行
mysql --version看到版本号。 - 拥有目标数据库的账号和密码,且账号具备
FILE权限(导入导出大文件时可能用到)。 - SQL 文件已上传到服务器,建议放在
/tmp或数据盘目录,并记录完整路径。
如果文件在本地电脑,先用 scp 或宝塔面板文件管理上传到服务器。
例如:
scp /本地路径/backup.sql root@服务器IP:/tmp/
导出大文件:mysqldump 基础用法
导出是导入的前提。
假设要导出数据库 mydb,用户 root,密码 123456,执行:
mysqldump -u root -p mydb > /tmp/mydb_backup.sql
回车后输入密码。
如果数据库很大,建议加上 --single-transaction 保持一致性,并压缩输出节省空间:
mysqldump -u root -p --single-transaction mydb | gzip > /tmp/mydb_backup.sql.gz
导出完成后,用 ls -lh /tmp/mydb_backup.sql* 查看文件大小,确认不是 0 字节。
导入大文件:source 命令完整步骤
第一步:登录 MySQL
在终端执行:
mysql -u root -p
输入密码后进入 mysql> 提示符。
第二步:选择目标数据库
如果数据库已存在,直接切换:
use mydb;
如果还没创建,先执行:
CREATE DATABASE mydb DEFAULT CHARACTER SET utf8mb4;
use mydb;
第三步:执行 source 导入
在 mysql> 提示符下输入:
source /tmp/mydb_backup.sql;
如果文件是 .gz 压缩包,需要先解压:
gunzip /tmp/mydb_backup.sql.gz
然后重复上面的 source 命令。
导入过程中屏幕可能快速滚动,不要中断。
完成后会出现 Query OK 或返回 mysql> 提示符。
第四步:验证导入结果
导入结束后,执行:
SHOW TABLES;
SELECT COUNT(*) FROM 某张表;
对比导出前的表数量和行数,确认数据完整。
避坑指南:大文件导入常见报错与处理
- 报错
ERROR 2006 (HY000): MySQL server has gone away:通常是max_allowed_packet太小。临时调大:SET GLOBAL max_allowed_packet=1024*1024*1024;然后重新导入。永久生效需修改my.cnf中的max_allowed_packet并重启 MySQL。 - 报错
ERROR 1044 (42000): Access denied:当前账号没有目标库权限,换用高权限账号或让管理员授权。 - 导入中途卡住不动:检查磁盘空间
df -h,以及 SQL 文件是否完整。 - 中文乱码:确认导入时数据库字符集为
utf8mb4,导出时也使用相同字符集。
几个容易被忽略的细节
source 命令后必须跟绝对路径,不能写相对路径,否则会提示找不到文件。
如果 SQL 文件里有 CREATE DATABASE 语句,导入前可以不手动建库,但建议先确认不会覆盖现有库。
导入大文件期间,避免同时执行其他写操作,减少锁冲突。
常见疑问
source 和 mysql < 文件 有什么区别?
source 是在 MySQL 交互界面内执行,适合边导入边观察;mysql -u root -p mydb < backup.sql 是在系统命令行直接导入,两者效果类似,大文件都可用。
导入到一半失败了,能续传吗?
MySQL 不支持断点续传。需要清空目标库或删掉已导入的表,重新执行 source。建议导入前先备份。
source 命令支持 Windows 吗?
支持,在 MySQL 命令行客户端中同样使用 source D:/backup.sql,注意路径用正斜杠或双反斜杠。
导入后表数量对但数据少了?
检查 SQL 文件是否在导出时用了 --where 条件,或导入时是否被 max_allowed_packet 截断。重新导出并导入一次。
掌握以上步骤后,几百 MB 到几 GB 的 SQL 文件都能通过 source 命令稳定导入。
遇到报错时优先看错误码,再对照避坑部分调整参数。