一种基于shell脚本批量创建MYSQL表的方法

目录

0 引 言

1 基本知识

2 脚本编写

3 实验测试

4 小 结


0 引 言

工作中经常需要在数据库中进行建表操作,无论是使用数据库一些工具或手动建表都比较麻烦,需要用户一个个输入字段进行建立或一个个执行sql脚本,无论是哪种方式都比较费力,影响工作效率,那么有没有一种快速批量执行sql文件的形式进行批量建表的方法呢?这里就需要用shell脚本调用sql文件的形式进行批量建表。本文针对上述问题,探讨了一种批量建立MYSQL数据库表的方法,给出了批量执行sql文件的脚本,并对脚本主要的语法进行分析,该脚本在实验中得到了测试认证,效果良好。

1 基本知识

(1)awk用法

  参考链接如下

  https://blog.csdn.net/godlovedaniel/article/details/104755897

 下面对本脚本使用的语句进行解释

   echo $file | awk -F'.' '{print  "."$NF}'

  输入为:   echo $file,为遍历目录后每个文件的名字

  awk -F'.' '{print  "."$NF}':表示以.号分隔,输入的每一条记录,并且打印最后一个字段,输出以.号输出。NF:表示字段的个数。$NF:就表示最后一个字段。由于每个文件的命名结尾都是sql,所以最终得到的为.sql。

  该语句在此的作用就是,获取后缀,进行下一步的条件匹配,对sql文件进行过滤。

(2)read -p

  Linux read命令用于从标准输入读取数值。

  read 内部命令被用来从标准输入读取单行数据。这个命令可以用来读取键盘输入,当使用重定向的时候,可以读取文件中的一行数据。

 -p 后面跟提示信息,即在输入前打印提示信息。如:

#!/bin/bash

read -p "输入网站名:" website
echo "你输入的网站名是 $website" 
exit 0

测试结果为:
输入网站名:https://blog.csdn.net/godlovedaniel/article/details
你输入的网站名是 https://blog.csdn.net/godlovedaniel/article/details

  如果 -p后指定的变量在脚本中定义且赋值,则取变量赋值后的值,如果没有赋值,则从控制台中进行输入

(3)连接MYSQL执行sql脚本

   mysql -h${host} -u${user} -p${db_pass} -P${port} --default-character-set=utf8 ${db_name} < ${file}

   -h:指定连接的主机地址

  -u:登录的用户

  -p:数据库连接密码

  -P:端口

  输入为${file}:表示sql脚本,将输入的sql脚本在MYSQL中进行执行。

  shell脚本中执行sql脚本的几种种方式:(shell脚本调用sql文件)

  注意:sql文件和脚本文件在同一路径下,或不在同一路径下,将sql文件写成绝对路径如:/home/centos/test/test.sql

  1. mysql -H主机地址 -P 端口号  -u用户名 -p密码  < test.sql (管道符调用sql文件)
  2. mysql -H主机地址 -P 端口号  -u用户名 -p密码  -e "source test.sql" (命令行调用sql文件)
  3. mysql -H主机地址 -P 端口号  -u用户名 -p密码  -e "\. test.sql"
  4. mysql -H主机地址 -P 端口号  -u用户名 -p密码  <<EOF (shell脚本中MySQL提示符下调用SQL)
    source 绝对路径下 test.sql;
    EOF 
    exit; 
#!/bin/sh
  mysql -u root < test.sql (常用)
# mysql -u root -e "source test.sql"
# mysql -u root -e "\. test.sql"
# mysql -uroot -p123456 <<EOF 
  source /home/centos/test/test.sql; 
  EOF 
  exit;  

(4)echo -e

    echo -e支持转义,用法如下

   若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出:

  •     \a 发出警告声;
  •     \b 删除前一个字符;
  •     \c 最后不加上换行符号;
  •     \f 换行但光标仍旧停留在原来的位置;
  •     \n 换行且光标移至行首;
  •     \r 光标移至行首,但不换行;
  •     \t 插入tab;
  •     \v 与\f相同;
  •     \ 插入\字符;
  •     \nnn 插入nnn(八进制)所代表的ASCII字符;

  如下案例所示:

显示换行
echo -e "OK! \n" # -e 开启转义
echo "It is a test"

输出结果:
OK!

It is a test

不显示换行

#!/bin/sh
echo -e "OK! \c" # -e 开启转义 \c 不换行
echo "It is a test"

输出结果:

OK! It is a test

 echo -n 表示不换行输出

$echo -n "123" $echo "456"
 
最终输出 123456 而不是 123 456

(5)stty的用法

     stty -echo                -----------------关闭echo输出显示

2 脚本编写

#!/bin/bash
#Author: dandan
#Time: 20200424
#Describe: Create MYSQL Database Table ,execute all script in specified directory

MYDATE=`date +%F'-'%T'-'%w`
MYSQL_PATH=$1 #指定的目录
LOG_FILE=/tmp/exec_script_${MYDATE}.log
confirm=
db_name=
db_pass=
host=
user='root'
port='3306'
for file in ${MYSQL_PATH}/*
do
if [ -f "$file" ] ; then
postfix=`echo $file | awk -F'.' '{print  "."$NF}'`
  if [ $postfix = ".sql" ] ; then
     if [ ! $host ] ; then #如果没有指定数据库
        read -p "请输入数据库名:" host
        read -p "你输入的数据名是【$host】,确认继续请输入--yes--: " confirm
     fi
     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 -h${host} -u${user} -p${db_pass} -P${port} --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

3 实验测试

  进入脚本的目录,执行该脚本

[root@bigdata3 TOOLS]# ./create_mysql_table_batch.sh '/home/centos/phm/MYSQL/appv_power'

执行结果如下:

到MYSQL数据库中查看表已经创建 ,如下图所示:

4 小 结

本文研究了一中MYSQL批量建表的方法,给出了具体脚本程序,并对程序中关键点进行了分析,读者可根据自己环境需求对脚本进行稍加改造便可使用,该脚本已在环境中进行测试,结果可靠。

本文主要要点:

  • (1)shell脚本中调用sql文件的方法(4种)
  • (2)read -p的用法
  • (3)echo关闭显示的用法。stty -echo
  • (4)echo -e 的用法
  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值