我的编程空间,编程开发者的网络收藏夹
学习永远不晚

shell脚本批量执行指定路径下sql脚本的实现

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

shell脚本批量执行指定路径下sql脚本的实现

目录
  • 1. 场景描述
  • 2. 创建sql
  • 3. 创建脚本
    • 3.1 方式一
    • 3.2 方式二

1. 场景描述

linux环境下通过shell脚本批量执行指定目录下所有sql语句,用来建表建库,初始化项目sql等。
linux shell在线格式化:https://tool.lu/shell/

2. 创建sql

创建contract_ddl.sql

-- 创建数据库contract_user
CREATE DATABASE `contract_user` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

-- 创建合同表contract
DROP TABLE IF EXISTS `contract`;
CREATE TABLE `contract` (
 `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID主键',
 `name` varchar(64) NOT NULL COMMENT '合同名称',
 `code` varchar(64) NOT NULL COMMENT '合同编号',

 `deleted` tinyint NOT NULL DEFAULT 0 COMMENT '是否删除 0 未删除 1 删除 默认是0',
 `create_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '创建人账号id',
 `create_time` timestamp(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
 `update_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '更新人账号id',
 `update_time` timestamp(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
 
 PRIMARY KEY (`id`) USING BTREE,
 index `idx_code_name`(`code`,`name`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '合同表' ROW_FORMAT = Dynamic;

创建template_ddl.sql

-- 创建数据库template_user
CREATE DATABASE `template_user` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

-- 模板设置表template
DROP TABLE IF EXISTS `template`;
CREATE TABLE `template` (
 `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID主键',
 `name` bigint(20) NOT NULL COMMENT '模板名称',
 `code` bigint(20) NOT NULL COMMENT '模板编码',

 `deleted` tinyint NOT NULL DEFAULT 0 COMMENT '是否删除 0 未删除 1 删除 默认是0',
 `create_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '创建人账号id',
 `create_time` timestamp(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
 `update_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '更新人账号id',
 `update_time` timestamp(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
 
 PRIMARY KEY (`id`) USING BTREE,
 index `idx_code_name`(`code`, `name`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '模板表' ROW_FORMAT = Dynamic;

3. 创建脚本

3.1 方式一

方式一需要手动指定sql全路径名称,相对比较麻烦,仅供参考。

#!/bin/sh

start_date=`date '+%Y%m%d-%H%M%S'`
echo $start_date ${USER} "execute ddl start..."

# mysql
shost=127.0.0.1
sport=3306
suser=root
spwd=123456

# path,sql放入ddl下
sqlpath="source /home/ddl/"
sqlsource="${sqlpath}contract_ddl.sql;${sqlpath}template_ddl.sql;"

# 执行sql脚本,这里会有告警,不影响执行,提示直接输入密码不安全,去掉-p后的spwd,执行时输入安全
# Warning: Using a password on the command line interface can be insecure.
mysql -h$shost -p$sport -u$suser -p$spwd -e"$sqlsource"

# end
end_date=`date '+%Y%m%d-%H%M%S'`
echo $end_date ${USER} "execute ddl end..."

3.2 方式二

方式二只需要指定sql路径即可,通过shell遍历,相对方便。

#!/bin/bash

#execute all script in specified directory

MYDATE=$(date +%F'-'%T'-'%w)

MYSQL_PATH=/tmp/scripts #指定的目录

LOG_FILE=/tmp/scripts/exec_${MYDATE}.log

confirm=

db_name=

db_pass=

for file in ${MYSQL_PATH}/*; do

 if [ -f "$file" ]; then

  postfix=$(echo $file | awk -F'.' '{print "."$NF}')

  if [ $postfix = ".sql" ]; then

   if [ ! $db_name ]; then #如果没有指定数据库

    read -p "请输入数据库名:" db_name

    read -p "你输入的数据名是【$db_name】,确认继续请输入--yes--: " confirm

   fi

   if [ "$confirm" = "yes" ] && [ -n $confirm ]; then

    if [ ! $db_pass ]; then #如果没有设置密码

     stty -echo #密码输入保护关闭显示

     read -p "请输入数据库密码:" db_pass

     echo -e "\n"

     stty echo

    fi

    mysql -uroot -p$db_pass -P3306 --default-character-set=utf8 ${db_name} <$file >&error.log

    echo $file

    echo -e "\n===========$file=============\n" >>${LOG_FILE}

    cat error.log >>${LOG_FILE}  #输出执行日志

    error=$(grep ERROR error.log) #读取错误日志信息

    if [ -n "$error" ]; then #如果有错误就退出程序

     echo $error

     exit

    fi

   else

    echo "您已经取消操作!"

    exit

   fi

  fi

 fi

done

到此这篇关于shell脚本批量执行指定路径下sql脚本的实现的文章就介绍到这了,更多相关shell批量执行sql脚本内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

shell脚本批量执行指定路径下sql脚本的实现

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

shell脚本批量执行指定路径下sql脚本的实现

目录1. 场景描述2. 创建sql3. 创建脚本3.1 方式一3.2 方式二1. 场景描述 linux环境下通过shell脚本批量执行指定目录下所有sql语句,用来建表建库,初始化项目sql等。linux shell在线格式化:https:
2023-02-03

shell在指定目录下批量执行sql脚本的实例

如下所示:#!/bin/bash #execute all script in specified directory MYDATE=`date +%F'-'%T'-'%w` mysql_PATH=/tmp/scripts #指定的目录 L
2022-06-04

使用shell怎么在指定目录下批量执行sql脚本

今天就跟大家聊聊有关使用shell怎么在指定目录下批量执行sql脚本,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。如下所示:#!/bin/bash#execute all scrip
2023-06-09

使用Linux shell脚本实现FTP定时执行批量下载指定文件

使用FTP定时批量下载指定文件的shell脚本,具体实例介绍如下所示: 1、目标FTP服务器地址#FTP服务器地址 ip=10.19.15.232、FTP账号和密码 u=账号 p=密码 3、使用mget结合正则表达式下载文件#获取昨天日期,
2022-06-04

Shell脚本实现批量下载资源并保留原始路径

示例资源列表 如url.txt:http://su.bdimg.com/static/superplus/img/logo_white_ee663702.pnghttp://su.bdimg.com/static/superplus/img
2022-06-04

hive-shell批量命令执行脚本的实现方法

如下所示:#!/usr/bin/bash HADOOP_HOME="/opt/module/cdh-5.3.6-ha/hadoop-2.5.0-cdh5.3.6" HIVE_HOME='/opt/module/cdh-5.3.6-ha/hi
2022-06-04

如何使用Linux中shell脚本实现FTP定时执行批量下载指定文件

小编给大家分享一下如何使用Linux中shell脚本实现FTP定时执行批量下载指定文件,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!使用FTP定时批量下载指定文件
2023-06-09

shell脚本实现监控shell脚本的执行流程及变量的值

很多时候,我们都会写shell程序来完成一些不用重复造轮子的时刻,但是,又因为shell语句中也会有函数,也会有变量,在运行后到底执行了哪些相关的操作,就需要对具体执行过程中的变量等可变的因素的监控,那么我们下面就写个小小的shell例子,
2022-06-04

Spark-shell批量命令执行脚本的方法

批量执行spark-shell命令,并指定提交参数#!/bin/bashsource /etc/profileexec $SPARK_HOME/bin/spark-shell --queue tv --name spark-sql-
2022-06-04

hbase-shell批量命令执行脚本的方法

批量执行hbase shell 命令#!/bin/bash source /etc/profile exec $HBASE_HOME/bin/hbase shell <
2022-06-04

如何用Shell脚本实现批量下载资源并保留原始路径

这篇文章主要介绍“如何用Shell脚本实现批量下载资源并保留原始路径”,在日常操作中,相信很多人在如何用Shell脚本实现批量下载资源并保留原始路径问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何用Shel
2023-06-09

如何用shell脚本实现监控shell脚本的执行流程及变量的值

本篇内容主要讲解“如何用shell脚本实现监控shell脚本的执行流程及变量的值”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何用shell脚本实现监控shell脚本的执行流程及变量的值”吧!
2023-06-09

Shell获取当前正在执行脚本的绝对路径

1. pwd命令我们看看使用pwd命令能否获取当前正在执行脚本的绝对路径。该命令的作用是“print name of current/working directory”,真实含义是当前工作目录,并不是正在执行脚本的目录。xiaosi@Qu
2022-06-04

如何自动生成批量执行SQL脚本的批处理

这篇文章主要介绍如何自动生成批量执行SQL脚本的批处理,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!场景: DBA那边给我导出了所有的存储、函数等等对象的创建脚本,有上千个文件. 现在需要将这些对象创建脚本导入到另外
2023-06-08

Shell脚本怎么实现批量下载网络图片

这篇文章主要介绍“Shell脚本怎么实现批量下载网络图片”,在日常操作中,相信很多人在Shell脚本怎么实现批量下载网络图片问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Shell脚本怎么实现批量下载网络图片
2023-06-09

怎么在shell实现定时周期性执行脚本

这期内容当中小编将会给大家带来有关怎么在shell实现定时周期性执行脚本,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。示例1.编写测试脚本脚本 time .sh$ cat time.sh #! /bin/
2023-06-09

Linux关机时执行指定脚本功能实现

1.关机时执行某个脚本的具体思路 (1)在文件夹/etc/init.d/下创建关机时需要执行的脚本file_name; (2)分别在文件夹/etc/rc0.d/和/etc/rc6.d/下创建该该脚本文件的链接文件K07file_name:s
2022-06-04

jenkins如何实现shell脚本化定时执行任务

这篇文章将为大家详细讲解有关jenkins如何实现shell脚本化定时执行任务,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1.开发需求socket连接的auction拍卖jar包服务更新重启前半小时切走
2023-06-26

jenkins 实现shell脚本化定时执行任务的方法

1.开发需求socket连接的auction拍卖jar包服务更新重启前半小时切走nginx的访问请求。 socket发起请求之后不需要nginx执行交互可以断开了,但是socket这个任务在auction拍卖任务没结束前重启auction就
2022-06-04

编程热搜

目录