MySQL備份指令碼

2021-09-30 20:33:20 字數 3093 閱讀 7177

在資料庫的日常維護工作中,除了保證業務的正常執行以外,就是要對資料庫進行備份,以免造成資料庫的丟失,從而給企業帶來重大經濟損失。

通常備份可以按照備份時資料庫狀態分為熱備和冷備,按照備份資料庫檔案的大小分為增量備份、差異備份和全量備份。

這裡,我們講解一種全量備份的方法,來實現定時備份資料到mysql指令碼檔案,並且支援過期刪除。

vi /opt/mysqlbackup.sh

#!/bin/bash

# 以下配置資訊請自己修改

mysql_user="user" #mysql備份使用者

mysql_password="password" #mysql備份使用者的密碼

mysql_host="localhost"

mysql_port="3306"

mysql_charset="utf8" #mysql編碼

backup_db_arr=("db1" "db2") #要備份的資料庫名稱,多個用空格分開隔開 如("db1" "db2" "db3")

backup_location=/opt/mysql #備份資料存放位置,末尾請不要帶"/",此項可以保持預設,程式會自動建立資料夾

expire_backup_delete="on" #是否開啟過期備份刪除 on為開啟 off為關閉

expire_days=3 #過期時間天數 預設為三天,此項只有在expire_backup_delete開啟時有效

# 本行開始以下不需要修改

backup_time=`date +%y%m%d%h%m` #定義備份詳細時間

backup_ymd=`date +%y-%m-%d` #定義備份目錄中的年月日時間

backup_3ago=`date -d '3 days ago' +%y-%m-%d` #3天之前的日期

backup_dir=$backup_location/$backup_ymd #備份檔案夾全路徑

welcome_msg="welcome to use mysql backup tools!" #歡迎語

# 判斷mysql是否啟動,mysql沒有啟動則備份退出

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

fi# 連線到mysql資料庫,無法連線則備份退出

mysql -h$mysql_host -p$mysql_port -u$mysql_user -p$mysql_password select host,user from user where user='root' and host='localhost';

exit

endflag=`echo $?`

if [ $flag != "0" ]; then

echo "error:can't connect mysql server! backup stop!"

exit

else

echo "mysql connect ok! please wait......"

# 判斷有沒有定義備份的資料庫,如果定義則開始備份,否則退出備份

if [ "$backup_db_arr" != "" ];then

#dbnames=$(cut -d ',' -f1-5 $backup_database)

#echo "arr is ($)"

for dbname in $

doecho "database $dbname backup start..."

`mkdir -p $backup_dir`

`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!"

fidone

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!"

fiecho "all database backup success! thank you!"

exit

fichmod 600 /opt/mysqlbackup.sh

chmod +x /opt/mysqlbackup.sh

vi /etc/crontab

新增00 03 * * * /root/mysqlbackup.sh

分 時vi /var/spool/mail/root 可檢視指令碼執行日誌

mysql -u username -p databse < backup.sql

使用者名稱           資料庫名    備份sql

編寫mysql備份指令碼 mysql 備份指令碼的編寫

最近在為做一些邊邊角角的工作,現在有乙個需求要每天把mysql的資料庫dump出來到備份機器上面去.看似簡單的任務也潛在了很多的需求,整理如下 自動執行 crontab 指令碼的環境變數設定 由於通過crontab 啟動執行的指令碼環境變數沒有設定,需要在指令碼中設定環境變數 使用何種方式備份資料庫...

mysql備份 MySQL備份指令碼

第乙個指令碼 bin bash mysql備份指令碼bak dir data backup date y m d mysqldb 資料庫名mysqluser 使用者mysqlpwd 密碼mysqlcmd usr bin mysqldumpmysqlser 資料庫伺服器mysqlport 埠if d ...

mysql的備份指令碼 mysql的備份指令碼

1 描述 我相信很多朋友在工作都都會有這種需求,老闆或領導讓你每天都要備份mysql資料庫,你該如何實現呢,是每天到一定的時間在伺服器上敲一遍mysql的備份命令,還是想寫個指令碼,定時定點的自動備份呢?我相信大家都想讓它自動備份,接下來我通 shell指令碼 定時任務 的方式來實現自動備份mysq...