在資料庫的日常維護工作中,除了保證業務的正常執行以外,就是要對資料庫進行備份,以免造成資料庫的丟失,從而給企業帶來重大經濟損失。
通常備份可以按照備份時資料庫狀態分為熱備和冷備,按照備份資料庫檔案的大小分為增量備份、差異備份和全量備份。
這裡,我們講解一種全量備份的方法,來實現定時備份資料到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 <
use mysql;
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
CentOS MySQL自動備份
說明 生產環境中,需要對資料庫定時進行備份,通常對從庫配置備份。備份的方式有 mkdir home mysql bak p vim home mysql bak backup.sh 減配版 bin bash 使用者需要配置的部分 mybackupdir home mysql bak myuser t...
Centos Mysql定時自動備份
mysql專用目錄 mkdir mysql mysql備份目錄 mkdir mysql backup mysql備份指令碼 mkdir mysql backup scripts mysql備份檔案 mkdir mysql backup files mysql備份日誌 mkdir mysql back...
centos mysql資料庫自動備份
方案一 vi usr sbin bakmysql 內容如下 1 db user root 2 db passwd root 3 db name db test 4 the directory for story your backup file.you shall change this dir 5...