一種基於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 的用法
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章