• 第十五章 监控系统zabbix升级


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

    一、同版本升级

    同版本升级,执行命令即可,以下是操作步骤。
    
    #1.备份软件相关文件和配置文件,命令如下: 
    [root@prd-apm001 ~]$ mkdir -p /data/zabbix/backup 
    [root@prd-apm001 ~]$ cp -r /etc/zabbix  /data/zabbix/backup/zabbix_conf 
    [root@prd-apm001 ~]$ cp -r /usr/share/zabbix /data/zabbix/backup/zabbix_web 
    [root@prd-apm001 ~]$ cp -r /usr/sbin/zabbix_server /data/zabbix/backup/zabbix_server 
    [root@prd-apm001 ~]$ cp -r /usr/sbin/zabbix
    [root@prd-apm001 ~]$ cp -r /usr/share/doc/zabbix-* /data/zabbix-backup/ 
    
    #2.备份数据库
    [root@prd-apm001 ~]$ sh /usr/sbin/zabbix_mysqldump.sh mysqldump    #备份数据 
    
    #3.升级软件,相关操作命令如下: 
    [root@prd-apm001 ~]$ rpm -Uvh https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.centos.noarch.rpm
    [root@prd-apm001 ~]$ systemctl stop zabbix-server    #停止 zabbix-server 
    [root@prd-apm001 ~]$ systemctl stop zabbix-proxy	#停止 zabbix-proxy
    [root@prd-apm001 ~]$ yum  upgrade  zabbix-server-mysql  zabbix-web-mysql  zabbix-agent zabbix-get -y 
    [root@prd-apm001 ~]$ systemctl start zabbix-server  #开启 zabbix-server 
    [root@prd-apm001 ~]$ systemctl start zabbix-proxy   #开启 zabbix-proxy 
    [root@prd-apm001 ~]$ ps -ef |grep zabbix             #查看进程
    [root@prd-apm001 ~]$ tail -f /var/log/zabbix/zabbix_server.log #查看日志  
    

    二、跨版本升级

    跨版本升级,其步骤与同版本升级的步骤一致。由于之前版本存有监控数据,因此在升级过程中执行 SQL 语句更改的速度会比较慢。一般跨版本升级不会涉及 history、trends 这些存储监控历史数据的表结构的改动,故升级过程时间不会特别长,具体视数据库状况和服务器性能而定。
    
    从启动 zabbix_server 进程的那一刻起,后台就执行了对表结构进行更改的操作,此过程不可逆。此时,切记不可以强行中断 zabbix_server 进程;否则,再次启动进程,可能会造成表结构更改失败的后果,从而导致升级失败。如果遇到这种情况,最简单的方法是将表结构删除(history、trends 表需保留),使用之前的备份进行恢复,等数据库恢复完成后,再重新启动zabbix_server 进程,数据库可再次进行自动升级。
    

    三、数据库自动升级的原理

    数据库升级的过程是由 zabbix_server 进程自动执行的,升级语句包含在代码中,有 ALTER、UPDATE 等 SQL 语句。
    代码位于:https://github.com/zabbix-book/zabbix-4.0.0alpha8/blob/master/src/libs/zbxdbupgrade/dbupgrade_3050.c#L761-L780
    
    static int	DBpatch_3050069(void)
    {
    	int	res;
    
    	res = DBexecute(
    		"update widget_field"
    		" set name='itemids'"
    		" where name='itemid'"
    			" and exists ("
    				"select null"
    				" from widget w"
    				" where widget_field.widgetid=w.widgetid"
    					" and w.type='plaintext'"
    			")");
    
    	if (ZBX_DB_OK > res)
    		return FAIL;
    
    	return SUCCEED;
    }
    
  • 相关阅读:
    Android 横屏启动activity,点击屏幕的单击、双击
    实现Android简单动画旋转案例
    当时遇到的主要难点在于TextView的内容不会刷新改变值,今天终于通过Timer和Handler实现了,分享给大家
    如何在Android当中显示网络图片
    Android的MediaRecorder架构介绍
    理解Android系统的进程间通信原理RPC机制
    Android开发WeatherForecast程序
    Android 如何导入已有的外部数据库
    百度地图API 源码
    Android TelephonyManager类
  • 原文地址:https://www.cnblogs.com/jhno1/p/15716139.html
Copyright © 2020-2023  润新知