首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL多表操作與批處理腳本實戰(四):庫表刪除、備份與批量執行

     編輯:MySQL 資料庫相關知識

危險操作:數據庫與表刪除

-- 刪除數據庫 (不可逆,慎用!)
DROP DATABASE db_name;

-- 刪除多張表
DROP TABLE tbl1, tbl2, tbl3;
  • 生產環境嚴禁直接執行,需雙人審核、備份驗證後執行
  • 建議先 RENAME TABLE 歸檔,觀察期後再物理刪除

邏輯備份:mysqldump 核心用法

# 進入 MySQL 安裝 bin 目錄 (或配置 PATH)
cd /usr/local/mysql/bin

# 全庫備份 (結構+數據)
./mysqldump --opt db_name > db_backup.sql
# --opt 等同於 --add-drop-table --add-locks --create-options --quick --extended-insert --lock-tables --set-charset --disable-keys

# 單表備份
./mysqldump --opt db_name tbl_name > tbl_backup.sql

# 僅結構 (無數據)
./mysqldump -d --add-drop-table db_name > schema_only.sql

# 遠程備份
./mysqldump -h remote_host -u user -p db_name > remote_backup.sql

批處理執行 SQL 腳本

準備批處理文件 batch.sql

USE biz_db;
SELECT * FROM orders WHERE create_time > '2023-01-01';
SELECT customer_id, amount FROM payments WHERE status='success';

系統命令行執行

# Linux/Unix
mysql -u user -p < batch.sql
# 或指定密碼 (不安全,僅內網自動化)
mysql -u user -p'password' < batch.sql

# Windows CMD
mysql -u user -p < batch.sql

客戶端內部執行

mysql> SOURCE /path/to/batch.sql;

批處理優勢與注意事項

  • 自動化部署/初始化/數據修腳本版本化管理
  • 避免交互式輸入錯誤,支持 CI/CD 流水線集成
  • 事務控制:腳本內顯式 START TRANSACTION; ... COMMIT/ROLLBACK;,單條語句失敗不影響其它
  • 錯誤處理:MySQL 客戶端默認遇錯繼續,需 --force 強制繼續或腳本內捕獲
  • 輸出重定向:mysql -u user -p < batch.sql > result.log 2>&1 記錄執行日志

完整備份腳本模板 (生產級)

#!/bin/bash
# /usr/local/bin/mysql_full_backup.sh
set -euo pipefail

BACKUP_DIR="/backup/mysql/$(date +%Y%m%d)"
MYSQL_USER="backup"
MYSQL_PWD="StrongPass!"
MYSQL_HOST="localhost"
DATABASES="biz_db1 biz_db2"

mkdir -p "$BACKUP_DIR"

for DB in $DATABASES; do
    echo "Backing up $DB..."
    mysqldump -h"$MYSQL_HOST" -u"$MYSQL_USER" -p"$MYSQL_PWD" \
        --single-transaction --routines --triggers --events \
        --quick --compress "$DB" | gzip > "$BACKUP_DIR/${DB}_$(date +%H%M%S).sql.gz"
    
    # 校驗備份文件非空
    if [ ! -s "$BACKUP_DIR/${DB}_$(date +%H%M%S).sql.gz" ]; then
        echo "ERROR: Empty backup for $DB" >&2
        exit 1
    fi
done

# 清理 7 天前備份
find /backup/mysql -type f -name "*.sql.gz" -mtime +7 -delete

echo "Full backup completed: $BACKUP_DIR"

加入 crontab 定時執行:0 2 * * * /usr/local/bin/mysql_full_backup.sh >> /var/log/mysql_backup.log 2>&1

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved