原创作品,允许转载,转载时请务必以超链接形式标明文章
原始出处 、作者信息和本声明。否则将追究法律责任。
http://dgd2010.blog.51cto.com/1539422/1686013
问题释疑:
备份脚本如下:
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! "
|