最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL數(shù)據庫自動化備份腳本的實踐指南

 更新時間:2026年04月26日 16:12:48   作者:lwx57280  
數(shù)據是企業(yè)的核心資產,定期備份數(shù)據庫是每個運維和開發(fā)人員的必修課,本文分享一個生產環(huán)境驗證過的 MySQL 自動備份腳本,支持多數(shù)據庫備份、自動壓縮、過期清理,并詳細解讀每一處細節(jié),幫助你快速搭建可靠的備份體系,需要的朋友可以參考下

一、腳本概述

該腳本使用 mysqldump 工具,實現(xiàn)以下功能:

  • 備份指定的一個或多個 MySQL 數(shù)據庫
  • 自動創(chuàng)建日志和備份數(shù)據目錄
  • 備份文件壓縮為 .tar.gz 格式,節(jié)省磁盤空間
  • 記錄每次備份的開始、成功、失敗日志
  • 自動刪除 30 天前的舊備份文件

適用場景:Linux 服務器 + MySQL 5.7/8.0,支持非標準端口(如 9200)。

二、快速使用

1. 準備腳本

使用 vim 創(chuàng)建腳本文件(不要用 FTP 工具上傳,避免格式問題):

vim /opt/mysql_backup.sh

保存退出。

2. 修改配置

根據你的環(huán)境修改以下變量:

USER='your_db_user'          # 數(shù)據庫用戶名
PASSWORD='your_password'     # 數(shù)據庫密碼
HOST='your_db_host'          # 數(shù)據庫 IP
PORT=3306                    # 端口(默認3306)
dbName='db1 db2 db3'         # 需要備份的數(shù)據庫,空格分隔

3. 執(zhí)行備份

sh /opt/mysql_backup.sh

執(zhí)行后會在腳本所在目錄下生成 mysql/ 文件夾:

mysql/
├── data/          # 存放 .tar.gz 壓縮備份
└── log/           # 存放備份日志 mysqllog.log

4. 設置定時任務(生產推薦)

crontab -e
# 每天凌晨 2 點執(zhí)行備份
0 2 * * * /bin/bash /opt/mysql_backup.sh > /dev/null 2>&1

三、腳本逐段解讀

1. 環(huán)境變量與配置

PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
export PATH

確保 mysqldump 等命令在 PATH 中。如果使用自定義安裝路徑(如 /usr/local/mysql-8.0/bin),需要在腳本中指定完整路徑。

USER='yxw01'
PASSWORD='yxw@123!'
HOST='192.168.11.36'
PORT=9200
dbName='mate_smart'

生產環(huán)境建議將密碼存儲在單獨配置文件中,并設置 600 權限,避免硬編碼泄漏。

2. 動態(tài)路徑與日志

backtime=`date +%Y%m%d%H%M%S`           # 備份時間戳,如 20250423140230
logpath=$(pwd)/mysql/log
datapath=$(pwd)/mysql/data

3. 自動創(chuàng)建目錄

if [ ! -d ${logpath} ];then
    mkdir -pv ${logpath}
fi

-p 自動創(chuàng)建父目錄,-v 輸出創(chuàng)建信息。

4. 核心備份命令

/usr/local/mysql-8.0/bin/mysqldump --skip-lock-tables -u ${USER} -h ${HOST} -P${PORT} -p${PASSWORD} ${table} > ${datapath}/${backtime}-${table}.sql

參數(shù)解釋:

  • --skip-lock-tables:備份時不鎖表(對 InnoDB 表有效,MyISAM 仍可能鎖)。避免阻塞業(yè)務寫入。
  • -P${PORT}:大寫 P 指定端口,小寫 p 是密碼。
  • 重定向 > 將 SQL 輸出到文件。

注意:如果 MySQL 安裝在非標準路徑,需要指定 mysqldump 的完整路徑,否則會報 command not found。

5. 壓縮與清理原始文件

tar zcvf ${backtime}-${table}.tar.gz ${backtime}-${table}.sql > /dev/null
rm -f ${datapath}/${backtime}-${table}.sql

壓縮后刪除原始 SQL 文件,只保留壓縮包。> /dev/null 隱藏壓縮過程輸出

6. 日志記錄與錯誤處理

if [ "$?" == 0 ];then
    echo "備份成功" >> ${logpath}/mysqllog.log
else
    echo "備份失敗" >> ${logpath}/mysqllog.log
fi

$? 獲取上一條命令的退出碼,0 表示成功。

7. 過期備份清理

find $datapath -name "*.tar.gz" -type f -print -mtime +30 -exec rm -rf {} ;
  • -mtime +30:修改時間超過 30 天的文件
  • -exec rm -rf {} ;:執(zhí)行刪除操作

可根據磁盤容量調整保留天數(shù)(如 +7 保留一周)。

四、注意事項與生產優(yōu)化

重要提醒

  1. 不要在業(yè)務高峰期備份:雖然使用了 --skip-lock-tables,但 mysqldump 仍可能增加數(shù)據庫 I/O 負載。建議在凌晨執(zhí)行。
  2. 腳本格式問題:務必在 Linux 服務器上用 vim 或 nano 創(chuàng)建腳本,不要用 Windows 記事本編輯后上傳,否則會遇到 \r 導致的 command not found 錯誤。
  3. 密碼安全:生產環(huán)境建議使用 ~/.my.cnf 配置文件存放密碼,腳本中只指定 --defaults-extra-file。
  4. 備份文件驗證:定期嘗試恢復備份到測試環(huán)境,確保備份可用。
  5. 異地存儲:壓縮后的備份文件應同步到異地(如 OSS、S3、NFS),防止服務器故障導致數(shù)據全丟。

優(yōu)化建議

① 使用~/.my.cnf避免明文密碼

# 創(chuàng)建 /root/.my.cnf
[client]
user=yxw01
password='yxw@123!'
host=192.168.11.36
port=9200
chmod 600 /root/.my.cnf

腳本中改為:

mysqldump --defaults-extra-file=/root/.my.cnf ${table} > ...

② 單數(shù)據庫多線程備份(可選)

對于超大數(shù)據庫,可使用 mydumper 或 并行 mysqldump,但腳本復雜度增加。

③ 備份失敗告警

添加郵件或釘釘告警:

if [ "$?" != 0 ]; then
    echo "備份失敗" | mail -s "DB Backup Failed" admin@example.com
fi

④ 保留策略優(yōu)化

除按天數(shù)刪除外,可保留每周一次的全量備份(例如 find ... ! -name "*Monday*" -mtime +7)。

五、腳本完整版(生產級改進)

#!/bin/bash
# 生產級 MySQL 備份腳本
# 支持多庫、壓縮、過期清理、免密登錄
set -e  # 遇錯停止(可選)
BACKUP_BASE="/data/backup/mysql"
LOG_PATH="${BACKUP_BASE}/log"
DATA_PATH="${BACKUP_BASE}/data"
RETENTION_DAYS=30
# 使用 .my.cnf 存儲憑證
MYSQL_OPTS="--defaults-extra-file=/root/.my.cnf --skip-lock-tables"
# 需要備份的數(shù)據庫列表
DATABASES="db1 db2 db3"
# 創(chuàng)建目錄
mkdir -p ${LOG_PATH} ${DATA_PATH}
# 備份時間戳
TIMESTAMP=$(date +%Y%m%d%H%M%S)
# 記錄日志函數(shù)
log() {
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a ${LOG_PATH}/backup.log
}
log "========== 開始備份 =========="
for DB in ${DATABASES}; do
    BACKUP_FILE="${DATA_PATH}/${TIMESTAMP}-${DB}.sql"
    COMPRESSED_FILE="${BACKUP_FILE}.tar.gz"
    log "正在備份數(shù)據庫: ${DB}"
    mysqldump ${MYSQL_OPTS} ${DB} > ${BACKUP_FILE}
    if [ $? -eq 0 ]; then
        tar czf ${COMPRESSED_FILE} -C ${DATA_PATH} $(basename ${BACKUP_FILE})
        rm -f ${BACKUP_FILE}
        log "備份成功: ${COMPRESSED_FILE}"
    else
        log "備份失敗: ${DB}"
        # 可選:發(fā)送告警
    fi
done
# 清理過期備份
find ${DATA_PATH} -name "*.tar.gz" -type f -mtime +${RETENTION_DAYS} -delete
log "已清理超過 ${RETENTION_DAYS} 天的舊備份"
log "========== 備份完成 =========="

六、總結

本文提供的備份腳本簡單可靠,已在生產環(huán)境運行多年。核心要點:

  • 使用 mysqldump + tar 實現(xiàn)備份與壓縮
  • 通過 find 自動清理過期文件
  • 完整的日志記錄便于追溯
  • 結合 crontab 實現(xiàn)無人值守

最后提醒:定期測試恢復 比備份本身更重要。建議每季度從備份文件中恢復一次數(shù)據,驗證備份有效性。

以上就是MySQL數(shù)據庫自動化備份腳本的實踐指南的詳細內容,更多關于MySQL自動化備份腳本的資料請關注腳本之家其它相關文章!

相關文章

  • mysql的聯(lián)合索引(復合索引)的實現(xiàn)

    mysql的聯(lián)合索引(復合索引)的實現(xiàn)

    這篇文章主要介紹了mysql的聯(lián)合索引(復合索引)的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • 修改MySQL8.0 默認的數(shù)據目錄(快捷操作無配置)

    修改MySQL8.0 默認的數(shù)據目錄(快捷操作無配置)

    這篇文章主要介紹了修改MySQL8.0 默認的數(shù)據目錄(快捷操作無配置),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • 輕松解決MySQL忘記密碼如何重置的方法

    輕松解決MySQL忘記密碼如何重置的方法

    這篇文章主要為大家介紹了MySQL忘記密碼如何重置的方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01
  • Mysql表的內聯(lián)和外聯(lián)區(qū)別案例解析

    Mysql表的內聯(lián)和外聯(lián)區(qū)別案例解析

    文章總結了SQL中的表連接,包括內連接和外連接,內連接通過WHERE子句篩選笛卡兒積,而外連接分為左外連接和右外連接,左外連接確保左表的所有記錄都顯示,右外連接確保右表的所有記錄都顯示,文章通過語法案例和練習幫助理解這些連接類型,感興趣的朋友跟隨小編一起看看吧
    2025-11-11
  • MySQL中DATE_ADD函數(shù)的具體使用

    MySQL中DATE_ADD函數(shù)的具體使用

    MySQL的DATE_ADD函數(shù)是實現(xiàn)日期時間運算的核心工具,本文全面介紹了其語法結構、參數(shù)說明及等價函數(shù)形式,通過基礎時間偏移、跨月/年計算等實戰(zhàn)案例展示其應用場景,感興趣的可以了解一下
    2026-01-01
  • 解讀mysql刪除操作和查詢操作哪個更消耗性能

    解讀mysql刪除操作和查詢操作哪個更消耗性能

    文章討論了MySQL中刪除操作比查詢操作更消耗性能的原因,包括表級鎖定、磁盤空間浪費、索引稀疏化和事務日志膨脹,同時,文章還提出了一些減少刪除操作對性能影響的策略,如確保表上有合適的索引、分批次刪除和使用合適的WHERE條件
    2025-02-02
  • Mysql查詢優(yōu)化的一些實用方法總結

    Mysql查詢優(yōu)化的一些實用方法總結

    對于MySQL查詢語句來說,效率是最重要的,下面這篇文章主要給大家介紹了關于Mysql查詢優(yōu)化的一些實用方法,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-04-04
  • MySQL刪除binlog日志文件的三種實現(xiàn)方式

    MySQL刪除binlog日志文件的三種實現(xiàn)方式

    本文介紹了三種刪除MySQL binlog日志文件的方法,包含手動刪除、使用SQL命令刪除和設置自動清理,具有一定的參考價值,感興趣的可以了解一下
    2025-02-02
  • ORM模型框架操作mysql數(shù)據庫的方法

    ORM模型框架操作mysql數(shù)據庫的方法

    ORM 全稱是(Object Relational Mapping)表示對象關系映射; 通俗理解可以理解為編程語言的虛擬數(shù)據庫;這篇文章主要介紹了ORM模型框架操作mysql數(shù)據庫的方法,需要的朋友可以參考下
    2021-07-07
  • K8S搭建MySQL一主一從集群詳細步驟

    K8S搭建MySQL一主一從集群詳細步驟

    在k8s上命名空間是用于隔離不同應用的一種機制,我們可以使用命名空間來組織和管理MySQL集群,這篇文章主要給大家介紹了關于K8S搭建MySQL一主一從集群的相關資料,需要的朋友可以參考下
    2023-09-09

最新評論

金阳县| 安阳县| 永昌县| 大方县| 涞源县| 盐山县| 疏勒县| 永平县| 嘉义市| 凯里市| 开江县| 庆元县| 葫芦岛市| 福鼎市| 永泰县| 山阴县| 扎囊县| 钟山县| 文成县| 霍城县| 南京市| 晴隆县| 额尔古纳市| 松原市| 磐安县| 永州市| 木里| 东丰县| 峡江县| 吐鲁番市| 东明县| 宜川县| 阿拉善左旗| 子洲县| 松潘县| 达孜县| 武胜县| 江西省| 富锦市| 黎川县| 平潭县|