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

MySQL中萬(wàn)能備份腳本的實(shí)現(xiàn)詳解

 更新時(shí)間:2025年11月13日 08:41:34   作者:liuziyi  
這篇文章主要為大家詳細(xì)介紹了MySQL中萬(wàn)能備份腳本的實(shí)現(xiàn)方法,此腳本適用于 MySQL 各個(gè)生命周期的版本,文中的示例代碼講解詳細(xì),有需要的可以了解下

此腳本適用于 MySQL 各個(gè)生命周期的版本

#!/bin/bash
# mybackup.sh

# 備份保留天數(shù),建議保留三天
days=7
# 備份時(shí)間
time=$(date +%Y%m%d%H%M%S)
# 備份保存路徑
backup_dir=/opt/backup
# 備份工具
tool=mysqldump
# 端口
port="3306"
# 是否采用 --all-databases 備份所有數(shù)據(jù)庫(kù),是填寫(xiě) Y,否填其他
read -p "是否備份所有數(shù)據(jù)庫(kù)?(Y/N): " bak_all
# 將要備份的數(shù)據(jù)庫(kù),填寫(xiě)將要備份的數(shù)據(jù)庫(kù)名
if [ "$bak_all" != "Y" ]; then
    read -p "請(qǐng)輸入要備份的數(shù)據(jù)庫(kù)名,多個(gè)數(shù)據(jù)庫(kù)用空格分隔: " database_input
    IFS=' ' read -r -a database_arr <<< "$database_input"
fi

# 輸入賬號(hào)和密碼
read -p "請(qǐng)輸入 MySQL 用戶(hù)名: " username
read -s -p "請(qǐng)輸入 MySQL 密碼: " password
echo

# 檢查文件夾是否存在,不存在則創(chuàng)建
if [ ! -d "$backup_dir/mysqlbak_$time" ]; then
    mkdir -p "$backup_dir/mysqlbak_$time"
fi

# 備份數(shù)據(jù)庫(kù)
if [ "$bak_all" == "Y" ]; then
    $tool -u"$username" -p"$password" -P"$port" --master-data=2 --single-transaction --set-gtid-purged=on --all-databases | gzip > "$backup_dir/mysqlbak_$time/mysqlbak_all_$time.sql.gz"
else
    for database in "${database_arr[@]}"; do
        $tool -u"$username" -p"$password" -P"$port" --master-data=2 --single-transaction --set-gtid-purged=on "$database" | gzip > "$backup_dir/mysqlbak_$time/mysqlbak_${database}_${time}.sql.gz"
    done
fi

# 備份 binlog 日志
# 獲取當(dāng)前的 binlog 文件列表
binlog_files=$(mysql -u"$username" -p"$password" -P"$port" -e "SHOW BINARY LOGS;" | awk 'NR>1 {print $1}')
for binlog_file in $binlog_files; do
    mysqlbinlog -u"$username" -p"$password" -P"$port" "$binlog_file" > "$backup_dir/mysqlbak_$time/${binlog_file}_${time}.log"
done

# 刪除指定天數(shù)前的備份
find "$backup_dir" -maxdepth 1 -type d -mtime +$days -name 'mysqlbak*' -exec rm -rf {} \;

腳本說(shuō)明:

賬號(hào)和密碼輸入:使用 read 命令在腳本運(yùn)行時(shí)提示用戶(hù)輸入 MySQL 用戶(hù)名和密碼,其中 -s 選項(xiàng)用于隱藏密碼輸入。

數(shù)據(jù)庫(kù)選擇:詢(xún)問(wèn)用戶(hù)是否備份所有數(shù)據(jù)庫(kù),如果選擇否,則讓用戶(hù)輸入要備份的數(shù)據(jù)庫(kù)名,多個(gè)數(shù)據(jù)庫(kù)名用空格分隔。

備份數(shù)據(jù)庫(kù):根據(jù)用戶(hù)的選擇,使用 mysqldump 備份所有數(shù)據(jù)庫(kù)或指定的數(shù)據(jù)庫(kù),并將備份文件壓縮保存。

備份 binlog 日志

  • 使用 mysql -e 命令獲取當(dāng)前的 binlog 文件列表。
  • 遍歷 binlog 文件列表,使用 mysqlbinlog 命令將每個(gè) binlog 文件備份到指定的備份目錄。

刪除舊備份:使用 find 命令刪除指定天數(shù)前的備份文件夾。

使用方法:

將上述腳本保存為 mybackup.sh

給腳本添加執(zhí)行權(quán)限:

chmod +x mybackup.sh

運(yùn)行腳本:

./mybackup.sh

注意事項(xiàng):

確保用戶(hù)輸入的賬號(hào)和密碼具有足夠的權(quán)限來(lái)執(zhí)行備份操作。

方法補(bǔ)充

以下是小編為大家整理的其他MySQL 備份腳本,希望對(duì)大家有所幫助

腳本代碼:

#!/bin/bash

# 定義變量
USER="root"
PASSWORD="123456"
BACKUP_DIR="/backup/mysql"
DATE=$(date +%Y%m%d)
WEEKDAY=$(date +%u)  # 1=星期一, 7=星期日

# 創(chuàng)建備份目錄
mkdir -p $BACKUP_DIR

# 周日全備份,其他日子增量備份
if [ $WEEKDAY -eq 7 ]; then
    # 全備份
    echo "$(date): 開(kāi)始全備份" >> $BACKUP_DIR/backup.log
    mysqldump -u$USER -p$PASSWORD --all-databases --single-transaction | gzip > $BACKUP_DIR/full_$DATE.sql.gz
    echo "$(date): 全備份完成" >> $BACKUP_DIR/backup.log
else
    # 增量備份(備份binlog)
    echo "$(date): 開(kāi)始增量備份" >> $BACKUP_DIR/backup.log
    mysql -u$USER -p$PASSWORD -e "FLUSH LOGS"
    # 復(fù)制最新的binlog文件
    cp /usr/local/mysql/data/mysql-bin.$(mysql -u$USER -p$PASSWORD -e "SHOW MASTER STATUS" | awk 'NR==2{print $1}' | sed 's/mysql-bin.//') $BACKUP_DIR/binlog_$DATE
    echo "$(date): 增量備份完成" >> $BACKUP_DIR/backup.log
fi

# 刪除7天前的備份
find $BACKUP_DIR -name "*.gz" -mtime +7 -delete
find $BACKUP_DIR -name "binlog_*" -mtime +7 -delete

腳本解析

1. 變量定義

USER="root"                     # MySQL用戶(hù)名
PASSWORD="your_password"        # MySQL密碼(使用時(shí)替換為實(shí)際密碼)
BACKUP_DIR="/backup/mysql"       # 備份文件存儲(chǔ)目錄
DATE=$(date +%Y%m%d)              # 當(dāng)前日期(格式:20231006)
WEEKDAY=$(date +%u)                 # 星期幾(1=星期一,7=星期日)
#!/bin/bash:指定用Bash解釋器執(zhí)行腳本。

關(guān)鍵變量:

  • USER/PASSWORD:連接MySQL的用戶(hù)和密碼。
  • BACKUP_DIR:所有備份文件將存儲(chǔ)在此目錄。
  • DATE和WEEKDAY:用于按日期命名備份文件和控制備份類(lèi)型。

??2. 創(chuàng)建備份目錄??

mkdir -p $BACKUP_DIR
-p:如果目錄不存在則創(chuàng)建,避免報(bào)錯(cuò)。

??3. 備份邏輯(核心部分)??

??情況一:周日全備份??

if [ $WEEKDAY -eq 7 ]; then
    echo "$(date): 開(kāi)始全備份" >> $BACKUP_DIR/backup.log
    mysqldump -u $USER -p $PASSWORD --all-databases --single-transaction | gzip > $BACKUP_DIR/full_$DATE.sql.gz
    echo "$(date): 全備份完成" >> $BACKUP_DIR/backup.log

mysqldump關(guān)鍵參數(shù)??:

--all-databases:備份所有數(shù)據(jù)庫(kù)。

--single-transaction:在事務(wù)中執(zhí)行備份,確保數(shù)據(jù)一致性。

 gzip:壓縮備份文件以節(jié)省空間。

> full_$DATE.sql.gz  :輸出到以日期命名的壓縮文件(如full_20231006.sql.gz)

??情況二:其他日期增量備份??

else
    echo "$(date): 開(kāi)始增量備份" >> $BACKUP_DIR/backup.log
    mysql -u$USER -p$PASSWORD -e "FLUSH LOGS"
    cp /usr/local/mysql/data/mysql-bin.$(mysql -u$USER -p$PASSWORD -e "SHOW MASTER STATUS" | awk 'NR==2{print $1}' | sed 's/mysql-bin.//') $BACKUP_DIR/binlog_$DATE
    echo "$(date): 增量備份完成" >> $BACKUP_DIR/backup.log
fi

FLUSH LOGS??:強(qiáng)制MySQL創(chuàng)建新的binlog文件,確保增量備份的邊界清晰。(如從mysql-bin.000123切換到mysql-bin.000124)

mysql -u$USER -p$PASSWORD -e "SHOW MASTER STATUS":獲取當(dāng)前binlog文件名(如mysql-bin.000123)。

awk 'NR==2{print $1}' :從SHOW MASTER STATUS的輸出中提取第二行的第一列(即 mysql-bin.000123)

sed 's/mysql-bin.//':去掉mysql-bin.前綴把 mysql-bin.000123變成 000123。

/usr/local/mysql/data/mysql-bin.$(...):

??作用??:組合MySQL的binlog存儲(chǔ)路徑 + 文件名。

??示例??:

如果 SHOW MASTER STATUS返回 mysql-bin.000123,則最終路徑是:

/var/lib/mysql/mysql-bin.000123
cp ... $BACKUP_DIR/binlog_$DATE

??作用??:將binlog文件復(fù)制到備份目錄,并按日期命名(如 binlog_20231006)。

??示例??:

cp /var/lib/mysql/mysql-bin.000123 /backup/mysql/binlog_20231006

??增量備份原理??:MySQL的binlog記錄了所有數(shù)據(jù)變更,通過(guò)定期保存binlog實(shí)現(xiàn)增量備份。

如果沒(méi)有binlog文件 則再/etc/my.cnf 的 [mysqld] 里添加這一行 log_bin = mysql-bin (啟用binlog,文件前綴為mysql-bin)

??4. 清理舊備份??

find $BACKUP_DIR -name "*.gz" -mtime +7 -delete
find $BACKUP_DIR -name "binlog_*" -mtime +7 -delete

??作用??:自動(dòng)刪除7天前的全備份(.gz文件)和增量備份(binlog_*文件)。

-mtime +7:匹配修改時(shí)間超過(guò)7天的文件。

-delete:直接刪除文件

??5. 日志記錄??

所有操作均通過(guò)echo追加到$BACKUP_DIR/backup.log,格式示例:

Mon Oct 6 03:00:01 UTC 2023: 開(kāi)始全備份
Mon Oct 6 03:02:30 UTC 2023: 全備份完成

??關(guān)鍵注意事項(xiàng)??

??MySQL配置要求??:

必須啟用binlog(檢查my.cnf中是否有l(wèi)og_bin=ON)。

確保/usr/local/mysql/data是正確的binlog路徑(根據(jù)實(shí)際配置調(diào)整)。

到此這篇關(guān)于MySQL中萬(wàn)能備份腳本的實(shí)現(xiàn)詳解的文章就介紹到這了,更多相關(guān)MySQL備份腳本內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SQL?日期處理視圖創(chuàng)建(常見(jiàn)數(shù)據(jù)類(lèi)型查詢(xún)防范?SQL注入)

    SQL?日期處理視圖創(chuàng)建(常見(jiàn)數(shù)據(jù)類(lèi)型查詢(xún)防范?SQL注入)

    這篇文章主要為大家介紹了SQL日期處理和視圖創(chuàng)建:常見(jiàn)數(shù)據(jù)類(lèi)型、示例查詢(xún)和防范?SQL?注入方法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • cmd進(jìn)入mysql以及常用的mysql操作教程

    cmd進(jìn)入mysql以及常用的mysql操作教程

    對(duì)于從來(lái)自事計(jì)算機(jī)專(zhuān)業(yè)工作的人而言,MySQL并不陌生,下面這篇文章主要給大家介紹了關(guān)于cmd進(jìn)入mysql以及常用的mysql操作的相關(guān)資料,需要的朋友可以參考下
    2023-11-11
  • Java項(xiàng)目中mysql深度分頁(yè)解決方案大全

    Java項(xiàng)目中mysql深度分頁(yè)解決方案大全

    深度分頁(yè)的優(yōu)化核心在于減少M(fèi)ySQL掃描的數(shù)據(jù)量,避免全表掃描,通過(guò)使用索引、游標(biāo)分頁(yè)、延遲關(guān)聯(lián)等技術(shù),可以顯著提升分頁(yè)查詢(xún)的性能,這篇文章主要介紹了Java項(xiàng)目中mysql深度分頁(yè)的相關(guān)資料,需要的朋友可以參考下
    2026-01-01
  • MySQL中表索引定義的方法與介紹

    MySQL中表索引定義的方法與介紹

    這篇文章主要給大家介紹了關(guān)于MySQL中表索引定義的方法與介紹,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用MySQL具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • MYSQL中的簡(jiǎn)單查詢(xún)

    MYSQL中的簡(jiǎn)單查詢(xún)

    這篇文章詳細(xì)介紹了MySQL中常見(jiàn)的查詢(xún)語(yǔ)法,包括SELECT語(yǔ)句的簡(jiǎn)單查詢(xún)、基于表的查詢(xún)、基于條件的查詢(xún)、基于分組的查詢(xún)等,它還解釋了COUNT()、SUM()、AVG()、MAX()和MIN()等聚合函數(shù)的使用,以及GROUP BY和HAVING子句在分組查詢(xún)中的應(yīng)用
    2025-02-02
  • MySQL保證數(shù)據(jù)不丟失的方案詳解

    MySQL保證數(shù)據(jù)不丟失的方案詳解

    MySQL作為一個(gè)存儲(chǔ)數(shù)據(jù)的產(chǎn)品,怎么確保數(shù)據(jù)的持久性和不丟失才是最重要的,感興趣的可以跟隨本文一探究竟,文中通過(guò)圖文結(jié)合給大家講解的非常詳細(xì),需要的朋友快來(lái)跟著小編一起來(lái)學(xué)習(xí)吧
    2023-12-12
  • MYSQL代碼 定期備份Mysql數(shù)據(jù)庫(kù)

    MYSQL代碼 定期備份Mysql數(shù)據(jù)庫(kù)

    Mysql自動(dòng)備份腳本供大家參考,實(shí)現(xiàn)了定期備份Mysql數(shù)據(jù)庫(kù),并且可以選在在每周的一天做指定目錄下文件的全面?zhèn)浞荩瑐浞菸募詣?dòng)上傳到你指定的FTP上,保證了備份的可靠性。
    2009-04-04
  • mysql實(shí)現(xiàn)游標(biāo)分頁(yè)的方法詳解

    mysql實(shí)現(xiàn)游標(biāo)分頁(yè)的方法詳解

    這篇文章主要為大家詳細(xì)介紹了mysql實(shí)現(xiàn)游標(biāo)分頁(yè)的相關(guān)方法,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-10-10
  • MySQL?中的?CAST?函數(shù)詳解及常見(jiàn)用法

    MySQL?中的?CAST?函數(shù)詳解及常見(jiàn)用法

    CAST?函數(shù)是MySQL中用于數(shù)據(jù)類(lèi)型轉(zhuǎn)換的重要函數(shù),它允許你將一個(gè)值從一種數(shù)據(jù)類(lèi)型轉(zhuǎn)換為另一種數(shù)據(jù)類(lèi)型,本文給大家介紹MySQL?中的?CAST?函數(shù),感興趣的朋友一起看看吧
    2025-07-07
  • 從ibd文件恢復(fù)MySQL數(shù)據(jù)的操作步驟及常見(jiàn)錯(cuò)誤

    從ibd文件恢復(fù)MySQL數(shù)據(jù)的操作步驟及常見(jiàn)錯(cuò)誤

    MySQL數(shù)據(jù)恢復(fù)是數(shù)據(jù)庫(kù)管理中的一項(xiàng)重要任務(wù),尤其是在遭遇意外數(shù)據(jù)丟失、硬件故障或軟件錯(cuò)誤時(shí),下面這篇文章主要給大家介紹了關(guān)于從ibd文件恢復(fù)MySQL數(shù)據(jù)的操作步驟及常見(jiàn)錯(cuò)誤,需要的朋友可以參考下
    2024-08-08

最新評(píng)論

北川| 洛阳市| 伊通| 溧水县| 和林格尔县| 民丰县| 雅江县| 新疆| 五寨县| 敦化市| 平遥县| 浠水县| 齐河县| 禄丰县| 禄劝| 蓝山县| 江门市| 龙州县| 资阳市| 汝城县| 青海省| 噶尔县| 茌平县| 三河市| 乌什县| 张家川| 沙坪坝区| 靖安县| 睢宁县| 红河县| 共和县| 垦利县| 临西县| 东乡县| 红桥区| 蓬安县| 阿合奇县| 新乐市| 安阳县| 乌什县| 民县|