Linux
rsync / rsnapshot
我正在使用 rsnapshot,我的配置如下:
config_version 1.2 snapshot_root /home/user/.snapshots/ cmd_cp /bin/cp cmd_rm /bin/rm cmd_rsync /usr/bin/rsync cmd_ssh /usr/bin/ssh cmd_logger /usr/bin/logger cmd_du /usr/bin/du cmd_rsnapshot_diff /usr/bin/rsnapshot-diff interval hourly 24 interval daily 7 interval weekly 4 verbose 2 loglevel 3 logfile /home/user/rsnapshot.log lockfile /home/user/rsnapshot.pid backup root@website.com:/home/user/ website/ backup_script root@website.com:/home/user/backup_mysql.sh website/mysql/
我的 sql 備份文件:(故意遺漏的東西)
### Setup dump directory ### BAKRSNROOT=/.snapshots/tmp ##################################### ### ----[ No Editing below ]------### ##################################### ### Default time format ### TIME_FORMAT='%H_%M_%S%P' ### Make a backup ### backup_mysql_rsnapshot(){ local DBS="$($MYSQL -u $MUSER -h $MHOST -p$MPASS -Bse 'show databases')" local db=""; [ ! -d $BAKRSNROOT ] && ${MKDIR} -p $BAKRSNROOT ${RM} -f $BAKRSNROOT/* >/dev/null 2>&1 # [ $VERBOSE -eq 1 ] && echo "*** Dumping MySQL Database ***" # [ $VERBOSE -eq 1 ] && echo -n "Database> " for db in $DBS do local tTime=$(date +"${TIME_FORMAT}") local FILE="${BAKRSNROOT}/${db}.${tTime}.gz" # [ $VERBOSE -eq 1 ] && echo -n "$db.." ${MYSQLDUMP} --single-transaction -u ${MUSER} -h ${MHOST} -p${MPASS} $db | ${GZIP} -9 > $FILE done # [ $VERBOSE -eq 1 ] && echo "" # [ $VERBOSE -eq 1 ] && echo "*** Backup done [ files wrote to $BAKRSNROOT] ***" } ### Die on demand with message ### die(){ echo "$@" exit 999 } ### Make sure bins exists.. else die verify_bins(){ [ ! -x $GZIP ] && die "File $GZIP does not exists. Make sure correct path is set in $0." [ ! -x $MYSQL ] && die "File $MYSQL does not exists. Make sure correct path is set in $0." [ ! -x $MYSQLDUMP ] && die "File $MYSQLDUMP does not exists. Make sure correct path is set in $0." [ ! -x $RM ] && die "File $RM does not exists. Make sure correct path is set in $0." [ ! -x $MKDIR ] && die "File $MKDIR does not exists. Make sure correct path is set in $0." [ ! -x $MYSQLADMIN ] && die "File $MYSQLADMIN does not exists. Make sure correct path is set in $0." [ ! -x $GREP ] && die "File $GREP does not exists. Make sure correct path is set in $0." } ### Make sure we can connect to server ... else die verify_mysql_connection(){ $MYSQLADMIN -u $MUSER -h $MHOST -p$MPASS ping | $GREP 'alive'>/dev/null [ $? -eq 0 ] || die "Error: Cannot connect to MySQL Server. Make sure username and password are set correctly in $0" } ### main #### verify_bins verify_mysql_connection backup_mysql_rsnapshot
如何遠端執行該 .sh 文件以獲取數據庫並將其拉回?
編輯:錯誤:
rsnapshot hourly ---------------------------------------------------------------------------- rsnapshot encountered an error! The program was invoked with these options: /usr/local/bin/rsnapshot hourly ---------------------------------------------------------------------------- ERROR: /usr/local/etc/rsnapshot.conf on line 18: ERROR: backup_script \ root@website.com:/home/user/backup_mysql.sh" \ is not executable or can't be found. Please use an absolute \ path. ERROR: --------------------------------------------------------------------- ERROR: Errors were found in /usr/local/etc/rsnapshot.conf, ERROR: rsnapshot can not continue. If you think an entry looks right, make ERROR: sure you don't have spaces where only tabs should be.
該文件是 chmod 777 所以它沒有隱藏
我嘗試過這樣的事情,但我沒有得到任何複製/拉過來的東西。
backup_script /usr/bin/ssh root@example.com 'mysqldump -u root --all-databases | gzip --rsyncable > ~/all.sql.gz' unused2
試過:
backup_script /usr/bin/ssh user@website.com "/home/user/backup.script" whatever/
它工作但未能複製文件。
編輯:
backup_script /usr/bin/ssh root@remote.com "/home/user/backup_mysql.sh" blank/ backup_script /usr/bin/scp -r root@remote.com:/.rsnapshots/tmp/ /.rsnapshots/tmp/ user/mysql/
得到:
usage: scp [-1246BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file] [-l limit] [-o ssh_option] [-P port] [-S program] [[user@]host1:]file1 ... [[user@]host2:]file2 ---------------------------------------------------------------------------- rsnapshot encountered an error! The program was invoked with these options: /usr/local/bin/rsnapshot hourly ---------------------------------------------------------------------------- ERROR: backup_script /usr/bin/scp -r root@remote.com:/.rsnapshots/tmp/ returned 1 WARNING: Rolling back "user/mysql/"
首先,您應該將備份腳本移動到遠端系統。請記住,這裡的文件是在遠端系統上執行的,而不是在本地系統(執行 rsnapshot 的系統)上執行的。然後,一旦程序在遠端系統上執行,您應該將文件移回本地系統。
像這樣的東西應該工作:
backup_script /usr/bin/ssh user@website.com "/home/user/backup.script" whatever/ backup_script /usr/bin/scp -r user@website.com:/home/user/your_data/ /.your_snapshot_root/rsnapshots/tmp/ target_dir_to_store_backups/