zl程序教程

您现在的位置是:首页 >  系统

当前栏目

Linux Shell脚本之Atlassian confluence远程备份方法

Linux备份方法shell 远程 脚本 confluence
2023-09-14 09:01:02 时间

注:Atlassian confluence是一个较专业的wiki程序,由java语言写成,其详细介绍可以Google it(一点美中不足,java占用内存还是比较大的)。

该脚本的设计思路是根据Atlassian confluence官方提供的文档说明写的,主要是备份一些配置文件,上传的一些附件之类的其他文件以及数据库,其数据库支持多种数据库,这次我采用的是PostgreSQL数据库,你可以使用自己熟悉的数据库,如MySQL。

问题释疑:

1.为什么不使用rsync而是使用scp作为远程文件传输方法?

虽然rsync的设计算法(具体算法可以参考陈皓的博文《rsync 的核心算法》)决定了它更适合作为备份过程中的文件传输,例如支持增量备份和压缩传输,但Atlassian confluence备份并不要求具有实时性,而且在脚本中也做了历史备份的处理(自动删除10天前的备份),脚本中使用的备份方式相当于全备,而是不是增量备份,其次备份多在夜间执行,并且多为内网传输,及时Atlassian confluence放在阿里云上,也是有内网IP地址的,因此不用过度担心流量问题。

2.为什么要在备份机上执行该脚本?

其实这个脚本在备机还是Atlassian confluence机器上运行都是可以的,但是为了减少ssh执行远程命令的次数,将其放在备份机器上执行比较好一些。

3.find后的TODO是为啥?

在实际测试过程中发现,即使find没有进行任何删除操作,也会返回0,即成功。因此后面的校验和提示信息并不能完整的体现find的执行结果。如果日后有了更好的方法,再添加进去。

备份脚本如下:
# |  |  .---------- day of month (1 - 31) # |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ... # |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # |  |  |  |  | # *  *  *  *  * user-name command to be executed # m h  dom mon dow   command # execute on 11:59 per sunday # 59 11 * * */0 $0  /tmp/confluence_backup_$(date -d "yesterday" +"%Y%m%d%H%M%S").log # execute on 23:59 per day # 59 23 * * * $0  /tmp/confluence_backup_$(date -d "yesterday" +"%Y%m%d%H%M%S").log #     xxx.xxx.xxx.xxx                xxx.xxx.xxx.xxx #           |         ssh tunnel          | #     xxx.xxx.xxx.xxx   ==========   xxx.xxx.xxx.xxx #           |                             | # ----------+-----------------------------+------- #           |                             | #     +-----+-----+                +------+------+ #     |     A     |                |      B      | #     +-----------+                +-------------+  #     gitlab server                backups clinet # This shell script will execute on B Server # A and B passed ssh Authentication # A-- B: ssh lan_ip # A-- B: ssh wan_ip # B-- A: ssh lan_ip # B-- A: ssh wan_ip # A-- A: ssh lan_ip # A-- A: ssh wan_ip # B-- B: ssh lan_ip # B-- B: ssh wan_ip # run with root # [ $(id -u) -eq 0 ] || exit 1 # Run as root, of course. [ $UID -eq 0 ] || ( echo "Must be root to run this script."   exit 1 ) # save 10 days save_days=10 # which directory to backup to backup_path=/data/confluence_backup_directory # make backups uniqure and backup per day # backup_path_time_uniq=$(date -d "yesterday" +"%Y%m%d%H%M%S") backup_path_time_uniq=$(date -d "yesterday" +"%Y%m%d")
# if you have both wan ip and lan ip, you can fill it with all, if you have one ip, you can fill it just with lan ip confluence_server_ipaddress_public=xxx.xxx.xxx.xxx confluence_server_ipaddress_private=xxx.xxx.xxx.xxx # select lan ip first for transmission speed confluence_server_hostname=${confluence_server_ipaddress_private:-$confluence_server_ipaddress_public} confluence_server_ssh_username=root #confluence_server_ssh_port=$(awk /Port/ {print $2} /etc/ssh/sshd_config) confluence_server_ssh_port=$(netstat -anop | awk /sshd/   /LISTEN/ {print $4} | awk -F : {print $2}) confluence_server_ssh_hostname=$confluence_server_hostname # which files and directory backup #backup_files=(confluence.cfg.xml attachments config index) backup_files=(confluence.cfg.xml attachments index) backup_files_num=${#backup_files[@]}
[ -d $backup_path/$backup_path_time_uniq ] || mkdir -p $backup_path/$backup_path_time_uniq # do ssh copy for (( i = 0; i   $backup_files_num; i++ )); do
    scp -r -P$confluence_server_ssh_port $confluence_server_ssh_username@$confluence_server_ssh_hostname:$confluence_home_directory/${backup_files[i]} $backup_path/$backup_path_time_uniq  /dev/null 2 1
    [ $? -ne 0 ]   echo "$confluence_home_directory/${backup_files[i]} Backup failed! "   exit 1;echo "$confluence_home_directory/${backup_files[i]} Backup successfully! " # excution postgresql dump # PostgreSQL 9.3.9 Documentation::31.14. Environment Variables # PGHOST=127.0.0.1 # PGHOSTADDR=127.0.0.1 # PGPORT=5432 # PGDATABASE=confluence # PGUSER=confluence # PGPASSWORD=yoursecret # PostgreSQL 9.3.9 Documentation::31.15. The Password File #cat   ~/.pgpass  eof #127.0.0.1:5432:confluence:confluence:yoursecret # WARNING: password file "/root/.pgpass" has group or world access; permissions should be u=rw (0600) or less #chmod 600 /root/.pgpass #pg_dump -U confluence -d confluence -h 127.0.0.1 -o | head # Important: If your database schema relies on OIDs (for instance, as foreign keys) you must instruct pg_dump to dump the OIDs as well. To do this, use the -o command-line option. echo "PostgreSQL is executing backup operation, please hold on! "
ssh -P$confluence_server_ssh_port $confluence_server_ssh_username@$confluence_server_ssh_hostname "pg_dump -U confluence -d confluence -h 127.0.0.1 -o  /tmp/tmp_confluence_postgresql.sql"
[ $? -ne 0 ]   echo "PostgreSQL dump failed! "   exit 1;echo "PostgreSQL dump successfully! "
scp -P$confluence_server_ssh_port $confluence_server_ssh_username@$confluence_server_ssh_hostname:/tmp/tmp_confluence_postgresql.sql $backup_path/$backup_path_time_uniq/confluence_postgresql_$(date -d "yesterday" +"%Y%m%d").sql  /dev/null 2 1
[ $? -ne 0 ]   echo "PostgreSQL file transmission failed! "   exit 1;echo "PostgreSQL file transmission successfully! " # delete old backups find $backup_path -mtime +$save_days -exec rm -rf {} \; # TODO # returned code always is 0, from find or rm ??? # how to express real result? [ $? -ne 0 ]   echo "Local expired backups remove skipped! ";echo "Local expired backups remove successfully! "

Production Backup Strategy    https://confluence.atlassian.com/display/DOC/Production+Backup+Strategy   
Configuring Backups            https://confluence.atlassian.com/display/DOC/Configuring+Backups#ConfiguringBackups-EnablingBackupPathConfiguration    
Valid Backup File Date Patterns are based on the Java SimpleDateFormat class   http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

其他一些官方的建议和变量用词:

Perform_backups                     Enable   
BackupFilename(Sample)           backup-2015_08_17    
Backup File Prefix                     backup-    
Backup File Date Pattern           yyyy_MM_dd    
Backup Path                            /data/var/atlassian/application-data/confluence/backups    
Confluence Home directory        /data/var/atlassian/application-data/confluence/

tag:confluence备份脚本,confluence备份方法,如何备份confluence,远程备份confluence,远程备份脚本

--end--

本文出自 “通信,我的最爱” 博客,请务必保留此出处http://dgd2010.blog.51cto.com/1539422/1686013