同事发来一个 800MB 的 .sql 文件,说帮忙导进测试库。双击用记事本打开,内存直接飙满,编辑器卡了五分钟没动静。这个后缀不是普通文本,开法不对机器先扛不住。
它里面装的是什么
.sql 文件就是保存 SQL 语句的纯文本,文件大了才显得难搞。内容分几类:CREATE 建库建表,INSERT 塞数据,UPDATE、DELETE 改数据,还有 mysqldump 导出时自动加的锁表和 SET 语句。文件头几行通常写着版本和字符集,比如 utf8mb4,导入前先看它,和目标库的字符集对不上,中文就会变问号。
太大了别用图形界面
Navicat 和 DBeaver 导入几十 MB 以内很方便,执行 SQL 文件点运行即可;超过 500MB 就用命令行。MySQL 用 source 命令或重定向导入,SQL Server 用 sqlcmd,导入前把文件放到磁盘空间足的盘符。
mysql -u root -p testdb登录后执行 source 命令加文件全路径,也可以在图形工具里导入。SQL Server 用 sqlcmd -S 服务器 -d 库名 -i 备份文件,中途报错先看是不是 GO 分隔符没留好。
导出时注意三件事
- 字符集:mysqldump 加 default-character-set=utf8mb4,导出导入两边一致。
- 先锁表后导出:线上库导出加 single-transaction,InnoDB 不锁表也能拿到一致快照。
- 分片:超大单表导出可按主键范围分段,多份 .sql 依次导入,出错只重导一段。
打开查看用什么
几 MB 的小文件,VS Code、Notepad++ 直接开,语法高亮和折叠都有。大文件用 EmEditor 或 glogg,按需加载不吃内存。确认文件内容先看前五十行:版本、字符集、有没有 DROP TABLE,有 DROP 的语句恢复到生产前先改库名,不然直接覆盖现有表。
- 判断提醒:只来查看内容,用轻量编辑器;要恢复数据,先核对字符集,再建空库,然后 source 导入,别在记事本里双击打开几百 MB 的文件。