最近在做系統更新要把 Zabbix 更新所以紀錄一下升級過程,過程其實不太順利發生了很多問題,所以就紀錄了一下更新方法如果遇到問題的可以依照我的方法解決升級問題,我目前跑系統都正常
建立備份
$ mkdir /opt/zabbix_backup/ $ cp /etc/zabbix/zabbix_server.conf /opt/zabbix_backup/ $ cp /etc/apache2/conf-enabled/zabbix.conf /opt/zabbix_backup/
備份資料庫
$ mysqldump -h localhost -u'root' -p --single-transaction 'zabbix' | gzip > /opt/zabbix_backup/db_files/zabbix_backup.sql.gz
還原資料庫
mysql -u'root' -p -e "drop database zabbix" mysql -u'root' -p -e "create database zabbix character set utf8 collate utf8_bin;" mysql -u'root' -p -e "grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbixDBpass';" mysql -u'root' -p zabbix -e "set global innodb_strict_mode='OFF';" zcat /opt/zabbix_backup/db_files/zabbix_backup.sql.gz | mysql -h localhost -u'root' -p'rootDBpass' 'zabbix' mysql -u'root' -p zabbix -e "set global innodb_strict_mode='ON';"
查詢更新進度
$ cat /var/log/zabbix/zabbix_server.log | grep database
更新資料庫發生錯誤
更新過程發現會卡在 68% 就不會跑了,測試幾次問題都是一樣的
31884:20210605:080454.284 completed 50% of database upgrade 31884:20210605:080454.314 completed 51% of database upgrade 31884:20210605:080454.317 completed 52% of database upgrade 31884:20210605:080454.328 completed 53% of database upgrade 31884:20210605:080454.331 completed 54% of database upgrade 31884:20210605:080454.334 completed 55% of database upgrade 31884:20210605:080454.370 completed 56% of database upgrade 31884:20210605:080454.441 completed 57% of database upgrade 31884:20210605:080454.502 completed 58% of database upgrade 31884:20210605:080454.530 completed 59% of database upgrade 31884:20210605:080454.542 completed 60% of database upgrade 31884:20210605:080454.621 completed 61% of database upgrade 31884:20210605:080454.632 completed 62% of database upgrade 31884:20210605:080454.699 completed 63% of database upgrade 31884:20210605:080454.811 completed 64% of database upgrade 31884:20210605:080454.831 completed 65% of database upgrade 31884:20210605:080454.842 completed 66% of database upgrade 31884:20210605:080454.944 completed 67% of database upgrade 31884:20210605:080455.014 completed 68% of database upgrade 31884:20210605:080455.017 database upgrade failed 31928:20210605:080505.223 current database version (mandatory/optional): 05030161/05030161 31928:20210605:080505.223 starting automatic database upgrade
查詢系統 Log
所以就去查了一下開啟系統時發生的問題
$ cat /var/log/zabbix/zabbix_server.log
29816:20210605:074358.214 Starting Zabbix Server. Zabbix 5.4.0 (revision 5059e20a75). 29816:20210605:074358.214 ****** Enabled features ****** 29816:20210605:074358.214 SNMP monitoring: YES 29816:20210605:074358.214 IPMI monitoring: YES 29816:20210605:074358.214 Web monitoring: YES 29816:20210605:074358.214 VMware monitoring: YES 29816:20210605:074358.214 SMTP authentication: YES 29816:20210605:074358.214 ODBC: YES 29816:20210605:074358.214 SSH support: YES 29816:20210605:074358.214 IPv6 support: YES 29816:20210605:074358.214 TLS support: YES 29816:20210605:074358.214 ****************************** 29816:20210605:074358.214 using configuration file: /etc/zabbix/zabbix_server.conf 29816:20210605:074358.221 Unsupported DB! MariaDB version is 50505 which is smaller than minimum of 100037 29816:20210605:074358.222 current database version (mandatory/optional): 05030069/05030069 29816:20210605:074358.222 required mandatory version: 05040000 29816:20210605:074358.222 starting automatic database upgrade 29816:20210605:074358.223 [Z3005] query failed: [1832] Cannot change column 'scriptid': used in a foreign key constraint 'c_opcommand_2' [alter table opcommand modify `scriptid` bigint unsigned not null] 29816:20210605:074358.223 database upgrade failed
解決方法
查了一下解決方法發現需要更新 MariaDB
更新 MariaDB
因為我的系統是 Ubuntu 18.04 LTS 沒辦法直接更新到 MariaDB Community Server 10.5,所以查了一下文件發現需要手動更新
https://mariadb.com/docs/deploy/upgrade-community-server-cs105-ubuntu18/
sudo apt install apt-transport-https wget https://downloads.mariadb.com/MariaDB/mariadb_repo_setup echo "417ea3052a78a11f022c596e29360cd0568161e0ffb17067589421883c34bc99 mariadb_repo_setup" | sha256sum -c - chmod +x mariadb_repo_setup sudo ./mariadb_repo_setup --mariadb-server-version="mariadb-10.5" sudo apt install mariadb-server
更新後系統會自動重跑資料庫更新
打開看 Log 還是有點問題,這邊因為 MariaDB 10.2.2 開始設定 immodb 為嚴格模式
32233:20210605:080657.963 Starting Zabbix Server. Zabbix 5.4.0 (revision 5059e20a75). 32233:20210605:080657.963 ****** Enabled features ****** 32233:20210605:080657.963 SNMP monitoring: YES 32233:20210605:080657.963 IPMI monitoring: YES 32233:20210605:080657.963 Web monitoring: YES 32233:20210605:080657.963 VMware monitoring: YES 32233:20210605:080657.963 SMTP authentication: YES 32233:20210605:080657.963 ODBC: YES 32233:20210605:080657.963 SSH support: YES 32233:20210605:080657.963 IPv6 support: YES 32233:20210605:080657.963 TLS support: YES 32233:20210605:080657.963 ****************************** 32233:20210605:080657.963 using configuration file: /etc/zabbix/zabbix_server.conf 32233:20210605:080657.972 Unsupported DB! MariaDB version is 50505 which is smaller than minimum of 100037 32233:20210605:080657.973 current database version (mandatory/optional): 05030161/05030161 32233:20210605:080657.973 required mandatory version: 05040000 32233:20210605:080657.973 starting automatic database upgrade 32233:20210605:080657.976 [Z3005] query failed: [1118] Row size too large. The maximum row size for the used table type, not counting BLOBs, is 8126. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs [alter table `config` add `url` varchar(255) default '' not null] 32233:20210605:080657.976 database upgrade failed
這邊變更一下模式把它關掉就可以解決這個問題設定檔在 “/etc/my.conf” 或 “/etc/my.cnf.d/server.cnf” 找到 [mysqld] 在下方加入
innodb_strict_mode=0
Database history tables upgraded 修正
修正後完成就可以打開網頁了,不過還是看到上面出現 “Database history tables upgraded” 的問題,這邊需要手動修改資料庫才可以升級成功,這升級的路上真是辛苦。
手動登入 zabbix 的資料庫查詢欄位
mysql -u'zabbix' -p'zabbixDBpass' zabbix -e "show create table history;" | history | CREATE TABLE history ( itemid bigint(20) unsigned NOT NULL, clock int(11) NOT NULL DEFAULT '0', value double(16,4) NOT NULL DEFAULT '0.0000', ns int(11) NOT NULL DEFAULT '0', KEY history_1 (itemid,clock) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin |
檢查是不是 0.0000
下載修正檔後更新到資料庫
wget https://git.zabbix.com/projects/ZBX/repos/zabbix/raw/database/mysql/double.sql mysql -u'zabbix' -p zabbix < double.sql
再次確認
$ mysql -u'zabbix' -p'zabbixDBpass' zabbix -e "show create table history;" history | CREATE TABLE history ( itemid bigint(20) unsigned NOT NULL, clock int(11) NOT NULL DEFAULT '0', value double NOT NULL DEFAULT '0', ns int(11) NOT NULL DEFAULT '0', KEY history_1 (itemid,clock) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin |
設定 /etc/zabbix/web/zabbix.conf.php 加入以下
$DB['DOUBLE_IEEE754'] = 'true';
完成!
參考資料
- https://www.zabbix.com/documentation/current/manual/installation/upgrade/packages/debian_ubuntu
- https://www.zabbix.com/documentation/current/manual/installation/upgrade_notes_540
- https://bestmonitoringtools.com/upgrade-zabbix-to-the-latest-version/
- https://qiita.com/bellx2/items/b651c5fb73cfa7626e53
《AWS CDK 完全學習手冊:打造雲端基礎架構程式碼 IaC》
第 12 屆 iT 邦幫忙鐵人賽 DevOps 組冠的《用 CDK 定 義 AWS 架構》
第 11 屆 iT 邦幫忙鐵人賽《LINE bot 好好玩 30 天玩轉 LINE API》
一個熱愛分享的雲端工程師!