Operations 16 min read

Step-by-Step Guide to Install and Upgrade Zabbix 4.0 → 4.2 on CentOS 7

This tutorial walks through adding the Zabbix repository, installing MySQL 5.7, configuring Nginx and PHP, setting up Zabbix server, agent, and web interface, and finally upgrading Zabbix from 4.0 to 4.2 on a CentOS 7 environment.

Ops Development Stories
Ops Development Stories
Ops Development Stories
Step-by-Step Guide to Install and Upgrade Zabbix 4.0 → 4.2 on CentOS 7

1. Add Zabbix Repository

1. Install repository package

rpm -ivh https://repo.zabbix.com/zabbix/4.2/rhel/7/x86_64/zabbix-release-4.2-1.el7.noarch.rpm

2. Enable optional RPMs

yum-config-manager --enable rhel-7-server-optional-rpms

3. Install Zabbix server with MySQL support

yum install zabbix-server-mysql

4. Install Zabbix web frontend with MySQL support

yum install zabbix-web-mysql

2. Install MySQL 5.7

1. Remove existing MariaDB packages

rpm -qa | grep mariadb
rpm -e --nodeps mariadb-libs-5.5.52-1.el7.x86_64

2. Download and extract MySQL source

wget https://dev.mysql.com/get/archives/mysql-5.7/mysql-5.7.21-linux-glibc2.12-x86_64.tar.gz
tar -xzvf mysql-5.7.21-linux-glibc2.12-x86_64.tar.gz
mv mysql-5.7.21-linux-glibc2.12-x86_64 /usr/local/mysql

3. Create MySQL user and group, set ownership

groupadd mysql
useradd -r -g mysql mysql
chown -R mysql.mysql mysql/

4. Create MySQL configuration file

cat >>/etc/my.cnf <<EOF
[client]
port = 3306
socket = /tmp/mysql.sock
[mysqld]
character_set_server=utf8
init_connect='SET NAMES utf8'
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
lower_case_table_names = 1
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
max_connections=5000
default-time_zone = '+8:00'
EOF

5. Initialize the database

touch /var/log/mysqld.log
chmod 777 /var/log/mysqld.log
chown mysql.mysql mysqld.log
/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

6. Retrieve the temporary root password

cat /var/log/mysqld.log | grep root@localhost

7. Start MySQL service and set permissions

mkdir /var/run/mysqld
touch /var/run/mysqld/mysqld.pid
chmod -R 777 /var/run/mysqld
chown -R mysql.mysql /var/run/mysqld
/usr/local/mysql/support-files/mysql.server start

8. Change the MySQL root password

vim /etc/my.cnf   # add skip-grant-tables, default_password_lifetime=360
/usr/local/mysql/bin/mysql -uroot -p   # login
use mysql;
update mysql.user set authentication_string = password('root'), host = '%' where user = 'root';
flush privileges;

9. Add MySQL to system PATH

echo 'PATH=/usr/local/mysql/bin:$PATH' >>/etc/profile
ln -s /usr/local/mysql/support-files/mysql.server /usr/local/mysql/bin/

10. Create Zabbix database and user

mysql> create database zabbix character set utf8 collate utf8_bin;
mysql> grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix';
mysql> flush privileges;

11. Configure Zabbix server

vim /etc/zabbix/zabbix_server.conf
DBName=zabbix
DBHost=192.168.179.132
DBUser=zabbix
DBPassword=zabbix

Create PID file

touch /var/run/zabbix/zabbix_server.pid
chmod 777 /var/run/zabbix/zabbix_server.pid

Start Zabbix server

systemctl enable zabbix-server
systemctl start zabbix-server

12. Import initial data

zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix

3. Install Nginx

1. Disable firewall and SELinux

systemctl stop firewalld
systemctl disable firewalld
sed -i 's/SELINUX=enforcing/SELINUX=disable/g' /etc/selinux/config

2. Install dependencies

yum -y install wget vim lsof lrzsz pcre-devel zlib-devel make gd-devel libjpeg-devel libpng-devel libxml2-devel bzip2-devel libcurl-devel libmcrypt libmcrypt-devel mcrypt mhash net-snmp-devel gcc bison bison-devel openssl-devel readline-devel libedit-devel sqlite-devel freetype freetype-devel libevent-devel mysql-devel

3. Configure Nginx repository

cat >>/etc/yum.repos.d/nginx.repo <<EOF
[nginx]
name=nginx.repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
skip_if_unavailable = 1
keepcache = 0
EOF

4. Install and start Nginx

yum install nginx -y
systemctl start nginx
systemctl enable nginx

4. Install PHP

1. Add PHP user

useradd -s /sbin/nologin php-fpm

2. Install PHP dependencies

yum install -y gcc gcc-c++ make zlib zlib-devel pcre pcre-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers

3. Compile and install PHP 7.2.6

wget http://mirrors.sohu.com/php/php-7.2.6.tar.gz
tar zxvf php-7.2.6.tar.gz
cd php-7.2.6
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --enable-fpm --with-fpm-user=php-fpm --with-fpm-group=php-fpm --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --with-libxml-dir --with-gd --with-jpeg-dir --with-png-dir --with-freetype-dir --with-iconv-dir --with-zlib-dir --with-mcrypt --enable-soap --enable-gd-native-ttf --enable-ftp --enable-mbstring --enable-exif --disable-ipv6 --with-pear --with-curl --enable-bcmath --enable-mbstring --enable-sockets --with-gd --with-libxml-dir=/usr/local --with-gettext
make && make install
cp php.ini-production /usr/local/php/etc/php.ini

4. Adjust PHP configuration

sed -i 's/post_max_size = 8M/post_max_size = 32M/g' /usr/local/php/etc/php.ini
sed -i 's/upload_max_filesize = 2M/upload_max_filesize = 50M/g' /usr/local/php/etc/php.ini
sed -i 's/;date.timezone =/date.timezone =PRC/' /usr/local/php/etc/php.ini
sed -i 's/max_execution_time = 30/max_execution_time = 600/g' /usr/local/php/etc/php.ini
sed -i 's/max_input_time = 60/max_input_time = 600/g' /usr/local/php/etc/php.ini
sed -i 's/memory_limit = 128M/memory_limit = 256M/g' /usr/local/php/etc/php.ini
sed -i 's/; max_input_vars = 1000/max_input_vars = 10000/g' /usr/local/php/etc/php.ini

5. Start php-fpm

cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf
/usr/local/php/sbin/php-fpm -c /usr/local/php/etc/php.ini -y /usr/local/php/etc/php-fpm.conf

5. Install Zabbix Agent

yum install zabbix-agent
vim /etc/zabbix/zabbix-agentd.conf

Server and ServerActive fields should contain the Zabbix server IP; the last line enables script‑based data collection.

6. Install Zabbix Web Interface

1. Copy Zabbix PHP files to web root

cp -r /usr/share/zabbix/.* /usr/share/nginx/html/

2. Configure Nginx for Zabbix

egrep -v '(^.*#|^$)' /etc/nginx/conf.d/default.conf
server {
    listen       80;
    server_name  192.168.179.133;
    access_log  /var/log/nginx/host.access.log  main;
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm index.php;
    }
    location /zabbix {
        root    /usr/share/nginx/html;
        index    index.html index.htm index.php;
    }
    error_page  404              /404.html;
    error_page   500 502 503 504  /50x.html;
    location = /50x.html { root   /usr/share/nginx/html; }
    location ~ \.php$ {
        root           html;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /usr/share/nginx/html$fastcgi_script_name;
        include        fastcgi_params;
    }
}

3. Set permissions and restart Nginx

chmod -R 777 /etc/zabbix/web.
chmod -R 777 /usr/share/nginx/html/zabbix
systemctl restart nginx

4. Access the web installer

Open a browser and navigate to http://192.168.179.133/zabbix to complete the Zabbix web setup.

7. Upgrade Zabbix from 4.0 to 4.2

1. Stop Zabbix server (and proxy if present)

systemctl stop zabbix-server

2. Backup existing Zabbix 4.0 data

mysqldump -uzabbix -p --single-transaction --master-data=2 --databases zabbix > olddata.sql

3. Update repository package

rpm -Uvh https://repo.zabbix.com/zabbix/4.2/rhel/7/x86_64/zabbix-release-4.2-1.el7.noarch.rpm

4. Upgrade Zabbix components

yum upgrade zabbix-server-mysql zabbix-web-mysql zabbix-agent

5. Start Zabbix server

systemctl start zabbix-server

6. Adjust web permissions

chmod 777 -R /etc/zabbix/web

7. Copy frontend files to web directory

cp -r /usr/share/zabbix/.* /usr/share/nginx/html/

Upgrade to Zabbix 4.2 is now complete.

Feel free to discuss further improvements.

Original Source

Signed-in readers can open the original source through BestHub's protected redirect.

Sign in to view source
Republication Notice

This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactadmin@besthub.devand we will review it promptly.

mysqlPHPupgradeInstallationCentOSZabbix
Ops Development Stories
Written by

Ops Development Stories

Maintained by a like‑minded team, covering both operations and development. Topics span Linux ops, DevOps toolchain, Kubernetes containerization, monitoring, log collection, network security, and Python or Go development. Team members: Qiao Ke, wanger, Dong Ge, Su Xin, Hua Zai, Zheng Ge, Teacher Xia.

0 followers
Reader feedback

How this landed with the community

Sign in to like

Rate this article

Was this worth your time?

Sign in to rate
Discussion

0 Comments

Thoughtful readers leave field notes, pushback, and hard-won operational detail here.