文章详情

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

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-02-03 11:38

关注
目录

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

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-人工智能
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯