CentOS MySQL自動備份shell指令碼

2022-07-15 02:51:13 字數 3120 閱讀 2581

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

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

這裡,我們講解一種全量備份的方法,來實現定時備份資料到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...