mysql数据库异地备份Shell脚本
生活随笔
收集整理的這篇文章主要介紹了
mysql数据库异地备份Shell脚本
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
公司使用的是Mysql數據庫,之前數據庫備份一直采用bacula網絡備份軟件。前一段時間出現了一些問題,所以一直想寫一個Shell腳本實現對Mysql的異地備份。今天抽出了點兒時間寫了一個Mysql數據庫的異地完整備份,趕緊拿出來分享一下,希望對從事運維工作的朋友有所幫助。
1.準備一臺FTP備份服務器
如果公司有存儲,直接可以將MYSQL數據庫備份到存儲上。但有些企業沒有存儲,所以只能通過FTP方式將MYSQL數據庫通過FTP備份到FTP備份服務器上。我此次寫的SHELL腳本主要針對企業沒有存儲的用戶,通過FTP服務器實現MYSQL數據庫備份,首先安裝和配置ftp服務器。
##安裝vsftpd軟件包 yum -y install vsftpd db4 db4-utils ##創建vsftpd 用戶 useradd -s /sbin/nologin -d /opt/data mysqlbak //創建備份用戶并指定用戶家目錄 passwd mysqlbak //設置密碼 ##配置管理vsftpd vim /etc/vsftpd/vsftpd.conf 開啟如下選項 local_enable=YES //允許本地用戶登入 write_enable=YES //允許本地用戶寫 local_umask=022 dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_std_format=YES chroot_local_user=YES //所有的本地用戶限制在自己的家目錄 listen=YES pam_service_name=vsftpd userlist_enable=YES userlist_deny=NO //只有/etc/vsftpd/user_list文件下用戶可以登入ftp服務器 guest_enable=YES //開啟虛擬用戶 guest_username=mysqlbak //虛擬用戶對應本地用戶 tcp_wrappers=YES virtual_use_local_privs=YES ##創建虛擬用戶文件 touch /etc/vsftpd/vuser.txt echo "webbak" > /etc/vsftpd/vuser.txt echo "webbak" >> /etc/vsftpd/vuser.txt ##添加允許登入ftp服務器用戶到/etc/vsftpd/user_list文件 echo "mysqlbak" >> /etc/vsftpd/user_list ##最后啟動vsftpd服務 service vsftpd start
2.創建MYSQL備份腳本
根據需求,Mysql數據庫備份數據在數據庫本地保存10天,在備份服務器保存20天。具體腳本如下:
#!/bin/bash ################################# # Athor:DAVID # # Date:15/5/2013 # # About:mysql_bakup # ################################# USER=mysql //備份數據庫實用的用戶名 PASSWD=mysql //備份數據庫實用的密碼 DATE=`date +%Y-%m-%d` //當前時間 OLDDATE=`date +%Y-%m-%d -d '-10 days'` //本地備份保留時間 FTPOLDDATE=`date +%Y-%m-%d -d '-20 days'` //備份服務器備份保留時間 MYSQLDUMP=/usr/local/mysql/bin/mysqldump //mysql備份執行命令文件路徑 SOCKET=/tmp/mysql.sock //進程文件存放目錄 BACKDIR=/opt/data/db //本地備份目錄 FTPHOST=132.96.77.123 //FTP主機 FTPUSER=webbak //用戶名 FTPPASS=webbak //密碼 [ -d ${BACKDIR} ] || mkdir -p ${BACKDIR} //判斷備份目錄是否存在,如果不存在則創建 [ -d ${BACKDIR}/${DATE} ] || mkdir ${BACKDIR}/${DATE} //判斷當前時間目錄是否存在,如果不存在則創建 [ ! -d ${BACKDIR}/${OLDDATE} ] || rm -rf ${BACKDIR}/${OLDDATE} //判斷10天前舊目錄是否存在,存在則刪除 for DBNAME in mysql cms manager //要進行備份的數據庫名稱 do ${MYSQLDUMP} -S ${SOCKET} -u ${USER} -p${PASSWD} --opt ${DBNAME} | gzip > ${BACKDIR}/${DATE}/${DBNAME}-backup-${DATE}.sql.gz //進行備份 echo "${DBNAME} has been backup successful." sleep 5 done cd ${BACKDIR}/${DATE} ftp -i -n -v <<EOF //將備份數據數據備份到FTP備份服務器 open ${FTPHOST} user ${FTPUSER} ${FTPPASS} bin cd ${FTPOLDDATE} mdelete * cd .. rmdir ${FTPOLDDATE} mkdir ${DATE} cd ${DATE} mput * bye EOF
?
3.執行代碼
?
./mysql_bak.sh?>?mysqlbak.log?????
?
執行完成之后,登入到備份服務器查看是否已經有備份的數據,如果已經產生備份壓縮文件,說明備份成功。
轉載于:https://blog.51cto.com/davidbj/1200783
總結
以上是生活随笔為你收集整理的mysql数据库异地备份Shell脚本的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我已出发
- 下一篇: 拼接字符SQL语句拼接 最后一个字符多出