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

MySQL 備份排除指定庫/表實戰:mysqldump 管道過濾、自動化腳本與 performance_schema 避坑指南

     編輯:MySQL 綜合教學

MySQL 備份排除指定庫/表實戰:mysqldump 管道過濾、自動化腳本與 performance_schema 避坑指南

mysqldump --all-databases 會備份系統庫,且無原生「排除庫」參數。本文提供基於 grep -v 管道過濾的通用方案,解決 MySQL 5.5+ performance_schema 導致備份報錯的避坑案例,並給出生產級每日全量備份腳本。

一、 核心思路:Shell 管道動態構建庫列表

# 獲取所有庫 -> 過濾系統庫 -> 傳給 mysqldump --databases
mysql -uroot -p123456 -e 'SHOW DATABASES;' \
| grep -Ev "^Database$|information_schema|mysql|performance_schema|sys|test" \
| xargs mysqldump -uroot -p123456 --databases > backup.sql

二、 MySQL 5.5+ performance_schema 避坑

現象:MySQL 5.5 引入 performance_schema,直接管道傳給 mysqldump 會報錯(鎖表/權限問題)。

方案一:mysqldump 端跳過鎖表

... | xargs mysqldump -uroot -p123456 --skip-lock-tables --databases > backup.sql

方案二:grep 端直接過濾掉(推薦,更乾淨)

mysql -uroot -p123456 -e 'SHOW DATABASES;' \
| grep -Ev "^Database$|information_schema|mysql|performance_schema|sys|test" \
| xargs mysqldump -uroot -p123456 --databases > backup.sql

三、 生產級每日全量備份腳本

#!/bin/bash
# 每日 02:00 執行,crontab: 0 2 * * * /scripts/mysql_backup.sh

FILE="mysql_$(date +%F)"
BACKDIR="/mysqlbackup"
CONF_FILE="/etc/my.cnf"
MAIL_TO="dba@company.com"

# 1. 邏輯備份(排除系統庫,單事務一致性,流式輸出,多值INSERT)
mysql -uroot -e 'SHOW DATABASES;' \
| egrep -v "Database|information_schema|performance_schema|mysql|sys|test" \
| xargs mysqldump -uroot --single-transaction --quick --extended-insert --databases \
> ${BACKDIR}/${FILE}.sql

# 2. 壓縮存儲
gzip ${BACKDIR}/${FILE}.sql

# 3. 備份配置文件
cp ${CONF_FILE} ${BACKDIR}/${FILE}.cnf

# 4. 校驗備份文件大小(防止空文件)
if [ ! -s ${BACKDIR}/${FILE}.sql.gz ]; then
    echo "ERROR: Backup file is empty!" | mail -s "MySQL Backup FAILED" ${MAIL_TO}
    exit 1
fi

# 5. 保留策略:保留 7 天
find ${BACKDIR} -mtime +7 -name "mysql_*.sql.gz" -delete
find ${BACKDIR} -mtime +7 -name "mysql_*.cnf" -delete

# 6. 發送成功通知
echo -e "Server: $(hostname)\nIP: $(hostname -I)\nDate: $(date)\nFile: ${FILE}.sql.gz\nSize: $(du -h ${BACKDIR}/${FILE}.sql.gz | cut -f1)" \
| mail -s "MySQL Backup SUCCESS" ${MAIL_TO}

備份腳本代碼

四、 進階:排除指定表(mysqldump 原生支持)

 ${table}.sql
    fi
done

# 用法:sh exclude.sh mo_log mt_log report_info

五、 總結對比

需求方案優點缺點
排除庫grep -v 管道過濾通用、無需修改 mysqldump依賴 Shell 環境
排除表--ignore-table原生參數、邏輯備份層面表多時參數冗長
系統庫報錯過濾 performance_schema/sys根治 5.5+ 備份失敗需知曉版本差異
自動化腳本 + crontab + 郵件通知 + 保留策略生產級可運維需配置郵件服務

將備份腳本納入版本控制、定期演練還原,才是真正的數據安全。

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