欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL數(shù)據(jù)庫(kù)實(shí)現(xiàn)本地和異地備份的全面指南

 更新時(shí)間:2025年09月02日 10:06:16   作者:XMYX-0  
本文將分享一份改進(jìn)版的數(shù)據(jù)庫(kù)備份腳本,并結(jié)合實(shí)際案例,闡述如何定期備份MySQL數(shù)據(jù)庫(kù),并實(shí)現(xiàn)本地和異地備份,有需要的小伙伴可以參考一下

在Linux環(huán)境下,mysqldump工具是進(jìn)行MySQL數(shù)據(jù)庫(kù)備份的常見(jiàn)方式。本文將分享一份改進(jìn)版的數(shù)據(jù)庫(kù)備份腳本,并結(jié)合實(shí)際案例,闡述如何定期備份MySQL數(shù)據(jù)庫(kù),并實(shí)現(xiàn)本地和異地備份。通過(guò)本文,您將掌握一個(gè)高效、安全的備份方案,確保數(shù)據(jù)的安全性和可恢復(fù)性。

一定要全部看完,再操作,因?yàn)閿?shù)據(jù)庫(kù)密碼我沒(méi)有再腳本中體現(xiàn),當(dāng)然也可以體現(xiàn),看具體需求

備份腳本概述

我們創(chuàng)建一個(gè)改進(jìn)版的備份腳本,命名為mysql_backup.sh。該腳本的目標(biāo)是:

  • 自動(dòng)備份MySQL數(shù)據(jù)庫(kù),并排除系統(tǒng)數(shù)據(jù)庫(kù)(如mysqlinformation_schema等)。
  • 將備份數(shù)據(jù)打包并進(jìn)行本地壓縮。
  • 同步備份到異地備份服務(wù)器(通過(guò)rsync)。
  • 自動(dòng)清理30天前的備份文件,節(jié)省存儲(chǔ)空間。
  • 記錄詳細(xì)的備份日志,便于排查問(wèn)題。

編寫備份腳本

腳本內(nèi)容

#!/bin/bash
set -eo pipefail
trap 'echo "錯(cuò)誤發(fā)生在行 $LINENO"; exit 1' ERR

# 配置區(qū)
USER="root"                           # MySQL用戶名
BACKUP_DIR="/data/backup"             # 備份存儲(chǔ)目錄
EXCLUDE_DBS="mysql|information_schema|performance_schema|sys"  # 排除的系統(tǒng)數(shù)據(jù)庫(kù)
RSYNC_TARGET="rsync_backup@192.168.1.2::mysqlbackup/192.168.1.3/"     # 異地備份目標(biāo)
LOGFILE="$BACKUP_DIR/data_backup.log" # 日志文件路徑
DATE=$(date +%Y%m%d_%H%M)             # 當(dāng)前日期時(shí)間

# 創(chuàng)建備份目錄
mkdir -p "$BACKUP_DIR" || exit 1
cd "$BACKUP_DIR" || exit 1

# 記錄開(kāi)始時(shí)間
echo "==== 備份開(kāi)始 $(date +"%Y-%m-%d %H:%M:%S") ====" >> "$LOGFILE"

# 獲取數(shù)據(jù)庫(kù)列表并備份
DATABASES=$(mysql -e "SHOW DATABASES;" | grep -Ev "$EXCLUDE_DBS" | tr '\n' ' ')
echo "備份數(shù)據(jù)庫(kù): $DATABASES" >> "$LOGFILE"
mysqldump --routines --single-transaction --master-data=2 --databases $DATABASES > "wzqmysql_bak${DATE}.sql"

# 壓縮備份
if [ -s "wzqmysql_bak${DATE}.sql" ]; then
  tar -czf "wzqmysql_bak${DATE}.tar.gz" "wzqmysql_bak${DATE}.sql"
  rm -f "wzqmysql_bak${DATE}.sql"
  echo "壓縮完成,文件大小: $(du -sh wzqmysql_bak${DATE}.tar.gz)" >> "$LOGFILE"
else
  echo "備份文件為空,終止流程!" >> "$LOGFILE"
  exit 1
fi

# 同步到異地
rsync -avz --password-file=/etc/rsync.password "wzqmysql_bak${DATE}.tar.gz" "$RSYNC_TARGET"

# 清理30天前備份
find "$BACKUP_DIR" -type f -mtime +30 -name "*.gz" -delete

echo "==== 備份完成 $(date +"%Y-%m-%d %H:%M:%S") ====" >> "$LOGFILE"

主要參數(shù)解釋

  • --single-transaction:對(duì)于InnoDB表,確保備份的一致性。
  • --master-data=2:將主服務(wù)器的二進(jìn)制日志位置寫入備份文件,適用于主從復(fù)制環(huán)境。
  • --routines:備份存儲(chǔ)過(guò)程和函數(shù)。
  • rsync:用于將備份文件同步到異地服務(wù)器。
  • find -mtime +30:清理30天前的備份文件。

設(shè)置腳本權(quán)限

在Linux系統(tǒng)中,為腳本添加執(zhí)行權(quán)限:

chmod +x /data/mysql_backup.sh

定期執(zhí)行備份

為了實(shí)現(xiàn)自動(dòng)備份,可以將該腳本添加到定時(shí)任務(wù)中(例如每天凌晨1點(diǎn)執(zhí)行)。

設(shè)置crontab任務(wù)

編輯crontab配置文件:

crontab -e

添加如下行,設(shè)定每天凌晨1點(diǎn)執(zhí)行備份腳本:

0 1 * * * /data/mysql_backup.sh

保存退出后,crontab會(huì)自動(dòng)更新。

安全性建議

避免明文密碼

將MySQL密碼存儲(chǔ)在~/.my.cnf配置文件中,并設(shè)置嚴(yán)格權(quán)限:

[client]
user = root
password = 123456

設(shè)置配置文件權(quán)限:

chmod 600 ~/.my.cnf

rsync密碼文件安全

確保/etc/rsync.password權(quán)限為600:

chmod 600 /etc/rsync.password

進(jìn)階功能和優(yōu)化

增量備份

mysqldump不支持增量備份,建議使用二進(jìn)制日志或Percona XtraBackup。以下是簡(jiǎn)要步驟:

查看二進(jìn)制日志位置:

head -n 30 wzqmysql_bak${DATE}.sql | grep "CHANGE MASTER TO"

使用mysqlbinlog導(dǎo)出增量日志:

mysqlbinlog --start-datetime="2025-02-21 00:00:00" /var/lib/mysql/binlog.000001 > incremental.sql

備份驗(yàn)證

定期驗(yàn)證備份文件是否可以成功恢復(fù):

# 解壓備份
tar -wzqf wzqmysql_bak20250221_0100.tar.gz
# 恢復(fù)數(shù)據(jù)庫(kù)
mysql -e "CREATE DATABASE test_restore;"
mysql test_restore < wzqmysql_bak20250221_0100.sql

日志輪轉(zhuǎn)

使用logrotate管理日志文件:

/data/backup/data_backup.log {
  daily
  rotate 30
  compress
  missingok
}

詳細(xì)解釋

  • daily: 這表示日志文件將每天進(jìn)行輪換。如果日志文件每天更新或者你希望每次備份后都生成一個(gè)新的日志文件,可以使用這個(gè)選項(xiàng)。
  • rotate 30: 這表示系統(tǒng)將保留最近30個(gè)輪換過(guò)的日志文件,其余的將被刪除。比如,你的日志文件每天生成一個(gè)新備份,當(dāng)系統(tǒng)積累到30個(gè)日志文件時(shí),最舊的日志文件將會(huì)被刪除,確保只保留最新的30個(gè)日志備份。
  • compress: 這個(gè)選項(xiàng)告訴logrotate在輪換日志時(shí),對(duì)舊的日志文件進(jìn)行壓縮(通常是.gz格式),從而節(jié)省磁盤空間。壓縮文件的名字一般會(huì)附加.gz擴(kuò)展名,例如data_backup.log.1.gzdata_backup.log.2.gz等。
  • missingok: 如果指定的日志文件不存在,不會(huì)拋出錯(cuò)誤,而是跳過(guò)處理。例如,如果/data/backup/data_backup.log文件在某一天沒(méi)有生成,logrotate會(huì)忽略這個(gè)情況,不會(huì)報(bào)錯(cuò)或中止執(zhí)行。

總結(jié)

通過(guò)本文的改進(jìn)版腳本,您可以實(shí)現(xiàn)MySQL數(shù)據(jù)庫(kù)的定期備份、本地壓縮、異地同步以及舊備份文件的自動(dòng)清理。結(jié)合安全性建議和進(jìn)階功能,您可以構(gòu)建一個(gè)高效、可靠的數(shù)據(jù)庫(kù)備份方案,確保數(shù)據(jù)的安全性和可恢復(fù)性。

附錄:腳本依賴

  • MySQL客戶端和mysqldump工具。
  • rsync用于異地備份。
  • cron用于定時(shí)任務(wù)調(diào)度。
  • mailutils(可選)用于郵件通知。

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

相關(guān)文章

  • MySQL優(yōu)化教程之超大分頁(yè)查詢

    MySQL優(yōu)化教程之超大分頁(yè)查詢

    這篇文章主要給大家介紹了關(guān)于MySQL優(yōu)化教程之超大分頁(yè)查詢的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Can''t connect to MySQL server on ''localhost'' (10048)問(wèn)題解決方法

    Can''t connect to MySQL server on ''localhost'' (10048)問(wèn)題解決方

    windows 2003服務(wù)器運(yùn)行php的提示Can't connect to MySQL server on 'localhost' (10048), 下面來(lái)看下解決方法
    2013-09-09
  • mysql斷電后無(wú)法啟動(dòng)的問(wèn)題小結(jié)

    mysql斷電后無(wú)法啟動(dòng)的問(wèn)題小結(jié)

    這篇文章主要介紹了mysql斷電后無(wú)法啟動(dòng)的問(wèn)題小結(jié),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-04-04
  • mysql如何顯示longblob解決方案

    mysql如何顯示longblob解決方案

    這篇文章主要為大家介紹了mysql如何顯示longblob解決方案,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • 基于mysql查詢語(yǔ)句的使用詳解

    基于mysql查詢語(yǔ)句的使用詳解

    本篇文章是對(duì)mysql查詢語(yǔ)句的使用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • MySQL事務(wù)日志(redo?log和undo?log)的詳細(xì)分析

    MySQL事務(wù)日志(redo?log和undo?log)的詳細(xì)分析

    innodb事務(wù)日志包括redo?log和undo?log,redo?log是重做日志,提供前滾操作,undo?log是回滾日志,提供回滾操作,下面這篇文章主要給大家介紹了關(guān)于MySQL事務(wù)日志(redo?log和undo?log)的詳細(xì)分析,需要的朋友可以參考下
    2022-04-04
  • 淺析MysQL B-Tree 索引

    淺析MysQL B-Tree 索引

    這篇文章主要介紹了MysQL B-Tree 索引的相關(guān)資料,幫助大家更好的理解和使用MySQL,感興趣的朋友可以了解下
    2020-11-11
  • MySQL 常見(jiàn)的數(shù)據(jù)表設(shè)計(jì)誤區(qū)匯總

    MySQL 常見(jiàn)的數(shù)據(jù)表設(shè)計(jì)誤區(qū)匯總

    雖然會(huì)有一些常規(guī)意義上的數(shù)據(jù)表錯(cuò)誤設(shè)計(jì)和優(yōu)秀設(shè)計(jì)原則,但是同樣也會(huì)有 MySQL 特定的一些情況,這會(huì)導(dǎo)致我們犯一些 MySQL 特定的錯(cuò)誤。本篇討論常見(jiàn)的設(shè)計(jì)誤區(qū)。
    2021-06-06
  • MySQL大表數(shù)據(jù)的分區(qū)與分庫(kù)分表的實(shí)現(xiàn)

    MySQL大表數(shù)據(jù)的分區(qū)與分庫(kù)分表的實(shí)現(xiàn)

    數(shù)據(jù)庫(kù)的分區(qū)和分庫(kù)分表是兩種常用的技術(shù)方案,本文主要介紹了MySQL大表數(shù)據(jù)的分區(qū)與分庫(kù)分表的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-03-03
  • Mysql中的自連接問(wèn)題

    Mysql中的自連接問(wèn)題

    這篇文章主要介紹了Mysql中的自連接問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05

最新評(píng)論