内容介绍
- 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脚本内容请搜索站长源码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持站长源码网!
本文从互联网转载,来源地址:www.downzz.com/linux-shell/251637.html,原作者保留一切权利,若侵权或引用不当,请联系茶猫云(cmy.cn)删除。【茶猫云,优质云服务器提供商】