在資料庫的日常維護工作中,除了保證業務的正常執行以外,就是要對資料庫進行備份,以免造成資料庫的丟失,從而給企業帶來重大經濟損失。
通常備份可以按照備份時資料庫狀態分為熱備和冷備,按照備份資料庫檔案的大小分為增量備份、差異備份和全量備份。
這裡,我們講解一種全量備份的方法,來實現定時備份資料到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...