├── README ├── mysql-fullbackup.sh ├── zabbix-mysql-backupconf.sh └── zabbix-mysql-autopartitioning.sql /README: -------------------------------------------------------------------------------- 1 | ============================================================= 2 | This is the repository for all scripts from ZabbixZone Blog 3 | http://zabbixzone.com 4 | 5 | Fell free to send your contribution, bugs and suggestions 6 | Ricardo Santos (rsantos at gmail.com) 7 | ============================================================= 8 | -------------------------------------------------------------------------------- /mysql-fullbackup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # mysql-fullbackup.sh 4 | # v0.1 - 20120921 5 | # 6 | # Full Backup for Zabbix w/MySQL 7 | # 8 | # Author: Ricardo Santos (rsantos at gmail.com) 9 | # http://zabbixzone.com 10 | # 11 | MYSQLUSER="YOURUSER" 12 | MYSQLPASS="YOURPASSWORD" 13 | 14 | MYSQLCNF="/etc/my.cnf" 15 | MYSQLDIR="/var/lib/mysql" 16 | 17 | BASEDIR="/var/lib/xtrabackup" 18 | BKPDIR="${BASEDIR}/lastbackup" 19 | BKPTEMPDIR="${BASEDIR}/tempbackup" 20 | 21 | # Memory used in stage 2 22 | USEMEMORY="1GB" 23 | 24 | # create basedir 25 | mkdir -p ${BASEDIR} 26 | 27 | # remove temporary dir 28 | if [ -d "${BKPTEMPDIR}" ]; then 29 | rm -rf ${BKPTEMPDIR} 30 | fi 31 | 32 | # do backup - stage 1 33 | innobackupex --defaults-file=${MYSQLCNF} --user=${MYSQLUSER} --no-timestamp --password=${MYSQLPASS} ${BKPTEMPDIR} 34 | 35 | # do backup - stage 2 (prepare backup for restore) 36 | innobackupex --apply-log --use-memory=${USEMEMORY} ${BKPTEMPDIR} 37 | 38 | # backup my.cnf 39 | cp -pf ${MYSQLCNF} ${BKPTEMPDIR}/my.cnf 40 | 41 | # keep only the lastbackup 42 | if [ -d "${BKPDIR}" ]; then 43 | if [ -d "${BKPDIR}.old" ]; then 44 | rm -rf ${BKPDIR}.old 45 | fi 46 | rm -rf ${BKPDIR} 47 | fi 48 | chown -R mysql: ${BKPTEMPDIR} 49 | mv ${BKPTEMPDIR} ${BKPDIR} 50 | -------------------------------------------------------------------------------- /zabbix-mysql-backupconf.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # zabbix-mysql-backupconf.sh 4 | # v0.2 - 20111105 5 | # 6 | # Configuration Backup for Zabbix 1.8 w/MySQL 7 | # 8 | # Author: Ricardo Santos (rsantos at gmail.com) 9 | # http://zabbixzone.com 10 | # 11 | # Thanks for suggestions from: 12 | # - Oleksiy Zagorskyi (zalex) 13 | # - Petr Jendrejovsky 14 | # 15 | 16 | # mysql config 17 | DBHOST="localhost" 18 | DBNAME="zabbix" 19 | DBUSER="zabbix" 20 | DBPASS="YOURMYSQLPASSWORDHERE" 21 | 22 | # some tools 23 | MYSQLDUMP="`which mysqldump`" 24 | GZIP="`which gzip`" 25 | DATEBIN="`which date`" 26 | MKDIRBIN="`which mkdir`" 27 | 28 | # target path 29 | MAINDIR="/var/lib/zabbix/backupconf" 30 | DUMPDIR="${MAINDIR}/`${DATEBIN} +%Y%m%d%H%M`" 31 | ${MKDIRBIN} -p ${DUMPDIR} 32 | 33 | # configuration tables 34 | CONFTABLES=( actions applications autoreg_host conditions config dchecks dhosts \ 35 | drules dservices escalations expressions functions globalmacro graph_theme \ 36 | graphs graphs_items groups help_items hostmacro hosts hosts_groups \ 37 | hosts_profiles hosts_profiles_ext hosts_templates housekeeper httpstep \ 38 | httpstepitem httptest httptestitem ids images items items_applications \ 39 | maintenances maintenances_groups maintenances_hosts maintenances_windows \ 40 | mappings media media_type node_cksum nodes opconditions operations \ 41 | opmediatypes profiles proxy_autoreg_host proxy_dhistory proxy_history regexps \ 42 | rights screens screens_items scripts service_alarms services services_links \ 43 | services_times sessions slides slideshows sysmaps sysmaps_elements \ 44 | sysmaps_link_triggers sysmaps_links timeperiods trigger_depends triggers \ 45 | user_history users users_groups usrgrp valuemaps ) 46 | 47 | # tables with large data 48 | DATATABLES=( acknowledges alerts auditlog_details auditlog events \ 49 | history history_log history_str history_str_sync history_sync history_text \ 50 | history_uint history_uint_sync trends trends_uint ) 51 | 52 | # CONFTABLES 53 | for table in ${CONFTABLES[*]}; do 54 | DUMPFILE="${DUMPDIR}/${table}.sql" 55 | echo "Backuping table ${table}" 56 | ${MYSQLDUMP} -R --opt --extended-insert=FALSE \ 57 | -h ${DBHOST} -u ${DBUSER} -p${DBPASS} ${DBNAME} --tables ${table} >${DUMPFILE} 58 | ${GZIP} -f ${DUMPFILE} 59 | done 60 | 61 | # DATATABLES 62 | for table in ${DATATABLES[*]}; do 63 | DUMPFILE="${DUMPDIR}/${table}.sql" 64 | echo "Backuping schema table ${table}" 65 | ${MYSQLDUMP} -R --opt --no-data \ 66 | -h ${DBHOST} -u ${DBUSER} -p${DBPASS} ${DBNAME} --tables ${table} >${DUMPFILE} 67 | ${GZIP} -f ${DUMPFILE} 68 | done 69 | 70 | echo 71 | echo "Backup Completed - ${DUMPDIR}" 72 | -------------------------------------------------------------------------------- /zabbix-mysql-autopartitioning.sql: -------------------------------------------------------------------------------- 1 | /************************************************************** 2 | MySQL Auto Partitioning Procedure for Zabbix 1.8 3 | http://zabbixzone.com/zabbix/partitioning-tables/ 4 | 5 | Author: Ricardo Santos (rsantos at gmail.com) 6 | Version: 20110518 7 | **************************************************************/ 8 | DELIMITER // 9 | DROP PROCEDURE IF EXISTS `zabbix`.`create_zabbix_partitions` // 10 | CREATE PROCEDURE `zabbix`.`create_zabbix_partitions` () 11 | BEGIN 12 | CALL zabbix.create_next_partitions("zabbix","history"); 13 | CALL zabbix.create_next_partitions("zabbix","history_log"); 14 | CALL zabbix.create_next_partitions("zabbix","history_str"); 15 | CALL zabbix.create_next_partitions("zabbix","history_text"); 16 | CALL zabbix.create_next_partitions("zabbix","history_uint"); 17 | CALL zabbix.drop_old_partitions("zabbix","history"); 18 | CALL zabbix.drop_old_partitions("zabbix","history_log"); 19 | CALL zabbix.drop_old_partitions("zabbix","history_str"); 20 | CALL zabbix.drop_old_partitions("zabbix","history_text"); 21 | CALL zabbix.drop_old_partitions("zabbix","history_uint"); 22 | END // 23 | DROP PROCEDURE IF EXISTS `zabbix`.`create_next_partitions` // 24 | CREATE PROCEDURE `zabbix`.`create_next_partitions` (SCHEMANAME varchar(64), TABLENAME varchar(64)) 25 | BEGIN 26 | DECLARE NEXTCLOCK timestamp; 27 | DECLARE PARTITIONNAME varchar(16); 28 | DECLARE CLOCK int; 29 | SET @totaldays = 7; 30 | SET @i = 1; 31 | createloop: LOOP 32 | SET NEXTCLOCK = DATE_ADD(NOW(),INTERVAL @i DAY); 33 | SET PARTITIONNAME = DATE_FORMAT( NEXTCLOCK, 'p%Y%m%d' ); 34 | SET CLOCK = UNIX_TIMESTAMP(DATE_FORMAT(DATE_ADD( NEXTCLOCK ,INTERVAL 1 DAY),'%Y-%m-%d 00:00:00')); 35 | CALL zabbix.create_partition( SCHEMANAME, TABLENAME, PARTITIONNAME, CLOCK ); 36 | SET @i=@i+1; 37 | IF @i > @totaldays THEN 38 | LEAVE createloop; 39 | END IF; 40 | END LOOP; 41 | END // 42 | DROP PROCEDURE IF EXISTS `zabbix`.`drop_old_partitions` // 43 | CREATE PROCEDURE `zabbix`.`drop_old_partitions` (SCHEMANAME varchar(64), TABLENAME varchar(64)) 44 | BEGIN 45 | DECLARE OLDCLOCK timestamp; 46 | DECLARE PARTITIONNAME varchar(16); 47 | DECLARE CLOCK int; 48 | SET @mindays = 3; 49 | SET @maxdays = @mindays+4; 50 | SET @i = @maxdays; 51 | droploop: LOOP 52 | SET OLDCLOCK = DATE_SUB(NOW(),INTERVAL @i DAY); 53 | SET PARTITIONNAME = DATE_FORMAT( OLDCLOCK, 'p%Y%m%d' ); 54 | CALL zabbix.drop_partition( SCHEMANAME, TABLENAME, PARTITIONNAME ); 55 | SET @i=@i-1; 56 | IF @i <= @mindays THEN 57 | LEAVE droploop; 58 | END IF; 59 | END LOOP; 60 | END // 61 | DROP PROCEDURE IF EXISTS `zabbix`.`create_partition` // 62 | CREATE PROCEDURE `zabbix`.`create_partition` (SCHEMANAME varchar(64), TABLENAME varchar(64), PARTITIONNAME varchar(64), CLOCK int) 63 | BEGIN 64 | DECLARE RETROWS int; 65 | SELECT COUNT(1) INTO RETROWS 66 | FROM `information_schema`.`partitions` 67 | WHERE `table_schema` = SCHEMANAME AND `table_name` = TABLENAME AND `partition_name` = PARTITIONNAME; 68 | 69 | IF RETROWS = 0 THEN 70 | SELECT CONCAT( "create_partition(", SCHEMANAME, ",", TABLENAME, ",", PARTITIONNAME, ",", CLOCK, ")" ) AS msg; 71 | SET @sql = CONCAT( 'ALTER TABLE `', SCHEMANAME, '`.`', TABLENAME, '`', 72 | ' ADD PARTITION (PARTITION ', PARTITIONNAME, ' VALUES LESS THAN (', CLOCK, '));' ); 73 | PREPARE STMT FROM @sql; 74 | EXECUTE STMT; 75 | DEALLOCATE PREPARE STMT; 76 | END IF; 77 | END // 78 | DROP PROCEDURE IF EXISTS `zabbix`.`drop_partition` // 79 | CREATE PROCEDURE `zabbix`.`drop_partition` (SCHEMANAME varchar(64), TABLENAME varchar(64), PARTITIONNAME varchar(64)) 80 | BEGIN 81 | DECLARE RETROWS int; 82 | SELECT COUNT(1) INTO RETROWS 83 | FROM `information_schema`.`partitions` 84 | WHERE `table_schema` = SCHEMANAME AND `table_name` = TABLENAME AND `partition_name` = PARTITIONNAME; 85 | 86 | IF RETROWS = 1 THEN 87 | SELECT CONCAT( "drop_partition(", SCHEMANAME, ",", TABLENAME, ",", PARTITIONNAME, ")" ) AS msg; 88 | SET @sql = CONCAT( 'ALTER TABLE `', SCHEMANAME, '`.`', TABLENAME, '`', 89 | ' DROP PARTITION ', PARTITIONNAME, ';' ); 90 | PREPARE STMT FROM @sql; 91 | EXECUTE STMT; 92 | DEALLOCATE PREPARE STMT; 93 | END IF; 94 | END // 95 | DELIMITER ; 96 | --------------------------------------------------------------------------------