开发者社区> shy丶gril> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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

简介:
+关注继续查看
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://dgd2010.blog.51cto.com/1539422/1686013

注: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的执行结果。如果日后有了更好的方法,再添加进去。

备份脚本如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
#!/bin/bash
 
# touch confluence_backup.sh
# chmod +x confluence_backup.sh
# vim confluence_backup.sh
 
# crontabs -- configuration and scripts for running periodical jobs
# SHELL=/bin/bash
# PATH=/sbin:/bin:/usr/sbin:/usr/bin
# MAILTO=root
# HOME=/
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- 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
# or
# 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")
confluence_home_directory=/data/var/atlassian/application-data/confluence
# 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! "
done
# 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
#eof
# 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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
LINUX备份,使用再生龙Clonezilla成功,remastersys、systemback都失败
LINUX备份,使用再生龙Clonezilla成功,remastersys、systemback都失败
0 0
用remastersys备份LINUX,注意备份盘的空间占用
用remastersys备份LINUX,注意备份盘的空间占用
0 0
Linux的几种备份、恢复系统方式
Linux的几种备份、恢复系统方式
0 0
【Linux】iptables之防火墙的应用及案例、策略、备份与还原(2)
实验环境:为网关、Web 服务器配置防火墙规则 需求描述: 1、为网站服务器编写入站规则
0 0
07_Linux基础-计划任务-备份脚本-变量定义和使用
计划任务-备份脚本-变量定义和使用
0 0
06_Linux基础-NGINX和浏览器、网页的关系-云服务器ssh登陆-安装NGINX-上传网页-压缩命令-xz-gzip-bzip2-zip-tar-配置NGINX服务器支持下载功能-备份脚本
NGINX和浏览器、网页的关系-云服务器ssh登陆-安装NGINX-上传网页-压缩命令-xz-gzip-bzip2-zip-tar-配置NGINX服务器支持下载功能-备份脚本
0 0
13.9 Linux rsync命令:支持本地备份和远程备份
在 Linux 系统下,数据备份的工具很多,除了前面介绍了 tar、cpio、dd 命令之外,本节再介绍一个用来备份数据的命令,就是 rsync。
0 0
13.5 Linux tar命令备份数据
作为 Linux 系统管理员,最经常使用的备份工具就是 tar 和 cpio 命令。前面在介绍备份介质时,已经使用了 tar 命令,此命令其实是一个文件打包命令,经常在备份文件的场合中使用。
0 0
13.4 Linux备份策略
常用的备份策略有完全备份和增量备份,而增量备份有可细分为累计增量备份和差异增量备份。下面来分别讲述不同备份策略以及之间的区别。
0 0
13.2 Linux中的哪些数据需要备份?
经常使用 Windows 系统的小伙伴应该听说过 ghost 软件,它可以实现将整个系统完全复制到另一个硬盘上。当系统出现问题,通过
0 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
Decian GNU/Linux安全合规之路
立即下载
从 Linux 系统内核层面来解决实际问题的实战经验
立即下载
冬季实战营第二期:Linux操作系统实战入门
立即下载