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

MySQL數據庫定時備份的幾種實現方法

 更新時間:2024年07月22日 10:44:48   作者:師小師  
本文主要介紹了MySQL數據庫定時備份的幾種實現方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

1、查看 MySQL 是否安裝了 crontab

yum -y install vixie-cron
yum -y install crontabs

2、crontab 常用命令

# 查看進程是否正在進行
ps aux | grep crond
# 查看運行狀態(tài)
systemctl status crond   或者 service crond status
# 啟動服務
systemctl start crond  或者 service crond status
# 關閉服務
systemctl stop crond  或者 service crond status
# 重啟服務
systemctl restart crond  或者 service crond restart
# 重新載入配置
systemctl reload crond
# 加入開機啟動
systemctl enable crond
# 查看定時任務
crontab -l
# 編輯
crontab -e

3、編寫 dump_mysql.sh 腳本

方式一:簡單版

# 設置mysql的登錄用戶名和密碼(根據實際情況填寫)
mysql_user="root"
mysql_password="123456"
mysql_host="101.133.170.222"
mysql_port="3306"
mysql_charset="utf8"
# 備份文件存放地址(根據實際情況填寫)
backup_location=/data/mysql/bakup
 
# 是否刪除過期數據
expire_backup_delete="ON"
expire_days=7
backup_time=`date +%Y%m%d%H%M`
backup_dir=$backup_location
welcome_msg="Welcome to use MySQL backup tools!"
# 備份指定數據庫中數據(此處假設數據庫是ruoyi )mysql容器里面找到mysqldump我的路徑是/usr/bin/mysqldump
docker exec mysql /usr/bin/mysqldump -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password -B ruoyi > $backup_dir/mysql-$backup_time.sql
# 刪除過期數據
if [ "$expire_backup_delete" == "ON" -a  "$backup_location" != "" ];then
        `find $backup_location/ -type f -mtime +$expire_days | xargs rm -rf`
        echo "Expired backup data delete complete!"
fi

方式二:復雜版

mysql_user="root"  #MySQL備份用戶
mysql_password="123456" #MySQL備份用戶的密碼
mysql_host="101.133.170.222"
mysql_port="3306"  
mysql_charset="utf8" #MySQL編碼0 2 * * * docker exec -i mysql sh /root/mysql8.0.20/mysqlbfplus/run.sh
backup_db_arr=("ruoyi") #要備份的數據庫名稱,多個用空格分開隔開 如("db1" "db2" "db3")
backup_location=/data/mysql/bakup  #備份數據存放位置,末尾請不要帶"/",此項可以保持默認,程序會自動創(chuàng)建文件夾
expire_backup_delete="ON" #是否開啟過期備份刪除 ON為開啟 OFF為關閉
expire_days=7 #過期時間天數 默認為三天,此項只有在expire_backup_delete開啟時有效
backup_time=`date +%Y%m%d%H%M`  #定義備份詳細時間
backup_Ymd=`date +%Y-%m-%d` #定義備份目錄中的年月日時間
#backup_day_ago=`date -d 'expire_days days ago' +%Y-%m-%d` #備份之前的日期
backup_dir=$backup_location/$backup_Ymd  #備份文件夾全路徑
welcome_msg="Welcome to use MySQL backup tools!" #歡迎語
mysql_ps=`ps -ef |grep mysql |wc -l` 
mysql_listen=`netstat -an |grep LISTEN |grep $mysql_port|wc -l`
if [ [$mysql_ps == 0] -o [$mysql_listen == 0] ]; then
        echo "ERROR:MySQL is not running! backup stop!"
        exit
else
        echo $welcome_msg

echo "MySQL connect ok! Please wait......"
fi
# 判斷有沒有定義備份的數據庫,如果有定義則開始備份,否則退出備份
if [ "$backup_db_arr" != "" ];then
        #dbnames=$(cut -d ',' -f1-5 $backup_database)
        #echo "arr is (${backup_db_arr[@]})"
        for dbname in ${backup_db_arr[@]}
        do
                echo "database $dbname backup start..."
                `mkdir -p $backup_dir`
                docker exec mysql /usr/bin/mysqldump -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password $dbname --default-character-set=$mysql_charset | gzip > $backup_dir/$dbname-$backup_time.sql.gz
                 flag=`echo $?`
                 if [ $flag == "0" ];then
                         echo "database $dbname success backup to $backup_dir/$dbname-$backup_time.sql.gz"
                 else
                         echo "database $dbname backup fail!"
                 fi
         done
else
        echo "ERROR:No database to backup! backup stop"
        exit
fi
# 如果開啟了刪除過期備份,則進行刪除操作
if [ "$expire_backup_delete" == "ON" -a  "$backup_location" != "" ];then
         #`find $backup_location/ -type d -o -type f -ctime +$expire_days -exec rm -rf {} \;`
         `find $backup_location/ -type d -mtime +$expire_days | xargs rm -rf`
         echo "Expired backup data delete complete!"
fi

方式三:docker定時備份,根據備份數量刪除

#用戶名
mysql_user="root"
#密碼
mysql_password="root"
mysql_host="101.133.170.222"
#端口號 
mysql_port="3306"
#將要備份的數據庫
database_name="ruoyi"
#編碼格式
mysql_charset="utf8"

#保存?zhèn)浞菸募疃鄠€數
count=3
#備份保存路徑
backup_path=/data/mysql/bakup
#日期
date_time=`date +%Y-%m-%d-%H-%M`

#如果文件夾不存在則創(chuàng)建
if [ ! -d $backup_path ]; 
then     
    mkdir -p $backup_path; 
fi
#查看MySQL是否在運行
mysql_ps=`ps -ef |grep mysql |wc -l` 
echo "查看MySQL是否在運行:$mysql_ps" >> $backup_path/dump.log
mysql_listen=`netstat -an |grep LISTEN |grep $mysql_port|wc -l`
if [ [$mysql_ps == 0] -o [$mysql_listen == 0] ]; then
        echo "ERROR:MySQL is not running! backup stop!" >> $backup_path/dump.log
        exit
else
        echo "Welcome to use MySQL backup tools!" >> $backup_path/dump.log

echo "MySQL connect ok! Please wait......" >> $backup_path/dump.log
fi
#開始備份
echo "開始備份..." >> $backup_path/dump.log
docker exec h3_mysql /usr/bin/mysqldump -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password $database_name --default-character-set=$mysql_charset > $backup_path/$database_name-$date_time.sql


#開始壓縮
cd $backup_path
tar -zcvf $database_name-$date_time.tar.gz $database_name-$date_time.sql
#更新備份日志
echo "壓縮原文件 create $backup_path/$database_name-$date_time.tar.gz" >> $backup_path/dump.log

#刪除源文件
rm -rf $backup_path/$database_name-$date_time.sql

echo "壓縮后刪除原文件 delete $backup_path/$database_name-$date_time.sql" >> $backup_path/dump.log

#找出需要刪除的備份
delfile=`ls -l -crt  $backup_path/*.tar.gz | awk '{print $9 }' | head -1`

#判斷現在的備份數量是否大于閾值
number=`ls -l -crt  $backup_path/*.tar.gz | awk '{print $9 }' | wc -l`

if [ $number -gt $count ]
then
  #刪除最早生成的備份,只保留count數量的備份
  rm $delfile
  #更新刪除文件日志
  echo "$date 刪除 $count 前的文件 delete $delfile" >> $backup_path/dump.log
fi

方式四:不是 docker 安裝備份

#用戶名
mysql_user="root"
#密碼
mysql_password="root"
mysql_host="101.133.170.222"
#端口號 
mysql_port="3306"
#將要備份的數據庫
database_name="ruoyi"
#編碼格式
mysql_charset="utf8"

#保存?zhèn)浞菸募疃鄠€數
count=3
#備份保存路徑
backup_path=/data/mysql/bakup
#日期
date_time=`date +%Y-%m-%d-%H-%M`

#如果文件夾不存在則創(chuàng)建
if [ ! -d $backup_path ]; 
then     
    mkdir -p $backup_path; 
fi
#查看MySQL是否在運行
mysql_ps=`ps -ef |grep mysql |wc -l` 
echo "$date_time 查看MySQL是否在運行:$mysql_ps" >> $backup_path/dump.log
mysql_listen=`netstat -an |grep LISTEN |grep $mysql_port|wc -l`
if [ [$mysql_ps == 0] -o [$mysql_listen == 0] ]; then
        echo "$date_time ERROR:MySQL is not running! backup stop!" >> $backup_path/dump.log
        exit
else
        echo "$date_time Welcome to use MySQL backup tools!" >> $backup_path/dump.log

echo "$date_time MySQL connect ok! Please wait......" >> $backup_path/dump.log
fi
#開始備份
echo "$date_time 開始備份...$backup_path" >> $backup_path/dump.log
docker exec h3_mysql /usr/bin/mysqldump -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password $database_name --default-character-set=$mysql_charset > $backup_path/$database_name-$date_time.sql
echo "$date_time 備份完成...$backup_path" >> $backup_path/dump.log

#開始壓縮
cd $backup_path
tar -zcvf $database_name-$date_time.tar.gz $database_name-$date_time.sql
#更新備份日志
echo  "$date_time 壓縮原文件 create $backup_path/$database_name-$date_time.tar.gz" >> $backup_path/dump.log

#刪除源文件
rm -rf $backup_path/$database_name-$date_time.sql

echo "$date_time 壓縮后刪除原文件 delete $backup_path/$database_name-$date_time.sql" >> $backup_path/dump.log

#找出需要刪除的備份
delfile=`ls -l -crt  $backup_path/*.tar.gz | awk '{print $9 }' | head -1`

#判斷現在的備份數量是否大于閾值
number=`ls -l -crt  $backup_path/*.tar.gz | awk '{print $9 }' | wc -l`

if [ $number -gt $count ]
then
  #刪除最早生成的備份,只保留count數量的備份
  rm $delfile
  #更新刪除文件日志
  echo "$date_time 刪除 $count 前的文件 delete $delfile" >> $backup_path/dump.log
  echo "$date_time 備份成功" >> $backup_path/dump.log
fi

4、配置定時任務

時間格式:

# 常用時間格式
每五分鐘執(zhí)行 */5 * * * *
每小時執(zhí)行 0 * * * *
每天執(zhí)行 0 0 * * *
每周執(zhí)行 0 0 * * 0
每月執(zhí)行 0 0 1 * *
每年執(zhí)行 0 0 1 1 *
# crontab 文件的格式
{minute} {hour} {day-of-month} {month} {day-of-week} {full-path-to-shell-script} 
 minute: 區(qū)間為 0 – 59 
 hour: 區(qū)間為0 – 23 
 day-of-month: 區(qū)間為0 – 31 
 month: 區(qū)間為1 – 12. 1 是1月. 12是12月. 
 Day-of-week: 區(qū)間為0 – 7. 周日可以是0或7.

常用時間:

# 執(zhí)行 crontab -e 命令,寫入以下命令保存,每 5 分鐘執(zhí)行一次
*/5 * * * *  sh /data/mysql/dump_mysql.sh
# 每天凌晨 5 點執(zhí)行
0 5 * * * sh /data/mysql/dump_mysql.sh

保存如果 出現一下問題

在這里插入圖片描述

進入/var/spool下查看cron目錄是正常的,但是在cron里面沒有權限建立文件這個根源。

(1)可以嘗試先在/var/spool/cron目錄下用vim編輯一個測試文件,看是否可以保存在這個cron目錄下,如果無法保存提示權限問題。那么可能目錄有什么特殊的地方,root用戶也被約束了

# 查看是否有特殊的屬性
[root@izuf61151k3ad2dso6mo9oz cron]# lsattr /var/spool/cron/root
# 去掉特殊的屬性
[root@izuf61151k3ad2dso6mo9oz cron]# chattr -ai /var/spool/cron/root
# 再次編輯定時任務
[root@izuf61151k3ad2dso6mo9oz cron]# crontab -e

執(zhí)行 lsattr /var/spool/cron/root 我們可以看到和常規(guī)的權限設置不一樣,所以清楚這些特殊的屬性

在這里插入圖片描述

清除屬性我們可以看到正常的權限的問題

在這里插入圖片描述

再次執(zhí)行 crontab -e ,編輯模式,添加 */5 * * * * sh /data/mysql/dump_mysql.sh ,保存即可

在這里插入圖片描述

補充說明

crontab 時間格式說明

0 5 * * * /root/bin/backup.sh

到此這篇關于MySQL數據庫定時備份的幾種實現方法的文章就介紹到這了,更多相關MySQL 定時備份內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • MySQL筆記之字符串函數的應用

    MySQL筆記之字符串函數的應用

    字符串操作在程序設計中是非常重要的組成部分,而MySQL數據庫中的字符串操作卻相當簡單
    2013-05-05
  • Mysql 數據庫常用備份方法和注意事項

    Mysql 數據庫常用備份方法和注意事項

    Mysql 數據庫常用備份方法和注意事項 ,需要的朋友可以參考下。
    2010-04-04
  • MySQL 配置參數全解之參數含義、作用域與運維建議(完整配置文件)

    MySQL 配置參數全解之參數含義、作用域與運維建議(完整配置文件)

    MySQL配置文件參數解析表涵蓋了多個配置段,如[client]、[mysql]、[mysqld]和[mysqld_safe],詳細解釋了每個參數的含義、當前值、默認值以及一些關鍵參數的作用和優(yōu)化建議,感興趣的朋友跟隨小編一起看看吧
    2026-01-01
  • MYSQL(電話號碼,身份證)數據脫敏的實現

    MYSQL(電話號碼,身份證)數據脫敏的實現

    在日常開發(fā)需求中會經常遇到數據脫敏處理,比如身份證號、手機號,需要使用*進行部分替換顯示。這樣能使敏感隱私信息在一定程度上得到保護。本文就來介紹一下
    2021-05-05
  • MySQL數據庫分布式XA事務及SQL語法詳解

    MySQL數據庫分布式XA事務及SQL語法詳解

    XA事務也有其局限性,比如性能開銷較大,因為它涉及到更多的協(xié)調步驟,并且可能會導致阻塞問題,這篇文章給大家介紹MySQL數據庫分布式XA事務及SQL語法詳解,感興趣的朋友跟隨小編一起看看吧
    2025-05-05
  • mysql數據庫安裝和卸載方式

    mysql數據庫安裝和卸載方式

    這篇文章主要介紹了mysql數據庫安裝和卸載方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Win安裝MySQL8全過程

    Win安裝MySQL8全過程

    這篇文章主要介紹了Win安裝MySQL8全過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • MySQL根據條件遷移數據的幾種方法實現

    MySQL根據條件遷移數據的幾種方法實現

    本文主要介紹了MySQL根據條件遷移數據的實現,包括使用INSERT INTO SELECT、UPDATE、DELETE語句以及結合子查詢進行遷移,具有一定的參考價值,感興趣的可以了解一下
    2024-02-02
  • MySql通過ip地址進行訪問的方法

    MySql通過ip地址進行訪問的方法

    這篇文章主要介紹了MySql通過ip地址進行訪問的方法,首先要登錄mysql,切換數據庫然后授權,具體代碼詳情大家參考下本文
    2018-06-06
  • MySQL decimal unsigned更新負數轉化為0

    MySQL decimal unsigned更新負數轉化為0

    這篇文章主要介紹了MySQL decimal unsigned更新負數轉化為0,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-12-12

最新評論

绥棱县| 泾源县| 灵川县| 安图县| 元朗区| 金阳县| 寻乌县| 翼城县| 辰溪县| 白朗县| 普兰店市| 华亭县| 化德县| 邵武市| 龙门县| 望谟县| 独山县| 察雅县| 马公市| 特克斯县| 宣汉县| 游戏| 塔河县| 盐城市| 濉溪县| 东至县| 杭锦后旗| 浙江省| 游戏| 连山| 沙坪坝区| 商丘市| 界首市| 汉沽区| 南部县| 资兴市| 盘锦市| 梁河县| 安岳县| 临安市| 旺苍县|