【实践-MySQL】在Linux服务器中后台执行sql脚本导入大量数据

在服务器中后台执行sql脚本

上传文件

将 数据库结构ddl.sql文件和数据data.sql文件都上传到服务器的/home目录中。
ddl.sql文件:

/*!40101 SET NAMES utf8 */;
CREATE DATABASE `db_test`;

use db_test;

CREATE TABLE `table_test` (
  `id` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '主键',
  `create_time` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
  `update_time` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '修改时间',
  PRIMARY KEY (`id`) USING BTREE,
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='测试表';

data.sql文件:

/*!40101 SET NAMES utf8 */;
insert into table_test (id) VALUES (1);

前台执行

创建数据库 和 表
# 登陆数据库
# -u表示用户名、-h表示ip地址、-P表示端口、-p表示密码登陆
mysql -u root -h 127.0.0.1 -P 3307 -p
# 输入密码
123456
# 执行sql文件
source /home/ddl.sql
导入数据
# 登陆数据库
# -u表示用户名、-h表示ip地址、-P表示端口、-p表示密码登陆
mysql -u root -h 127.0.0.1 -P 3307 -p
# 输入密码
123456
# 执行sql文件
source /home/data.sql

后台执行

注意:后台执行有个问题是,如果sql文件中的语句执行出现报错,则会停止,不会继续执行后面的sql语句。这里有个坑!!!

创建数据库 和 表

准备脚本文件,在Linux控制台中执行下面的命令

# 创建脚本文件
vim importddl.sh

# 进入vim编辑器,按i进入编辑模式,输入如下命令
# -u表示用户名、-h表示ip地址、-P表示端口、
# -p表示密码(注意,-p和密码之间不能用空格隔开)
# <ddl.sql表示登陆数据库之后,执行与脚本同级目录下的ddl.sql文件,如果不是请使用绝对路径
mysql -u root -h 127.0.0.1 -P 3307 -ptest@2022 <ddl.sql

# 退出编辑模式 Esc,保存并退出vim编辑器 :wq!

# 进入指定目录
cd /home/

给脚本文件添加权限

chmod u+x importddl.sh

用nohup命令执行脚本
一定要加“&”,才能脚本放到后台运行
nohup执行后系统会在控制台打印出命令执行的PID
然后nohup会默认在/home目录下创建日志文件nohup.out,可以方便查看

nohup ./importddl.sh &

根据PID使用ps命令可以查看脚本是否还在执行

ps -aux | grep 297042

正在执行中:
在这里插入图片描述

只有一行数据,执行结束:
在这里插入图片描述

导入数据

准备脚本文件

# 创建脚本文件
vim importdata.sh

# 进入vim编辑器,按i进入编辑模式,输入如下命令
# --database表示使用指定数据库
mysql -u root -h 127.0.0.1 -P 3307 -ptest@2022 --database=ngpr_db_test <data.sql

# 退出编辑模式 Esc,保存并退出vim编辑器 :wq!

# 进入指定目录
cd /home/

给脚本文件添加权限

chmod u+x importdata.sh

用nohup命令执行脚本
一定要加“&”,才能脚本放到后台运行
nohup执行后系统会在控制台打印出命令执行的PID

nohup ./importdata.sh &

根据PID使用ps命令可以查看脚本是否还在执行

ps -aux | grep 33355

等待数据导入完成即可~

疑问(欢迎评论区大佬解答)

1、公司的客户数据非常庞大,data.sql文件大小有高达9G,通过这种方式需要执行一晚上,那么如何在Linux服务器中批量导入大数据呢?

2、使用FinalShell登陆服务器,按照这种方式后台执行,把FinalShell退出之后,还是中止了脚本执行,nohup.out文件中报错:

Terminal close -- query aborted

说明这种后台执行,并不能断开Linux服务器的连接。那有没有即便断开服务器的连接,还能继续执行脚本的方案呢?

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员四海

道阻且长,行则将至

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值