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

MySQL數(shù)據(jù)庫全量備份+增量備份的實(shí)現(xiàn)

 更新時(shí)間:2026年03月03日 10:37:40   作者:南山nash  
本文介紹了通過全量備份和增量備份實(shí)現(xiàn)數(shù)據(jù)庫數(shù)據(jù)的安全,并通過cron定時(shí)任務(wù)自動(dòng)進(jìn)行備份,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

本篇文檔帶來的是數(shù)據(jù)庫每周進(jìn)行一次全量備份,每天通過binlog日志進(jìn)行每天的增量備份,當(dāng)數(shù)據(jù)庫被drop時(shí)可以使用備份文件進(jìn)行恢復(fù)數(shù)據(jù)庫,從而實(shí)現(xiàn)數(shù)據(jù)的安全。

一、實(shí)現(xiàn)全量備份

通過MySQL dump+shell腳本實(shí)現(xiàn)對某個(gè)庫進(jìn)行備份

需要將下面腳本中的文件名稱替換為自己本地存放文件的位置,一定注意文件的創(chuàng)建

#!/bin/bash
# MySQL全量備份腳本
# 配置信息
MYSQL_USER="root"    # 替換你的用戶
MYSQL_PASS="123456"  # 替換成你的密碼
DB_NAME="test"       # 替換你的數(shù)據(jù)庫名稱
BACKUP_DIR="/opt/q_z_back"       #替換為你數(shù)據(jù)庫備份的目錄
FULL_DIR="${BACKUP_DIR}/full"
LOG_FILE="${BACKUP_DIR}/log/backup_log_$(date +%Y%m%d).log"

# 創(chuàng)建目錄(防止目錄被誤刪)
mkdir -p $FULL_DIR $BACKUP_DIR/log

# 全量備份文件名(帶日期時(shí)間,避免覆蓋)
FULL_BACKUP_FILE="${FULL_DIR}/${DB_NAME}_full_$(date +%Y%m%d_%H%M%S).sql"

# 執(zhí)行全量備份(--flush-logs刷新binlog,--master-data記錄binlog位置)
echo "[$(date "+%Y-%m-%d %H:%M:%S")] 開始全量備份${DB_NAME}庫..." >> $LOG_FILE
mysqldump -u$MYSQL_USER -p$MYSQL_PASS --single-transaction --flush-logs --master-data=2 $DB_NAME > $FULL_BACKUP_FILE

# 檢查備份結(jié)果
if [ $? -eq 0 ]; then
    gzip $FULL_BACKUP_FILE  # 壓縮備份
    echo "[$(date "+%Y-%m-%d %H:%M:%S")] 全量備份成功,文件:${FULL_BACKUP_FILE}.gz" >> $LOG_FILE      
    find $FULL_DIR -name "${DB_NAME}_full_*.sql.gz" -mtime +30 -delete # (刪除30天前的)
else
    echo "[$(date "+%Y-%m-%d %H:%M:%S")] 全量備份失??!" >> $LOG_FILE
fi

腳本解釋:備份你的目標(biāo)庫,將備份的文件壓縮并存放在指定目錄下;使用if判斷,如果備份命令執(zhí)行成功就輸出備份成功日志,刪除30天前的備份文件防止占用磁盤空間,備份命令執(zhí)行失敗輸出備份失敗日志

二、實(shí)現(xiàn)增量備份

1. 開啟binlog日志

需要檢查自己的mysql是否開啟了binlog日志,mysql8.0默認(rèn)是開啟binlog日志的,你也可以在本地查看一下,(登錄mysql 然后執(zhí)行show variables like '%log_bin%'; 如果binlog是ON說明是開啟的)要是沒有開啟binlog日志需要開啟binlog日志(可以上網(wǎng)搜索一下如何開啟)

2. binlog日志開啟之后書寫增量備份腳本

先要?jiǎng)?chuàng)建腳本中所需的目錄full(全量備份文件存放位置)、log(日志存放位置)、increment(增量備份文件存放位置),需要更換將下面腳本中的文件名稱替換為自己本地存放文件的位置

#!/bin/bash
# MySQL增量備份腳本(test庫)
# 配置信息
MYSQL_USER="root"
MYSQL_PASS="123456"  # 替換成你的密碼
DB_NAME="test"       # 替換為你備份的數(shù)據(jù)庫
BACKUP_DIR="/opt/q_z_back"   #替換為你的備份目錄
INCR_DIR="${BACKUP_DIR}/increment"
FULL_DIR="${BACKUP_DIR}/full"
LOG_FILE="${BACKUP_DIR}/log/backup_log_$(date +%Y%m%d).log"
# binlog路徑(MySQL 8.0默認(rèn)在/var/lib/mysql/,前綴是binlog)
BINLOG_DIR="/var/lib/mysql"
BINLOG_PREFIX="binlog"

# 創(chuàng)建目錄
mkdir -p $INCR_DIR $BACKUP_DIR/log

# 找到最新的全量備份文件
LATEST_FULL_BACKUP=$(ls -t $FULL_DIR/${DB_NAME}_full_*.sql* 2>/dev/null | head -n 1)
if [ -z "$LATEST_FULL_BACKUP" ]; then
            echo "[$(date "+%Y-%m-%d %H:%M:%S")] 未找到全量備份文件,增量備份失敗!" >> $LOG_FILE
                exit 1
fi
# 從全量備份中提取binlog起始位置
BINLOG_INFO=$(grep -E "CHANGE MASTER TO MASTER_LOG_FILE='.*', MASTER_LOG_POS=[0-9]+" $LATEST_FULL_BACKUP | head -n 1)
BINLOG_FILE=$(echo $BINLOG_INFO | sed -n "s/.*MASTER_LOG_FILE='\(.*\)', MASTER_LOG_POS=[0-9]\+;/\1/p")
BINLOG_POS=$(echo $BINLOG_INFO | sed -n "s/.*MASTER_LOG_POS=\([0-9]\+\);/\1/p")

# 增量備份文件名
INCR_BACKUP_FILE="${INCR_DIR}/${DB_NAME}_incr_$(date +%Y%m%d_%H%M%S).sql"

# 執(zhí)行增量備份(解析binlog)
echo "[$(date "+%Y-%m-%d %H:%M:%S")] 開始增量備份${DB_NAME}庫,從binlog ${BINLOG_FILE} 位置${BINLOG_POS}開始..." >> $LOG_FILE
mysqlbinlog --no-defaults -u$MYSQL_USER -p$MYSQL_PASS --database=$DB_NAME --start-position=$BINLOG_POS $BINLOG_DIR/$BINLOG_FILE > $INCR_BACKUP_FILE

# 檢查備份結(jié)果
if [ $? -eq 0 ]; then
    gzip $INCR_BACKUP_FILE  # 壓縮備份
    echo "[$(date "+%Y-%m-%d %H:%M:%S")] 增量備份成功,文件:${INCR_BACKUP_FILE}.gz" >> $LOG_FILE             
    find $INCR_DIR -name "${DB_NAME}_incr_*.sql.gz" -mtime +7 -delete  # 保留最近7天的增量備份
else
    echo "[$(date "+%Y-%m-%d %H:%M:%S")] 增量備份失?。? >> $LOG_FILE
fi

三、書寫cron定時(shí)任務(wù)

1. 添加定時(shí)任務(wù)規(guī)則

1. crontab -e

加上
0 0 * * 0 /opt/q_z_back/test_full_backup.sh      #這個(gè)可執(zhí)行文件是你的全量備份腳本路徑
0 0 * * * /opt/q_z_back/test_increment_backup.sh #這是你增量備份可執(zhí)行文件路徑
# 0 0 * * 0 表示每周六晚上24點(diǎn)或者每周天晚上0點(diǎn)執(zhí)行這個(gè)腳本
# 0 0 * * * 表示每天晚上0點(diǎn)執(zhí)行這個(gè)腳本

2. 檢查定時(shí)任務(wù)規(guī)則

2. crontab -l #查看規(guī)則

#0 11 * * * /opt/backup/shell/table_student.sh
0 0 * * 0 /opt/q_z_back/test_full_backup.sh
0 0 * * * /opt/q_z_back/test_increment_backup.sh

當(dāng)把這些配置好之后你的數(shù)據(jù)庫就會(huì)被自動(dòng)備份,但是還是存在風(fēng)險(xiǎn),比如中午突然數(shù)據(jù)庫出現(xiàn)故障那么早上的數(shù)據(jù)該怎么修復(fù)呢,這時(shí)候需要主從復(fù)制+高可用來解決這個(gè)問題,后續(xù)我會(huì)帶來主從復(fù)制、高可用等文檔,大家感興趣的可以自己先去了解。

到此這篇關(guān)于MySQL數(shù)據(jù)庫全量備份+增量備份的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)MySQL 全量備份+增量備份內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL 字段默認(rèn)值該如何設(shè)置

    MySQL 字段默認(rèn)值該如何設(shè)置

    這篇文章主要介紹了MySQL 字段默認(rèn)值該如何設(shè)置,幫助大家更好的理解和學(xué)習(xí)使用MySQL,感興趣的朋友可以了解下
    2021-02-02
  • MySQL之B+Tree、索引及使用時(shí)優(yōu)化方式

    MySQL之B+Tree、索引及使用時(shí)優(yōu)化方式

    MySQL索引優(yōu)化關(guān)鍵點(diǎn)包括BTree、Hash、R-tree及Full-text索引,并詳述BTree結(jié)構(gòu)與操作,強(qiáng)調(diào)索引使用場景與失效情形,如優(yōu)化SQL需考慮索引選擇、覆蓋索引及分頁優(yōu)化策略
    2026-06-06
  • 解決MySQL批量新增或修改時(shí)出現(xiàn)異常:Lock?wait?timeout?exceeded

    解決MySQL批量新增或修改時(shí)出現(xiàn)異常:Lock?wait?timeout?exceeded

    這篇文章主要給大家介紹了關(guān)于如何解決MySQL批量新增或修改時(shí)出現(xiàn)異常:Lock?wait?timeout?exceeded;try?restarting?transaction的相關(guān)資料,需要的朋友可以參考下
    2024-01-01
  • mysql橫向轉(zhuǎn)縱向、縱向轉(zhuǎn)橫向排列的方法

    mysql橫向轉(zhuǎn)縱向、縱向轉(zhuǎn)橫向排列的方法

    這篇文章主要介紹了mysql橫向轉(zhuǎn)縱向、縱向轉(zhuǎn)橫向排列的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • MySQL的match函數(shù)在sp中使用BUG解決分析

    MySQL的match函數(shù)在sp中使用BUG解決分析

    這篇文章主要為大家介紹了MySQL的match函數(shù)在sp中使用BUG解決分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • MySQL使用觸發(fā)器實(shí)現(xiàn)數(shù)據(jù)自動(dòng)更新的應(yīng)用實(shí)例

    MySQL使用觸發(fā)器實(shí)現(xiàn)數(shù)據(jù)自動(dòng)更新的應(yīng)用實(shí)例

    觸發(fā)器是非常常見的自動(dòng)化數(shù)據(jù)庫操作方式,無論是在數(shù)據(jù)更新、刪除還是需要自動(dòng)添加一些內(nèi)容到數(shù)據(jù)表上,觸發(fā)器都可以發(fā)揮作用,熟悉 SQL 的基本語法和一些常見的用例,可以幫助你合理地設(shè)置自己的數(shù)據(jù)庫操作流程,
    2024-01-01
  • 了解MySQL查詢語句執(zhí)行過程(5大組件)

    了解MySQL查詢語句執(zhí)行過程(5大組件)

    這篇文章主要介紹了了解MySQL查詢語句執(zhí)行過程(5大組件),文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-08-08
  • mysql插入帶emoji表情的數(shù)據(jù)報(bào)錯(cuò)問題

    mysql插入帶emoji表情的數(shù)據(jù)報(bào)錯(cuò)問題

    在處理MySQL數(shù)據(jù)庫插入表情時(shí)出現(xiàn)錯(cuò)誤,主要可能是由三個(gè)因素引起的:1、數(shù)據(jù)庫版本號是否大于5.5.3;2、數(shù)據(jù)庫表及字段的字符集是否為utf8mb4;3、項(xiàng)目中MySQL驅(qū)動(dòng)的版本是否大于5.1.13,本文詳細(xì)講解了如何針對這三個(gè)關(guān)鍵點(diǎn)進(jìn)行排查和解決
    2024-11-11
  • MySQL中Union子句不支持order by的解決方法

    MySQL中Union子句不支持order by的解決方法

    這篇文章主要介紹了MySQL中Union子句不支持order by的解決方法,結(jié)合實(shí)例形式分析了在mysql的Union子句中使用order by的方法,需要的朋友可以參考下
    2016-06-06
  • Ubuntu自啟動(dòng)Mysql的三種方式

    Ubuntu自啟動(dòng)Mysql的三種方式

    本文給大家介紹ubuntu自啟動(dòng)mysql的三種方式,一種方法通過執(zhí)行命令,也是最簡單的方法,第二種方法是使用sysv-rc-cont工具,第三種方法是使用chkconfig工具,關(guān)于以上三種方式的詳解請看下文
    2015-10-10

最新評論

滁州市| 呼伦贝尔市| 长海县| 大连市| 宁波市| 新泰市| 商洛市| 太保市| 永和县| 阿克陶县| 维西| 略阳县| 马龙县| 边坝县| 郑州市| 霍林郭勒市| 湘潭县| 平定县| 大竹县| 右玉县| 象州县| 大丰市| 高雄县| 长沙市| 海原县| 南召县| 云龙县| 桐城市| 郁南县| 无极县| 松溪县| 黑水县| 肇源县| 武陟县| 玉林市| 建水县| 股票| 阳信县| 临泽县| 云霄县| 长葛市|