注:atlassian confluence是一個較專業的wiki程式,由java語言寫成,其詳細介紹可以google it(一點美中不足,java占用記憶體還是比較大的)。
該腳本的設計思路是根據atlassian confluence官方提供的文檔說明寫的,主要是備份一些配置檔案,上傳的一些附件之類的其他檔案以及資料庫,其資料庫支援多種資料庫,這次我采用的是postgresql資料庫,你可以使用自己熟悉的資料庫,如mysql。
1.為什麼不使用rsync而是使用scp作為遠端檔案傳輸方法?
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
<code>#!/bin/bash</code>
<code># touch confluence_backup.sh</code>
<code># chmod +x confluence_backup.sh</code>
<code># vim confluence_backup.sh</code>
<code># crontabs -- configuration and scripts for running periodical jobs</code>
<code># shell=/bin/bash</code>
<code># path=/sbin:/bin:/usr/sbin:/usr/bin</code>
<code># mailto=root</code>
<code># home=/</code>
<code># for details see man 4 crontabs</code>
<code># example of job definition:</code>
<code># .---------------- minute (0 - 59)</code>
<code># | .------------- hour (0 - 23)</code>
<code># | | .---------- day of month (1 - 31)</code>
<code># | | | .------- month (1 - 12) or jan,feb,mar,apr ...</code>
<code># | | | | .---- day of week (0 - 6) (sunday=0 or 7) or sun,mon,tue,wed,thu,fri,sat</code>
<code># | | | | |</code>
<code># * * * * * user-name command to be executed</code>
<code># m h dom mon dow command</code>
<code># execute on 11:59 per sunday</code>
<code># 59 11 * * */0 $0 >/tmp/confluence_backup_$(date -d "yesterday" +"%y%m%d%h%m%s").log</code>
<code># or</code>
<code># execute on 23:59 per day</code>
<code># 59 23 * * * $0 >/tmp/confluence_backup_$(date -d "yesterday" +"%y%m%d%h%m%s").log</code>
<code># xxx.xxx.xxx.xxx xxx.xxx.xxx.xxx</code>
<code># | ssh tunnel |</code>
<code># xxx.xxx.xxx.xxx <==========> xxx.xxx.xxx.xxx</code>
<code># | |</code>
<code># ----------+-----------------------------+-------</code>
<code># +-----+-----+ +------+------+</code>
<code># | a | | b |</code>
<code># +-----------+ +-------------+ </code>
<code># gitlab server backups clinet</code>
<code>#</code>
<code># this shell script will execute on b server</code>
<code># a and b passed ssh authentication</code>
<code># a-->b: ssh lan_ip</code>
<code># a-->b: ssh wan_ip</code>
<code># b-->a: ssh lan_ip</code>
<code># b-->a: ssh wan_ip</code>
<code># a-->a: ssh lan_ip</code>
<code># a-->a: ssh wan_ip</code>
<code># b-->b: ssh lan_ip</code>
<code># b-->b: ssh wan_ip</code>
<code># run with root</code>
<code># [ $(id -u) -eq 0 ] || exit 1</code>
<code># run as root, of course.</code>
<code>[ $uid -</code><code>eq</code> <code>0 ] || ( </code><code>echo</code> <code>"must be root to run this script."</code> <code>&& </code><code>exit</code> <code>1 )</code>
<code># save 10 days</code>
<code>save_days=10</code>
<code># which directory to backup to</code>
<code>backup_path=</code><code>/data/confluence_backup_directory</code>
<code># make backups uniqure and backup per day</code>
<code># backup_path_time_uniq=$(date -d "yesterday" +"%y%m%d%h%m%s")</code>
<code>backup_path_time_uniq=$(</code><code>date</code> <code>-d </code><code>"yesterday"</code> <code>+</code><code>"%y%m%d"</code><code>)</code>
<code>confluence_home_directory=</code><code>/data/var/atlassian/application-data/confluence</code>
<code># 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</code>
<code>confluence_server_ipaddress_public=xxx.xxx.xxx.xxx</code>
<code>confluence_server_ipaddress_private=xxx.xxx.xxx.xxx</code>
<code># select lan ip first for transmission speed</code>
<code>confluence_server_hostname=${confluence_server_ipaddress_private:-$confluence_server_ipaddress_public}</code>
<code>confluence_server_ssh_username=root</code>
<code>#confluence_server_ssh_port=$(awk '/port/ {print $2}' /etc/ssh/sshd_config)</code>
<code>confluence_server_ssh_port=$(</code><code>netstat</code> <code>-anop | </code><code>awk</code> <code>'/sshd/ && /listen/ {print $4}'</code> <code>| </code><code>awk</code> <code>-f </code><code>':'</code> <code>'{print $2}'</code><code>)</code>
<code>confluence_server_ssh_hostname=$confluence_server_hostname</code>
<code># which files and directory backup</code>
<code>#backup_files=(confluence.cfg.xml attachments config index)</code>
<code>backup_files=(confluence.cfg.xml attachments index)</code>
<code>backup_files_num=${</code><code>#backup_files[@]}</code>
<code>[ -d $backup_path/$backup_path_time_uniq ] || </code><code>mkdir</code> <code>-p $backup_path/$backup_path_time_uniq</code>
<code># do ssh copy</code>
<code>for</code> <code>(( i = 0; i < $backup_files_num; i++ )); </code><code>do</code>
<code> </code><code>scp</code> <code>-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 ></code><code>/dev/null</code> <code>2>&1</code>
<code> </code><code>[ $? -</code><code>ne</code> <code>0 ] && </code><code>echo</code> <code>"$confluence_home_directory/${backup_files[i]} backup failed! "</code> <code>&& </code><code>exit</code> <code>1;</code><code>echo</code> <code>"$confluence_home_directory/${backup_files[i]} backup successfully! "</code>
<code>done</code>
<code># excution postgresql dump</code>
<code># postgresql 9.3.9 documentation::31.14. environment variables</code>
<code># pghost=127.0.0.1</code>
<code># pghostaddr=127.0.0.1</code>
<code># pgport=5432</code>
<code># pgdatabase=confluence</code>
<code># pguser=confluence</code>
<code># pgpassword=yoursecret</code>
<code># postgresql 9.3.9 documentation::31.15. the password file</code>
<code>#cat > ~/.pgpass <<eof</code>
<code>#127.0.0.1:5432:confluence:confluence:yoursecret</code>
<code>#eof</code>
<code># warning: password file "/root/.pgpass" has group or world access; permissions should be u=rw (0600) or less</code>
<code>#chmod 600 /root/.pgpass</code>
<code>#pg_dump -u confluence -d confluence -h 127.0.0.1 -o | head</code>
<code># 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.</code>
<code>echo</code> <code>"postgresql is executing backup operation, please hold on! "</code>
<code>ssh</code> <code>-p$confluence_server_ssh_port $confluence_server_ssh_username@$confluence_server_ssh_hostname </code><code>"pg_dump -u confluence -d confluence -h 127.0.0.1 -o >/tmp/tmp_confluence_postgresql.sql"</code>
<code>[ $? -</code><code>ne</code> <code>0 ] && </code><code>echo</code> <code>"postgresql dump failed! "</code> <code>&& </code><code>exit</code> <code>1;</code><code>echo</code> <code>"postgresql dump successfully! "</code>
<code>scp</code> <code>-p$confluence_server_ssh_port $confluence_server_ssh_username@$confluence_server_ssh_hostname:</code><code>/tmp/tmp_confluence_postgresql</code><code>.sql $backup_path/$backup_path_time_uniq</code><code>/confluence_postgresql_</code><code>$(</code><code>date</code> <code>-d </code><code>"yesterday"</code> <code>+</code><code>"%y%m%d"</code><code>).sql ></code><code>/dev/null</code> <code>2>&1</code>
<code>[ $? -</code><code>ne</code> <code>0 ] && </code><code>echo</code> <code>"postgresql file transmission failed! "</code> <code>&& </code><code>exit</code> <code>1;</code><code>echo</code> <code>"postgresql file transmission successfully! "</code>
<code># delete old backups</code>
<code>find</code> <code>$backup_path -mtime +$save_days -</code><code>exec</code> <code>rm</code> <code>-rf {} \;</code>
<code># todo</code>
<code># returned code always is 0, from find or rm ???</code>
<code># how to express real result?</code>
<code>[ $? -</code><code>ne</code> <code>0 ] && </code><code>echo</code> <code>"local expired backups remove skipped! "</code><code>;</code><code>echo</code> <code>"local expired backups remove successfully! "</code>
其他一些官方的建議和變量用詞:
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--