Linux后台挂载极速导入大SQL文件:解决SSH断开与导入慢的终极方案

在 Linux 环境下导入超大 SQL 文件时,我们经常会遇到两个痛点:一是导入速度太慢,二是 SSH 终端一旦断开或网络波动,导入任务就会被迫中止(报 Terminal close -- query aborted)。
本文介绍一种“脚本化 + 极速参数 + 彻底后台挂载”的组合拳方案,完美解决这两个问题,让导入任务稳如泰山!

第一步:创建导入脚本

为了避免在终端中直接输入超长命令导致被截断或误触,我们先将命令写入一个独立的 Shell 脚本中。
在终端中执行以下命令,使用 nano 编辑器创建脚本:
nano /import.sh

第二步:写入极速导入代码

进入编辑器后,将以下代码一字不差地粘贴进去:
#!/bin/bash
# 1. 关闭各项检查并关闭自动提交
echo -e “SET foreign_key_checks=0; SET unique_checks=0; SET autocommit=0;” | /usr/bin/mysql –max-allowed-packet=1G –net-buffer-length=1M -u root -pUav@654321! sguav
# 2. 以流式传输导入核心 SQL 数据
cat /sguav_202606170600.sql | /usr/bin/mysql –max-allowed-packet=1G –net-buffer-length=1M -u root -pUav@654321! sguav
# 3. 手动提交事务并恢复各项检查
echo -e “COMMIT; SET foreign_key_checks=1; SET unique_checks=1;” | /usr/bin/mysql –max-allowed-packet=1G –net-buffer-length=1M -u root -pUav@654321! sguav

 

核心代码原理解析:

这段代码将导入过程巧妙地拆分成了三个阶段,以兼顾极致速度数据安全
  1. 第一阶段(关闭检查):通过 echo 管道传入 SQL 指令,关闭外键检查(foreign_key_checks)和唯一性检查(unique_checks),同时关闭自动提交(autocommit=0)。这能省去数据库在导入时反复校验索引和频繁写磁盘的开销,大幅提升性能。
  2. 第二阶段(极速灌入数据):使用 cat 命令将 SQL 文件以“流(Stream)”的形式直接灌入 MySQL。配合 --max-allowed-packet=1G(允许超大网络包)和 --net-buffer-length=1M(增大网络缓冲区),避免了频繁的网络交互,这是实现极速导入的核心。
  3. 第三阶段(安全收尾):数据灌入完毕后,手动执行 COMMIT 提交所有事务,最后恢复外键和唯一性检查,确保数据库的完整性约束重新生效。

 第三步:保存并退出编辑器

在 nano 编辑器中,依次按下键盘上的以下快捷键:
  1. Ctrl + O (字母 O,保存文件,然后按一次回车确认保存路径)
  2. Ctrl + X (退出编辑器,回到终端)

第四步:后台挂载运行脚本

回到终端后,依次执行以下两条命令:
# 赋予脚本可执行权限
chmod +x /import.sh
# 使用 setsid 彻底脱离终端,并将日志输出到文件
setsid /import.sh > /import_sql.log 2>&1 &
THE END
喜欢就支持一下吧
点赞0 分享