zabbix数据备份与版本升级

zabbix数据库备份

[root@zabbix-server zabbix_agentd.d]# cat /usr/sbin/zabbix_mysqldump.sh 
#!/bin/bash
#author: itnihao
#mail: 2226823216@qq.com
#license: apache 2.0
#from :https://github.com/zabbix-book/zabbix-mysql-backup
#usage: chmod 700 ${PATH}/zabbix_mysqldump.sh
#crontab: 0 3 * * * ${PATH}/zabbix_mysqldump.sh mysqldump

red='\e[0;31m' # 红色  
RED='\e[1;31m' 
green='\e[0;32m' # 绿色  
GREEN='\e[1;32m' 
blue='\e[0;34m' # 蓝色  
BLUE='\e[1;34m' 
purple='\e[0;35m' # 紫色  
PURPLE='\e[1;35m' 
NC='\e[0m' # 没有颜色  

source /etc/bashrc
source /etc/profile

MySQL_USER=zabbix
MySQL_PASSWORD=zabbix
MySQL_HOST=localhost
MySQL_PORT=3306
MySQL_DUMP_PATH=/mysql_backup
MYSQL_BIN_PATH=/usr/bin/mysql
MYSQL_DUMP_BIN_PATH=/usr/bin/mysqldump
MySQL_DATABASE_NAME=zabbix
DATE=$(date '+%Y-%m-%d')

MySQLDUMP () {
    [ -d ${MySQL_DUMP_PATH} ] || mkdir ${MySQL_DUMP_PATH}
    cd ${MySQL_DUMP_PATH}
    [ -d logs    ] || mkdir logs
    [ -d ${DATE} ] || mkdir ${DATE}
    cd ${DATE}
    
    TABLE_NAME_ALL=$(${MYSQL_BIN_PATH} -u${MySQL_USER} -p${MySQL_PASSWORD}  -h${MySQL_HOST} ${MySQL_DATABASE_NAME} -e \
    "show tables"|egrep -v "(Tables_in_zabbix|history*|trends*|acknowledges|alerts|auditlog|events|service_alarms)")
    for TABLE_NAME in ${TABLE_NAME_ALL}
    do
        ${MYSQL_DUMP_BIN_PATH} --opt -u${MySQL_USER} -p${MySQL_PASSWORD} -P${MySQL_PORT} -h${MySQL_HOST} \
        ${MySQL_DATABASE_NAME} ${TABLE_NAME} >${TABLE_NAME}.sql
        sleep 0.01
    done

    [ "$?" == 0 ] && echo "${DATE}: Backup zabbix succeed"     >> ${MySQL_DUMP_PATH}/logs/ZabbixMysqlDump.log
    [ "$?" != 0 ] && echo "${DATE}: Backup zabbix not succeed" >> ${MySQL_DUMP_PATH}/logs/ZabbixMysqlDump.log
    
    cd ${MySQL_DUMP_PATH}/
    [ "$?" == 0 ] && rm -rf $(date +%Y-%m-%d --date='5 days ago')
    exit 0
}

MySQLImport () {
    cd ${MySQL_DUMP_PATH}
    DATE=$(ls  ${MySQL_DUMP_PATH} |egrep "\b^[0-9]+-[0-9]+-[0-9]+$\b")
    echo -e "${green}${DATE}"
    echo -e "${blue}what DATE do you want to import,please input date:${NC}"
    read SELECT_DATE
    if [ -d "${SELECT_DATE}" ];then
        echo -e "you select is ${green}${SELECT_DATE}${NC}, do you want to contine,if,input ${red}(yes|y|Y)${NC},\
        else then exit"
        read Input
        [[ 'yes|y|Y' =~ "${Input}" ]]
        status="$?"
        if [ "${status}" == "0"  ];then
            echo "now import SQL....... Please wait......."
        else
            exit 1
        fi
        cd ${SELECT_DATE}
        for PER_TABEL_SQL in $(ls *.sql)
        do
           ${MYSQL_BIN_PATH} -u${MySQL_USER} -p${MySQL_PASSWORD}  -h${MySQL_HOST} ${MySQL_DATABASE_NAME} < ${PER_TABEL_SQL}
           echo -e "import ${PER_TABEL_SQL} ${PURPLE}........................${NC}"
        done 
        echo "Finish import SQL,Please check Zabbix database"
    else 
        echo "Don't exist ${SELECT_DATE} DIR" 
    fi
}

case "$1" in
MySQLDUMP|mysqldump)
    MySQLDUMP
    ;;
MySQLImport|mysqlimport)
    MySQLImport
    ;;
*)
    echo "Usage: $0 {(MySQLDUMP|mysqldump) (MySQLImport|mysqlimport)}"
    ;;
esac
Backup zabbix mysql database

[root@zabbix-server zabbix_agentd.d]# chmod 700 /usr/sbin/zabbix_mysqldump.sh
[root@zabbix-server zabbix_agentd.d]# crontab -e 
0 3 * * *  /usr/sbin/zabbix_mysqldump.sh mysqldump

[root@zabbix-server zabbix_agentd.d]# bash /usr/sbin/zabbix_mysqldump.sh mysqldump
#备份数据
[root@zabbix-server zabbix_agentd.d]# bash /usr/sbin/zabbix_mysqldump.sh mysqlimport 
#恢复数据

zabbix升级

​ 升级zabbix分为两种情况,一是同版本升级、不涉及数据库的升级更新;而是跨版本升级,涉及数据库表结构的更改。

同版本升级的方法

(1)备份软件的相关文件和配置文件,命令如下:

shell# mkdir -p /data/zabbix/backup
shell# cp -r /etc/zabbix  /data/zabbix/backup/zabbix_conf
shell# cp -r /usr/share/zabbix /data/zabbix/backup/zabbix_web
shell# cp -r /usr/sbin/zabbix_server /data/zabbix/backup/zabbix_server
shell# cp -r /usr/sbin/zabbix_proxy /data/zabbix/backup/zabbix_proxy
shell# cp -r /usr/share/doc/zabbix-* /data/zabbix-backup/

(2)备份数据库(使用上述脚本进行备份)

(3)升级软件,相关操作命令如下:

shell# rpm -Uvh https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.centos.noarch.rpm
shell# systemctl stop zabbix-server        #停止zabbix-server[注释对吗?]
shell# systemctl stop zabbix-proxy         #停止zabbix-proxy[注释对吗?]
shell# yum upgrade zabbix-server-mysql zabbix-web-mysql zabbix-agent zabbix-get -y
shell# systemctl start zabbix-server       #开启zabbix-server
shell# systemctl start zabbix-proxy        #开启zabbix-proxy   
shell# ps -ef |grep zabbix                 #查看进程
shell# tail -f /var/log/zabbix/zabbix_server.log #查看日志

跨版本升级的方法

跨版本升级与同版本升级一致,由于之前版本有监控数据,因此在执行过程中SQL语句更改的速度会比较慢,具体视数据情况定。

注意:在升级过程中切记不可强行中断zabbix_server 进程,否则再次启动进程,可能会造成表结构更改失败的后果,从而导致升级失败。

posted @ 2020-05-12 19:17  老王教你学Linux  阅读(602)  评论(0编辑  收藏  举报