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

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

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

此腳本適用于 MySQL 各個生命周期的版本

#!/bin/bash
# mybackup.sh

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

# 輸入賬號和密碼
read -p "請輸入 MySQL 用戶名: " username
read -s -p "請輸入 MySQL 密碼: " password
echo

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

# 備份數(shù)據(jù)庫
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 日志
# 獲取當前的 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 {} \;

腳本說明:

賬號和密碼輸入:使用 read 命令在腳本運行時提示用戶輸入 MySQL 用戶名和密碼,其中 -s 選項用于隱藏密碼輸入。

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

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

備份 binlog 日志

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

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

使用方法:

將上述腳本保存為 mybackup.sh。

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

chmod +x mybackup.sh

運行腳本:

./mybackup.sh

注意事項:

確保用戶輸入的賬號和密碼具有足夠的權限來執(zhí)行備份操作。

方法補充

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

腳本代碼:

#!/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): 開始全備份" >> $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): 開始增量備份" >> $BACKUP_DIR/backup.log
    mysql -u$USER -p$PASSWORD -e "FLUSH LOGS"
    # 復制最新的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用戶名
PASSWORD="your_password"        # MySQL密碼(使用時替換為實際密碼)
BACKUP_DIR="/backup/mysql"       # 備份文件存儲目錄
DATE=$(date +%Y%m%d)              # 當前日期(格式:20231006)
WEEKDAY=$(date +%u)                 # 星期幾(1=星期一,7=星期日)
#!/bin/bash:指定用Bash解釋器執(zhí)行腳本。

關鍵變量:

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

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

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

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

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

if [ $WEEKDAY -eq 7 ]; then
    echo "$(date): 開始全備份" >> $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關鍵參數(shù)??:

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

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

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

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

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

else
    echo "$(date): 開始增量備份" >> $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??:強制MySQL創(chuàng)建新的binlog文件,確保增量備份的邊界清晰。(如從mysql-bin.000123切換到mysql-bin.000124)

mysql -u$USER -p$PASSWORD -e "SHOW MASTER STATUS":獲取當前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存儲路徑 + 文件名。

??示例??:

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

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

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

??示例??:

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

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

如果沒有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

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

-mtime +7:匹配修改時間超過7天的文件。

-delete:直接刪除文件

??5. 日志記錄??

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

Mon Oct 6 03:00:01 UTC 2023: 開始全備份
Mon Oct 6 03:02:30 UTC 2023: 全備份完成

??關鍵注意事項??

??MySQL配置要求??:

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

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

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

相關文章

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

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

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

    cmd進入mysql以及常用的mysql操作教程

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

    Java項目中mysql深度分頁解決方案大全

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

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

    這篇文章主要給大家介紹了關于MySQL中表索引定義的方法與介紹,文中通過示例代碼介紹的非常詳細,對大家學習或者使用MySQL具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-10-10
  • MYSQL中的簡單查詢

    MYSQL中的簡單查詢

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

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

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

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

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

    mysql實現(xiàn)游標分頁的方法詳解

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

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

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

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

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

最新評論

丹江口市| 中超| 盱眙县| 永济市| 九江市| 凌云县| 类乌齐县| 霍林郭勒市| 仪征市| 明溪县| 勃利县| 九江市| 涞源县| 通海县| 浦县| 田阳县| 额尔古纳市| 珲春市| 宁德市| 图们市| 贡嘎县| 麟游县| 阳春市| 三门峡市| 福安市| 昌宁县| 图们市| 福贡县| 松江区| 永顺县| 鹤壁市| 固阳县| 旺苍县| 射阳县| 洛阳市| 定日县| 乳源| 京山县| 通道| 庐江县| 桓台县|