SHOW:
|
|
- or go back to the newest paste.
1 | #!/bin/bash | |
2 | # NAME | |
3 | - | # zabbix-mysql-backupconf.sh |
3 | + | # zabbix-mysql-backupconf.sh - Configuration Backup for Zabbix 2.0 w/MySQL |
4 | - | # v0.4 - 20120302 Incorporated mysqldump options suggested by Jonathan Bayer |
4 | + | # |
5 | - | # v0.3 - 20120206 Backup of Zabbix 1.9.x / 2.0.0, removed unnecessary use of |
5 | + | # SYNOPSIS |
6 | - | # variables (DATEBIN etc) for commands that use to be in $PATH |
6 | + | # This is a MySQL configuration backup script for Zabbix v2.0 oder 2.2. |
7 | - | # v0.2 - 20111105 |
7 | + | # It does a full backup of all configuration tables, but only a schema |
8 | # backup of large data tables. | |
9 | - | # Configuration Backup for Zabbix 2.0 w/MySQL |
9 | + | |
10 | # The original script was written by Ricardo Santos and published at | |
11 | - | # Author: Ricardo Santos (rsantos at gmail.com) |
11 | + | # http://zabbixzone.com/zabbix/backuping-only-the-zabbix-configuration/ |
12 | - | # http://zabbixzone.com/zabbix/backuping-only-the-zabbix-configuration/ |
12 | + | # and |
13 | # https://github.com/xsbr/zabbixzone/blob/master/zabbix-mysql-backupconf.sh | |
14 | - | # modified by Jens Berthold, 2012 |
14 | + | |
15 | # Credits for some suggestions concerning the original script to: | |
16 | - | # Thanks for suggestions from: |
16 | + | # - Ricardo Santos |
17 | - | # - Oleksiy Zagorskyi (zalex) |
17 | + | # - Oleksiy Zagorskyi (zalex) |
18 | - | # - Petr Jendrejovsky |
18 | + | # - Petr Jendrejovsky |
19 | - | # - Jonathan Bayer |
19 | + | # - Jonathan Bayer |
20 | # | |
21 | # HISTORY | |
22 | # v0.5 - 2013-05-13 Added table list comparison between database and script | |
23 | - | # mysql config |
23 | + | # v0.4 - 2012-03-02 Incorporated mysqldump options suggested by Jonathan Bayer |
24 | # v0.3 - 2012-02-06 Backup of Zabbix 1.9.x / 2.0.0, removed unnecessary use of | |
25 | # variables (DATEBIN etc) for commands that use to be in $PATH | |
26 | - | DBNAME="zabbixdb" |
26 | + | # v0.2 - 2011-11-05 |
27 | # | |
28 | # AUTHOR | |
29 | # Jens Berthold (maxhq), 2013 | |
30 | ||
31 | - | # target path |
31 | + | |
32 | # | |
33 | # CONFIGURATION | |
34 | # | |
35 | ||
36 | # mysql database | |
37 | DBHOST="1.2.3.4" | |
38 | DBNAME="zabbix" | |
39 | DBUSER="zabbix" | |
40 | DBPASS="password" | |
41 | ||
42 | # backup target path | |
43 | #MAINDIR="/var/lib/zabbix/backupconf" | |
44 | # following will store the backup in a subdirectory of the current directory | |
45 | MAINDIR="`dirname \"$0\"`" | |
46 | ||
47 | # | |
48 | - | CONFTABLES=( actions applications autoreg_host conditions config dchecks \ |
48 | + | # CONSTANTS |
49 | - | dhosts drules dservices escalations expressions functions globalmacro \ |
49 | + | |
50 | ||
51 | # configuration tables | |
52 | CONFTABLES=( actions applications autoreg_host conditions config dbversion \ | |
53 | dchecks dhosts drules dservices escalations expressions functions globalmacro \ | |
54 | globalvars graph_discovery graph_theme graphs graphs_items groups help_items \ | |
55 | host_inventory hostmacro hosts hosts_groups hosts_templates housekeeper \ | |
56 | httpstep httpstepitem httptest httptestitem icon_map icon_mapping ids images \ | |
57 | interface item_discovery items items_applications maintenances \ | |
58 | maintenances_groups maintenances_hosts maintenances_windows mappings media \ | |
59 | media_type node_cksum nodes opcommand opcommand_grp opcommand_hst opconditions \ | |
60 | operations opgroup opmessage opmessage_grp opmessage_usr optemplate profiles \ | |
61 | proxy_autoreg_host proxy_dhistory proxy_history regexps rights screens \ | |
62 | screens_items scripts service_alarms services services_links services_times \ | |
63 | sessions slides slideshows sysmap_element_url sysmap_url sysmaps \ | |
64 | sysmaps_elements sysmaps_link_triggers sysmaps_links timeperiods \ | |
65 | trigger_depends trigger_discovery triggers user_history users users_groups \ | |
66 | usrgrp valuemaps ) | |
67 | ||
68 | # tables with large data | |
69 | - | DUMPFILE="${DUMPDIR}/zbx-conf-bkup-`date +%Y%m%d-%H%M`.sql" |
69 | + | |
70 | history history_log history_str history_str_sync history_sync history_text \ | |
71 | history_uint history_uint_sync trends trends_uint ) | |
72 | - | # CONFTABLES |
72 | + | |
73 | DUMPDIR="${MAINDIR}/`date +%Y%m%d-%H%M`" | |
74 | - | echo "Backuping configuration table ${table}" |
74 | + | DUMPFILE="${DUMPDIR}/zabbix-conf-backup-`date +%Y%m%d-%H%M`.sql" |
75 | ||
76 | # | |
77 | # CHECKS | |
78 | # | |
79 | - | # DATATABLES |
79 | + | |
80 | echo "mysqldump not found." | |
81 | - | echo "Backuping data table ${table}" |
81 | + | |
82 | - | mysqldump --routines --opt --single-transaction --skip-lock-tables --no-data \ |
82 | + | |
83 | fi | |
84 | ||
85 | # | |
86 | # compare table list between script and database | |
87 | # | |
88 | FILE_TABLES_LIVE=`mktemp` | |
89 | FILE_TABLES=`mktemp` | |
90 | ||
91 | # Get all current Zabbix tables from databse | |
92 | mysql -h ${DBHOST} -u ${DBUSER} -p${DBPASS} ${DBNAME} --batch --silent \ | |
93 | -e "SELECT table_name FROM information_schema.tables WHERE table_schema = '$DBNAME'" \ | |
94 | | sort >> $FILE_TABLES_LIVE | |
95 | ||
96 | # Merge CONFTABLES and DATATABLES into one array | |
97 | allTables=( "${CONFTABLES[@]}" "${DATATABLES[@]}" ) | |
98 | printf '%s\n' "${allTables[@]}" | sort >> $FILE_TABLES | |
99 | ||
100 | difference=`diff --suppress-common-lines $FILE_TABLES $FILE_TABLES_LIVE | grep -v "^\w"` | |
101 | ||
102 | if [ ! -z "$difference" ]; then | |
103 | echo -e "The Zabbix database differs from the configuration in this script." | |
104 | if [ `echo "$difference" | grep -c "^>"` -gt 0 ]; then | |
105 | echo -e "\nThese additional tables where found in '$DBNAME' on $DBHOST:" | |
106 | echo "$difference" | grep "^>" | sed 's/^>/ -/gm' | |
107 | fi | |
108 | if [ `echo "$difference" | grep -c "^<"` -gt 0 ]; then | |
109 | echo -e "\nThese configured tables are missing in '$DBNAME' on $DBHOST:" | |
110 | echo "$difference" | grep "^<" | sed 's/^</ -/gm' | |
111 | fi | |
112 | rm $FILE_TABLES_LIVE; rm $FILE_TABLES | |
113 | exit | |
114 | fi | |
115 | rm $FILE_TABLES_LIVE; rm $FILE_TABLES | |
116 | ||
117 | # | |
118 | # BACKUP | |
119 | # | |
120 | mkdir -p "${DUMPDIR}" | |
121 | ||
122 | >"${DUMPFILE}" | |
123 | ||
124 | # full backup of configuration tables | |
125 | echo "Full backup of configuration tables:" | |
126 | for table in ${CONFTABLES[*]}; do | |
127 | echo " - ${table}" | |
128 | mysqldump --routines --opt --single-transaction --skip-lock-tables --extended-insert=FALSE \ | |
129 | -h ${DBHOST} -u ${DBUSER} -p${DBPASS} ${DBNAME} --tables ${table} >>"${DUMPFILE}" | |
130 | done | |
131 | ||
132 | # scheme backup of large data tables | |
133 | echo "Scheme backup of data tables:" | |
134 | for table in ${DATATABLES[*]}; do | |
135 | echo " - ${table}" | |
136 | mysqldump --routines --opt --single-transaction --skip-lock-tables --no-data \ | |
137 | -h ${DBHOST} -u ${DBUSER} -p${DBPASS} ${DBNAME} --tables ${table} >>"${DUMPFILE}" | |
138 | done | |
139 | ||
140 | echo "Compressing backup file ${DUMPFILE}..." | |
141 | gzip -f "${DUMPFILE}" | |
142 | ||
143 | echo | |
144 | echo "Backup Completed - ${DUMPDIR}" | |
145 | echo "Hit ENTER" | |
146 | read |