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.
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.rpm2. Enable optional RPMs
yum-config-manager --enable rhel-7-server-optional-rpms3. Install Zabbix server with MySQL support
yum install zabbix-server-mysql4. Install Zabbix web frontend with MySQL support
yum install zabbix-web-mysql2. Install MySQL 5.7
1. Remove existing MariaDB packages
rpm -qa | grep mariadb
rpm -e --nodeps mariadb-libs-5.5.52-1.el7.x86_642. 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/mysql3. 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'
EOF5. 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/data6. Retrieve the temporary root password
cat /var/log/mysqld.log | grep root@localhost7. 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 start8. 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=zabbixCreate PID file
touch /var/run/zabbix/zabbix_server.pid
chmod 777 /var/run/zabbix/zabbix_server.pidStart Zabbix server
systemctl enable zabbix-server
systemctl start zabbix-server12. Import initial data
zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix3. Install Nginx
1. Disable firewall and SELinux
systemctl stop firewalld
systemctl disable firewalld
sed -i 's/SELINUX=enforcing/SELINUX=disable/g' /etc/selinux/config2. 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-devel3. 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
EOF4. Install and start Nginx
yum install nginx -y
systemctl start nginx
systemctl enable nginx4. Install PHP
1. Add PHP user
useradd -s /sbin/nologin php-fpm2. 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-servers3. 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.ini4. 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.ini5. 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.conf5. Install Zabbix Agent
yum install zabbix-agent
vim /etc/zabbix/zabbix-agentd.confServer 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 nginx4. 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-server2. Backup existing Zabbix 4.0 data
mysqldump -uzabbix -p --single-transaction --master-data=2 --databases zabbix > olddata.sql3. Update repository package
rpm -Uvh https://repo.zabbix.com/zabbix/4.2/rhel/7/x86_64/zabbix-release-4.2-1.el7.noarch.rpm4. Upgrade Zabbix components
yum upgrade zabbix-server-mysql zabbix-web-mysql zabbix-agent5. Start Zabbix server
systemctl start zabbix-server6. Adjust web permissions
chmod 777 -R /etc/zabbix/web7. 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.
Signed-in readers can open the original source through BestHub's protected redirect.
This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactand we will review it promptly.
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.
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.
