#!/bin/sh ############################### # 此腳本用來全量備份 # 此文件名:mysqlfullbackup.sh # # Author: zhanrox # mail: hienha@163.com # create: 2013/06/29 # # 每一個星期日早上3點作一次全量備份(加 & 爲後臺執行) # 0 3 * * * root /backup/mysql/full_backup/mysqlfullbackup.sh & ############################### #設置用戶名和密碼 mysql_user="root" mysql_password="" #mysql安裝全路徑 mysql_dir=/usr/local/mysql/bin #備份數據庫(多數據庫,用逗號隔開) mysql_databases="quanfan" #設置備份路徑,建立備份文件夾 [ -d /backup/mysql ] || mkdir /backup/mysql backup_dir=/backup/mysql full_backup_dir=$backup_dir/full_backup #備份的時間 today=$(date +%Y%m%d_%H%M%S) #備份日誌文件 log_file=full_backup.log #只保留最近10個星期的備份(其餘刪除) time=$(date "-d 70 day ago" +%Y-%m-%d %H:%M:%S) #開始備份,記錄備份開始時間 並壓縮備份文件 echo -e '['$(date +"%Y-%m-%d %H:%M:%S")'] - '$mysql_databases' - '"備份開始\n" >> $backup_dir/$log_file #判斷目標目錄是否已經存在 if [! -d $full_backup_dir] then mkdir -p $full_backup_dir fi echo -e '['$(date +"%Y-%m-%d %H:%M:%S")'] - '$mysql_databases' - '"備份並壓縮備份文件\n" >> $backup_dir/$log_file #備份INNODB 使用下面代碼 並壓縮備份文件 #$mysql_dir/mysqldump -u$mysql_user -p$mysql_password --apply-slave-statements --hex-blob --routines --single-transaction --databases $mysql_databases | gzip > $full_backup_dir/$today.sql.gz ${mysql_dir}/bin/mysqldump -uroot -p${mysql_password} --add-drop-database --all-databases --all-tablespaces --routines --lock-all-tables | gzip > ${backup_dir}/${today}.sql.gz [ $? -eq 0 ] && echo -e '['$(date +"%Y-%m-%d %H:%M:%S")'] - 'All DB' - '"備份並壓縮備份文件 OK!!!\n" >> $backup_dir/$log_file #備份MyISAM 使用下面代碼 #$mysql_dir/mysqldump -u$mysql_user -p$mysql_password --apply-slave-statements --hex-blob --routines --lock-all-tables --databases $mysql_databases | gzip > $full_backup_dir/$today.sql.gz #找出70天前備份的文件,而後刪除 echo -e '['$(date +"%Y-%m-%d %H:%M:%S")'] - '$mysql_databases' - '"刪除10星期前的備份\n" >> $backup_dir/$log_file for file in `find -not -type d -mtime +70` do rm -rf $file done #基於ssh key認證,mysqldump的遠程mysql備份方案 #相關文章 http://liuxufei.com/weblog/weifenlei/868.html copytoremote=1 remoteuser= remoteip= if [ $copytoremote = 1 ]; then if [ -z $remoteuser ];then echo -e "remote user not set,Copy to remote Failed ...\n" >> $log_file exit 1 elif [ -z $remoteip ];then echo -e "remote ip not set,Copy to remote Failed ...\n" >> $log_file exit 2 else echo -e '['$(date +"%Y-%m-%d %H:%M:%S")'] - '$mysql_databases' - '"開始使用SSH備份數據文件到遠程服務器\n" >> $backup_dir/$log_file scp $today".sql.gz" remoteuser@remoteip:~/ fi fi #設置ftp上傳備份文件到別的服務器備份,只有 copytoftp=1 時才進行 ftp 備份 copytoftp=1 ftp_server= ftp_user= ftp_passwd= if [ $copytoftp = 1 ]; then if [ -z $ftp_server ];then echo -e "Ftp Server not set,Copy to Ftp Failed ...\n" >> $log_file exit 1 elif [ -z $ftp_user ];then echo -e "Ftp user not set, Copy to Ftp Failed ...\n" >> $log_file exit 2 elif [ -z $ftp_passwd ]; then echo -e "Ftp password not set, Copy to Ftp Failed ...\n" >> $log_file exit 3 else echo -e '['$(date +"%Y-%m-%d %H:%M:%S")'] - '$mysql_databases' - '"開始使用 FTP 備份數據文件到遠程服務器\n" >> $backup_dir/$log_file ftp -i -n <<end_ftp open $ftp_server user $ftp_user $ftp_passwd lcd $full_backup_dir hash prompt put $today.sql.gz close bye end_ftp fi fi echo -e '['$(date +"%Y-%m-%d %H:%M:%S")'] - '$mysql_databases' - '"備份完成\n" >> $backup_dir/$log_file Contact GitHub API Training Shop Blog About © 2016 GitHub, Inc. Terms Privacy Security Status Help