首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

Shell 批量導入 MySQL SQL 文件夾 & 批量刪除表實戰腳本

     編輯:MySQL 綜合教學

Shell 批量導入 MySQL SQL 文件夾 & 批量刪除表實戰腳本

場景:同事傳來上百個獨立 .sql 文件(每檔含 CREATE DATABASE 與 USE),需批量導入線上庫;後續又需刪除某庫 2000+ 張表(無 DROP DATABASE 權限)。

一、批量導入腳本 mysql_source.sh

#!/bin/bash
# author: rainysia <rainysia@gmail.com>
set -e
LC_ALL=C; LANG=C; unset TZ

file_path="/home/db/test/"          # SQL 文件目錄
host="192.168.85.123"
username="dbroot"
password="db1t#2w$3r@4#t"
dbname="sample"                     # 佔位庫,實際由 SQL 內 CREATE DATABASE 指定
now=$(date "+%s")

mysql_source() {
    for file_name in $(ls -A "$1"); do
        if [ -f "$1$file_name" ]; then
            seg_start=$(date "+%s")
            mysql -h"${host}" -u"${username}" -p"${password}" "${dbname}" -e "source $1$file_name"
            echo "source: \"$1$file_name\" is ok, took $(( $(date "+%s") - seg_start )) seconds"
        fi
    done
    echo "All done! Total: $(( $(date "+%s") - now )) seconds"
}

echo "UTC: $(LC_ALL=C TZ=UTC0 date -R)"
echo "Local: $(date -R)"
mysql_source "$file_path"

執行效果

source: "/home/db/test/hml2.sql" is ok, took 18 seconds
source: "/home/db/test/hml3.sql" is ok, took 19 seconds
source: "/home/db/test/hml4.sql" is ok, took 18 seconds
All done! Total: 55 seconds

二、批量刪除表(無 DROP DATABASE 權限)

思路:mysqldump -d --add-drop-table 導出結構 → grep 取出 DROP TABLE 語句 → 復用上述腳本執行。

# 1. 導出結構(含 DROP TABLE)
mysqldump -udbroot -p cs_china_1111 -d --add-drop-table > cs_china_1111.sql

# 2. 過濾 DROP TABLE 語句
find . -name "cs_china_1111.sql" | xargs grep "DROP TABLE IF" > cs_china_1111_drop_table.sql

# 3. 修改腳本 dbname 為目標庫,執行導入即可批量刪除

關鍵點

  • 腳本自帶計時與錯誤中止(set -e)。
  • 密碼含特殊字符需妥善轉義或使用 --defaults-extra-file 更安全。
  • source 命令在 mysql 客戶端執行,支援單檔多語句。
  • 大量表刪除建議業務低峰期執行,避免鎖衝突。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved