centos7.6下编译安装zabbix4.0.10长期支持版

一、安装数据库,这里使用的是percona-server5.7.24版本
配置如下

[root@zabbix4_clone:~]# cat /etc/my.cnf
# Example MySQL config file for medium systems.
# 8核 16G
# This is for a system with little memory (16G) where MySQL plays
[client]
#password       = your_password
port                                                        = 3306
socket                                                      = /tmp/mysql.sock

# The MySQL server
[mysqld]
user                                                        = mysql
port                                                        = 3306
bind-address                                                = 0.0.0.0
socket                                                      = /tmp/mysql.sock
datadir                                                     = /data/mysql_data
pid-file                                                    = /data/mysql_data/mysql.pid
basedir                                                     = /usr/local/mysql
tmpdir                                                      = /tmp

#此开关默认为NULL,即不允许导入导出。
#secure-file-priv                                           = /opt/upload

#-------------------------------gobal variables------------------------#
#默认关闭,涉及到timestamp类型的列自动更新的问题
explicit_defaults_for_timestamp                 = 1
###transaction_write_set_extraction              = XXHASH64  #以便在server收集写集合的同时将其记录到二进制日志。并且是行更改后的唯一标识此标识将用于检测冲突。
###loose-group_replication_group_name            = 'ce9be252-2b71-11e6-b8f4-00212889f856' #组的名字可以随便起,但不能用主机的GTID
###loose-group_replication_start_on_boot         = off  #为了避免每次启动自动引导具有相同名称的第二个组,所以设置为OFF。
###loose-group_replication_bootstrap_group       = off #同上
###loose-group_replication_local_address         = '192.168.1.88:33071' #写自己主机所在IP
###loose-group_replication_group_seeds           ='192.168.1.88:33071,192.168.1.89:33071,192.168.1.90:33071'
###loose-group_replication_single_primary_mode   = off  #关闭单主模式的参数
###loose-group_replication_enforce_update_everywhere_checks = on #开启多主模式的参数

skip-external-locking
skip-name-resolve
skip-ssl

#memory is 16G
key_buffer_size                                             = 32M
table_open_cache                                            = 2048
table_definition_cache                                      = 1024
sort_buffer_size                                            = 4M
net_buffer_length                                           = 32K
read_buffer_size                                            = 4M
read_rnd_buffer_size                                        = 16M

open_files_limit                                            = 10000
thread_cache_size                                           = 400
query_cache_type                                            = 0
query_cache_size                                            = 32M
max_write_lock_count                                        = 300
wait_timeout                                                = 120
interactive_timeout                                         = 120
net_read_timeout                                            = 120
net_write_timeout                                           = 120

max_connections                                             = 800
max_user_connections                                        = 750
max_connect_errors                                          = 10000
max_allowed_packet                                          = 256M
back_log                                                    = 2048
log_timestamps                                              = system
performance_schema                                          = OFF
character_set_server                                        = utf8mb4

##当链接数耗尽后,通过设置别用端口,让root可以登录
extra_max_connections                                       = 2
extra_port                                                  = 13306

###让mysql不区分大小写敏感
lower_case_table_names                                      = 1

#explicit_defaults_for_timestamp                            = 1

#----------------Myisam--------------------------------#
myisam_recover_options                                      = DEFAULT
bulk_insert_buffer_size                                     = 32M
myisam_sort_buffer_size                                     = 64M
myisam_max_sort_file_size                                   = 256M
myisam_repair_threads                                       = 1

#if the query is exec time great than 2 seconds, the query will log to slow log if slowlog is enabled.
long_query_time                                             = 1
slow_query_log                                              = On
slow-query-log-file                                         = /data/mysql_data/slow.log
show_compatibility_56                                       = on

# Don't listen on a TCP/IP port at all. This can be a security enhancement,
# if all processes that need to connect to mysqld run on the same host.
# All interaction with mysqld must be made via Unix sockets or named pipes.
# Note that using this option without enabling named pipes on Windows
# (via the "enable-named-pipe" option) will render mysqld useless!
# 
#skip-networking

#----------------------------MySQL Log----------------#
# Replication Master Server (default)
# binary logging is required for replication
log-bin                                                     = mysql-bin
expire_logs_days                                            = 20
log_error                                                   = error.log
log_error_verbosity                                         = 1
log_warnings                                                = 1

# binary logging format - mixed recommended
binlog_format                                               = row
relay-log                                                   = mysql-relay-bin
relay-log-index                                             = relay.index
# required unique id between 1 and 2^32 - 1
server-id                                                   = 1
#sql-mode                                                    = "NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
#sql-mode                                                    = "NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
sync_binlog                                                 = 1
log_slave_updates                                           = 1
#binlog_checksum                                            = NONE

#------------------------------replicate--------------#
#排除不需要同步的库表
#replicate-ignore-db                                        = mysql
#replicate-ignore-db                                        = sys
replicate-ignore-db                                         = information_schema
replicate-ignore-db                                         = performance_schema
replicate-ignore-db                                         = undolog
replicate-ignore-db                                         = for_nagios
replicate-ignore-db                                         = undolog

#replicate_wild_ignore_table                                = mysql.%
#replicate_wild_ignore_table                                = sys.%
replicate_wild_ignore_table                                 = information_schema.%
replicate_wild_ignore_table                                 = performance_schema.%
replicate_wild_ignore_table                                 = undolog.%
replicate_wild_ignore_table                                 = for_nagios.%
replicate_wild_ignore_table                                 = undolog.%

#主主复制需要开启
#auto_increment_offset= 2
#auto_increment_increment= 2

#GTID模式复制,需要开启如下
gtid_mode                                                  = ON
enforce_gtid_consistency                                   = ON

#并发复制
slave-parallel-type                                         = LOGICAL_CLOCK
slave-parallel-workers                                      = 2
master_info_repository                                      = TABLE
relay_log_info_repository                                   = TABLE
relay_log_recovery                                          = ON

#跳过slave进程启动参数
skip-slave-start

#如果实例为从库,则需要设置为on
#read_only                                                   = on

#skip-grant-tables

#--------------------------------------------------------innoDB------------#
innodb_rollback_on_timeout
# Uncomment the following if you are using InnoDB tables
innodb_data_home_dir                                        = /data/mysql_data
innodb_data_file_path                                       = ibdata1:1G;ibdata2:1G:autoextend
innodb_log_group_home_dir                                   = /data/mysql_data
innodb_undo_directory                                       = /data/mysql_data/undolog/
innodb_undo_logs                                            = 128
innodb_undo_tablespaces                                     = 3

# You can set .._buffer_pool_size up to 50 - 80 %
#innodb_use_sys_malloc = 0 
#innodb_page_size = 8192
innodb_buffer_pool_size                                     = 2G
innodb_buffer_pool_instances                                = 1
#innodb_additional_mem_pool_size = 8M

# Set .._log_file_size to 25 % of buffer pool size
innodb_log_file_size                                        = 256M
innodb_log_buffer_size                                      = 64M
innodb_log_files_in_group                                   = 3
#每次事务提交时MySQL都会把log buffer的数据写入log file,并且flush(刷到磁盘)中去,该模式为系统默认
innodb_flush_log_at_trx_commit                              = 1
innodb_lock_wait_timeout                                    = 120
#启用独立表空间
innodb_file_per_table                                       = 1

#CPU是1颗8核的,那么可以设置
innodb_read_io_threads                                      = 8
innodb_write_io_threads                                     = 8

#默认是0,则表示没有并发线程数限制,所有请求都会直接请求线程执行,当并发用户线程数量小于64,建议设置innodb_thread_concurrency=0,在大多数情况下,最佳的值是小于并接近虚拟CPU的个数
innodb_thread_concurrency                                   = 12
innodb_max_dirty_pages_pct                                  = 75
innodb_flush_method                                         = O_DIRECT

innodb_purge_threads                                        = 10
innodb_large_prefix                                         = 1

#参数待测试
#innodb_io_capacity                                         = 20000
#innodb_io_capacity_max                                     = 40000

#根据CPU核心数来设定
thread_pool_size                                            = 8
#thread_handling = pool-of-threads
thread_pool_oversubscribe                                   = 24

#thread_handling                             = pool-of-threads
thread_pool_stall_limit                                     = 100
thread_pool_max_threads                                     = 30

#解释: 在启动时把热数据加载到内存。
innodb_buffer_pool_load_at_startup                          = 1
#解释: 在关闭时把热数据dump到本地磁盘
innodb_buffer_pool_dump_at_shutdown                         = 1

##默认是8M, 如果一次insert数据量比较多的话, 可以适当增加
innodb_autoextend_increment                                 = 32

[mysqldump]
quick
max_allowed_packet                                          = 256M

[mysql]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
#safe-updates

[myisamchk]
#key_buffer_size = 20M
#sort_buffer_size = 20M
key_buffer_size                                             = 200M
sort_buffer_size                                            = 200M
read_buffer                                                 = 2M
write_buffer                                                = 2M

[mysqld_safe]
#控制文件打开数的show global status like 'open%file%';比较合适的设置:Open_files / open_files_limit * 100% <= 75%
open-files-limit                                            = 65535
log-error                                                   = /data/mysql_data/error.log

[mysqlhotcopy]
interactive-timeout

# 初始化语句

/usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql_data

2.启动数据库服务
# /etc/init.d/mysql start

[root@zabbix4_clone:~]# ss -tuanlp|grep 3306
tcp    LISTEN     0      2048      *:3306                  *:*                   users:(("mysqld",pid=35200,fd=170))
tcp    LISTEN     0      2048      *:13306                 *:*                   users:(("mysqld",pid=35200,fd=184))

####启动脚本
[root@zabbix4_clone:~]# cat /etc/init.d/mysql
#!/bin/sh
# Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
# This file is public domain and comes with NO WARRANTY of any kind

# MySQL (Percona Server) daemon start/stop script.

# Usually this is put in /etc/init.d (at least on machines SYSV R4 based
# systems) and linked to /etc/rc3.d/S99mysql and /etc/rc0.d/K01mysql.
# When this is done the mysql server will be started when the machine is
# started and shut down when the systems goes down.

# Comments to support chkconfig on RedHat Linux
# chkconfig: 2345 64 36
# description: A very fast and reliable SQL database engine.

# Comments to support LSB init script conventions
### BEGIN INIT INFO
# Provides: mysql
# Required-Start: $local_fs $network $remote_fs
# Should-Start: ypbind nscd ldap ntpd xntpd
# Required-Stop: $local_fs $network $remote_fs
# Default-Start:  2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: start and stop MySQL (Percona Server)
# Description: Percona-Server is a SQL database engine with focus on high performance.
### END INIT INFO
 
# If you install MySQL on some other places than /usr/local/percona-server-5.7.24, then you
# have to do one of the following things for this script to work:
#
# - Run this script from within the MySQL installation directory
# - Create a /etc/my.cnf file with the following information:
#   [mysqld]
#   basedir=<path-to-mysql-installation-directory>
# - Add the above to any other configuration file (for example ~/.my.ini)
#   and copy my_print_defaults to /usr/bin
# - Add the path to the mysql-installation-directory to the basedir variable
#   below.
#
# If you want to affect other MySQL variables, you should make your changes
# in the /etc/my.cnf, ~/.my.cnf or other MySQL configuration files.

# If you change base dir, you must also change datadir. These may get
# overwritten by settings in the MySQL configuration files.

basedir=
datadir=

# Default value, in seconds, afterwhich the script should timeout waiting
# for server start. 
# Value here is overriden by value in my.cnf. 
# 0 means don't wait at all
# Negative numbers mean to wait indefinitely
service_startup_timeout=900

# Lock directory for RedHat / SuSE.
lockdir='/var/lock/subsys'
lock_file_path="$lockdir/mysql"

# The following variables are only set for letting mysql.server find things.

# Set some defaults
mysqld_pid_file_path=
if test -z "$basedir"
then
  basedir=/usr/local/percona-server-5.7.24
  bindir=/usr/local/percona-server-5.7.24/bin
  if test -z "$datadir"
  then
    datadir=/data/mysql_data
  fi
  sbindir=/usr/local/percona-server-5.7.24/bin
  libexecdir=/usr/local/percona-server-5.7.24/bin
else
  bindir="$basedir/bin"
  if test -z "$datadir"
  then
    datadir="$basedir/data"
  fi
  sbindir="$basedir/sbin"
  libexecdir="$basedir/libexec"
fi

# datadir_set is used to determine if datadir was set (and so should be
# *not* set inside of the --basedir= handler.)
datadir_set=

#
# Use LSB init script functions for printing messages, if possible
#
lsb_functions="/lib/lsb/init-functions"
if test -f $lsb_functions ; then
  . $lsb_functions
else
  log_success_msg()
  {
    echo " SUCCESS! $@"
  }
  log_failure_msg()
  {
    echo " ERROR! $@"
  }
fi

PATH="/sbin:/usr/sbin:/bin:/usr/bin:$basedir/bin"
export PATH

mode=$1    # start or stop

[ $# -ge 1 ] && shift


other_args="$*"   # uncommon, but needed when called from an RPM upgrade action
           # Expected: "--skip-networking --skip-grant-tables"
           # They are not checked here, intentionally, as it is the resposibility
           # of the "spec" file author to give correct arguments only.

case `echo "testingc"`,`echo -n testing` in
    *c*,-n*) echo_n=   echo_c=     ;;
    *c*,*)   echo_n=-n echo_c=     ;;
    *)       echo_n=   echo_c='c' ;;
esac

parse_server_arguments() {
  for arg do
    case "$arg" in
      --basedir=*)  basedir=`echo "$arg" | sed -e 's/^[^=]*=//'`
                    bindir="$basedir/bin"
            if test -z "$datadir_set"; then
              datadir="$basedir/data"
            fi
            sbindir="$basedir/sbin"
            libexecdir="$basedir/libexec"
        ;;
      --datadir=*)  datadir=`echo "$arg" | sed -e 's/^[^=]*=//'`
            datadir_set=1
    ;;
      --pid-file=*) mysqld_pid_file_path=`echo "$arg" | sed -e 's/^[^=]*=//'` ;;
      --service-startup-timeout=*) service_startup_timeout=`echo "$arg" | sed -e 's/^[^=]*=//'` ;;
    esac
  done
}

wait_for_pid () {
  verb="$1"           # created | removed
  pid="$2"            # process ID of the program operating on the pid-file
  pid_file_path="$3" # path to the PID file.

  i=0
  avoid_race_condition="by checking again"

  while test $i -ne $service_startup_timeout ; do

    case "$verb" in
      'created')
        # wait for a PID-file to pop into existence.
        test -s "$pid_file_path" && i='' && break
        ;;
      'removed')
        # wait for this PID-file to disappear
        test ! -s "$pid_file_path" && i='' && break
        ;;
      *)
        echo "wait_for_pid () usage: wait_for_pid created|removed pid pid_file_path"
        exit 1
        ;;
    esac

    # if server isn't running, then pid-file will never be updated
    if test -n "$pid"; then
      if kill -0 "$pid" 2>/dev/null; then
        :  # the server still runs
      else
        # The server may have exited between the last pid-file check and now.  
        if test -n "$avoid_race_condition"; then
          avoid_race_condition=""
          continue  # Check again.
        fi

        # there's nothing that will affect the file.
        log_failure_msg "The server quit without updating PID file ($pid_file_path)."
        return 1  # not waiting any more.
      fi
    fi

    echo $echo_n ".$echo_c"
    i=`expr $i + 1`
    sleep 1

  done

  if test -z "$i" ; then
    log_success_msg
    return 0
  else
    log_failure_msg
    return 1
  fi
}

# Get arguments from the my.cnf file,
# the only group, which is read from now on is [mysqld]
if test -x "$bindir/my_print_defaults";  then
  print_defaults="$bindir/my_print_defaults"
else
  # Try to find basedir in /etc/my.cnf
  conf=/etc/my.cnf
  print_defaults=
  if test -r $conf
  then
    subpat='^[^=]*basedir[^=]*=(.*)$'
    dirs=`sed -e "/$subpat/!d" -e 's//1/' $conf`
    for d in $dirs
    do
      d=`echo $d | sed -e 's/[     ]//g'`
      if test -x "$d/bin/my_print_defaults"
      then
        print_defaults="$d/bin/my_print_defaults"
        break
      fi
    done
  fi

  # Hope it's in the PATH ... but I doubt it
  test -z "$print_defaults" && print_defaults="my_print_defaults"
fi

#
# Read defaults file from 'basedir'.   If there is no defaults file there
# check if it's in the old (depricated) place (datadir) and read it from there
#

extra_args=""
if test -r "$basedir/my.cnf"
then
  extra_args="-e $basedir/my.cnf"
fi

parse_server_arguments `$print_defaults $extra_args mysqld server mysql_server mysql.server`

#
# Set pid file if not given
#
if test -z "$mysqld_pid_file_path"
then
  mysqld_pid_file_path=$datadir/`hostname`.pid
else
  case "$mysqld_pid_file_path" in
    /* ) ;;
    * )  mysqld_pid_file_path="$datadir/$mysqld_pid_file_path" ;;
  esac
fi

case "$mode" in
  'start')
    # Start daemon

    # Safeguard (relative paths, core dumps..)
    cd $basedir

    echo $echo_n "Starting MySQL (Percona Server)"
    if test -x $bindir/mysqld_safe
    then
      # Give extra arguments to mysqld with the my.cnf file. This script
      # may be overwritten at next upgrade.
      $bindir/mysqld_safe --datadir="$datadir" --pid-file="$mysqld_pid_file_path" $other_args >/dev/null &
      wait_for_pid created "$!" "$mysqld_pid_file_path"; return_value=$?

      # Make lock for RedHat / SuSE
      if test -w "$lockdir"
      then
        touch "$lock_file_path"
      fi

      exit $return_value
    else
      log_failure_msg "Couldn't find MySQL server ($bindir/mysqld_safe)"
    fi
    ;;

  'stop')
    # Stop daemon. We use a signal here to avoid having to know the
    # root password.

    if test -s "$mysqld_pid_file_path"
    then
      # signal mysqld_safe that it needs to stop
      touch "$mysqld_pid_file_path.shutdown"

      mysqld_pid=`cat "$mysqld_pid_file_path"`

      if (kill -0 $mysqld_pid 2>/dev/null)
      then
        echo $echo_n "Shutting down MySQL (Percona Server)"
        kill $mysqld_pid
        # mysqld should remove the pid file when it exits, so wait for it.
        wait_for_pid removed "$mysqld_pid" "$mysqld_pid_file_path"; return_value=$?
      else
        log_failure_msg "MySQL (Percona Server) server process #$mysqld_pid is not running!"
        rm "$mysqld_pid_file_path"
      fi

      # Delete lock for RedHat / SuSE
      if test -f "$lock_file_path"
      then
        rm -f "$lock_file_path"
      fi
      exit $return_value
    else
      log_failure_msg "MySQL (Percona Server) PID file could not be found!"
    fi
    ;;

  'restart')
    # Stop the service and regardless of whether it was
    # running or not, start it again.
    if $0 stop  $other_args; then
      $0 start $other_args
    else
      log_failure_msg "Failed to stop running server, so refusing to try to start."
      exit 1
    fi
    ;;

  'reload'|'force-reload')
    if test -s "$mysqld_pid_file_path" ; then
      read mysqld_pid <  "$mysqld_pid_file_path"
      kill -HUP $mysqld_pid && log_success_msg "Reloading service MySQL (Percona Server)"
      touch "$mysqld_pid_file_path"
    else
      log_failure_msg "MySQL (Percona Server) PID file could not be found!"
      exit 1
    fi
    ;;
  'status')
    # First, check to see if pid file exists
    if test -s "$mysqld_pid_file_path" ; then 
      read mysqld_pid < "$mysqld_pid_file_path"
      if kill -0 $mysqld_pid 2>/dev/null ; then 
        log_success_msg "MySQL (Percona Server) running ($mysqld_pid)"
        exit 0
      else
        log_failure_msg "MySQL (Percona Server) is not running, but PID file exists"
        exit 1
      fi
    else
      # Try to find appropriate mysqld process
      mysqld_pid=`pidof $libexecdir/mysqld`

      # test if multiple pids exist
      pid_count=`echo $mysqld_pid | wc -w`
      if test $pid_count -gt 1 ; then
        log_failure_msg "Multiple MySQL running but PID file could not be found ($mysqld_pid)"
        exit 5
      elif test -z $mysqld_pid ; then 
        if test -f "$lock_file_path" ; then 
          log_failure_msg "MySQL (Percona Server) is not running, but lock file ($lock_file_path) exists"
          exit 2
        fi 
        log_failure_msg "MySQL (Percona Server) is not running"
        exit 3
      else
        log_failure_msg "MySQL (Percona Server) is running but PID file could not be found"
        exit 4
      fi
    fi
    ;;
    *)
      # usage
      basename=`basename "$0"`
      echo "Usage: $basename  {start|stop|restart|reload|force-reload|status}  [ MySQL (Percona Server) options ]"
      exit 1
    ;;
esac

exit 0

3.创建zabbix库
mysql> create database zabbix character set utf8 collate utf8_bin;

给zabbix库授权并指定用户
mysql> grant all privileges on zabbix.* to zabbix@'localhost' identified by 'zabbix';

4.在zabbix server主机上导入zabbix自带的三个表,路径在zabbix4.0.10源码目录database/mysql下后缀为.sql的三个文件
[root@zabbix4_clone:~]# ll /usr/local/src/zabbix-4.0.10/database/mysql/
total 7260
-rw-r--r-- 1 1001 mysql 3957065 Jun 26 04:20 data.sql
-rw-r--r-- 1 1001 mysql 1978341 Jun 26 04:20 images.sql
-rw-r--r-- 1 root root    15585 Jun 26 23:24 Makefile
-rw-r--r-- 1 1001 mysql     392 Jun 26 04:20 Makefile.am
-rw-r--r-- 1 1001 mysql   15711 Jun 26 04:20 Makefile.in
-rw-r--r-- 1 1001 mysql  140265 Jun 26 04:20 schema.sql

5.导入sql文件是有先后顺序的,先导schema.sql、images.sql、data.sql.
[root@ws_zabbix4:/usr/local/src]# cd zabbix-4.0.10/database/mysql/
[root@ws_zabbix4:/usr/local/src/zabbix-4.0.10/database/mysql]# ls
data.sql  images.sql  Makefile.am  Makefile.in  schema.sql
[root@ws_zabbix4:/usr/local/src/zabbix-4.0.10/database/mysql]# mysql -uzabbix -p'zabbix' zabbix < schema.sql
[root@ws_zabbix4:/usr/local/src/zabbix-4.0.10/database/mysql]# mysql -uzabbix -p'zabbix' zabbix < images.sql
[root@ws_zabbix4:/usr/local/src/zabbix-4.0.10/database/mysql]# mysql -uzabbix -p'zabbix' zabbix < data.sql 

二、zabbix服务端的编译安装

1.安装编译环境所需要的依赖包组
#yum install gcc libxml2-devel libevent-devel net-snmp net-snmp-devel  curl  curl-devel php  php-bcmath  php-mbstring php-gettext php-session php-ctype php-xmlreader php-xmlwrer php-xml php-net-socket php-gd php-mysql -y

2.创建zabbix用户useradd zabbix -s /sbin/nologin

3.下载源码包,解压,编译

# wget https://sourceforge.net/projects/zabbix/files/ZABBIX%20Latest%20Stable/4.0.10/zabbix-4.0.10.tar.gz/download
# tar xf zabbix-4.0.10.tar.gz
4.编译安装zabbix4.0.10

./configure --prefix=/usr/local/zabbix4.0.10 --enable-server --enable-agent --with-mysql --enable-ipv6 --with-net-snmp --with-libcurl --with-libxml2 --enable-java


# 编译报错
...
checking for libperfstat 5.2.0.40 fileset... no
checking for libperfstat 5.3.0.60 fileset... no
checking for architecture... linux (linux-gnu)
checking for the linux kernel version... unknown family (3.10.0-957.el7.x86_64)
checking size of void *... 8
checking for mysql_config... /usr/local/mysql/bin/mysql_config
checking for main in -lperconaserverclient... no
configure: error: Not found perconaserverclient library

# 查找perconaserverclient.so 文件
# [root@ws_zabbix4:/usr/local/src/zabbix-4.0.10]# locate perconaserverclient
/usr/local/Percona-Server-5.7.24_解压版/lib/libperconaserverclient.a
/usr/local/Percona-Server-5.7.24_解压版/lib/libperconaserverclient.so
/usr/local/Percona-Server-5.7.24_解压版/lib/libperconaserverclient.so.20
/usr/local/Percona-Server-5.7.24_解压版/lib/libperconaserverclient.so.20.3.11
/usr/local/Percona-Server-5.7.24_解压版/lib/pkgconfig/perconaserverclient.pc
/usr/local/bak_percona-server-5.7.24/lib/libperconaserverclient.a
/usr/local/bak_percona-server-5.7.24/lib/libperconaserverclient.so
/usr/local/bak_percona-server-5.7.24/lib/libperconaserverclient.so.20
/usr/local/bak_percona-server-5.7.24/lib/libperconaserverclient.so.20.3.11
/usr/local/bak_percona-server-5.7.24/lib/pkgconfig/perconaserverclient.pc
/usr/local/percona-server-5.7.14/lib/libperconaserverclient.a
/usr/local/percona-server-5.7.14/lib/libperconaserverclient.so
/usr/local/percona-server-5.7.14/lib/libperconaserverclient.so.20
/usr/local/percona-server-5.7.14/lib/libperconaserverclient.so.20.3.1
/usr/local/percona-server-5.7.14/lib/pkgconfig/perconaserverclient.pc
/usr/local/percona-server-5.7.24/lib/libperconaserverclient.a
/usr/local/percona-server-5.7.24/lib/libperconaserverclient.so
/usr/local/percona-server-5.7.24/lib/libperconaserverclient.so.20
/usr/local/percona-server-5.7.24/lib/libperconaserverclient.so.20.3.11
/usr/local/percona-server-5.7.24/lib/pkgconfig/perconaserverclient.pc

# 生成软连接,问题解决
[root@ws_zabbix4:/usr/local/src/zabbix-4.0.10]# ln -s /usr/local/mysql/lib/libperconaserverclient.so /usr/lib64/mysql/libperconaserverclient.so
[root@ws_zabbix4:/usr/local/src/zabbix-4.0.10]# ln -s /usr/local/mysql/lib/libperconaserverclient.so /usr/lib/libperconaserverclient.so


5.执行make && make install
#make -j 4 && make install 

6.拷贝启动脚本文件到/etc/init.d目录下
#cp misc/init.d/fedora/core/* /etc/init.d/

7.拷贝过去的脚本需要修改下目录路径,server和agent都需要改
# cd /usr/local
# ln -s zabbix4.0.10 zabbix
#vim /etc/init.d/zabbix_server 
    22         BASEDIR=/usr/local
改成:
    22         BASEDIR=/usr/local/zabbix

8.创建zabbix的日志存放路径和修改/usr/local/zabbix的所属主为zabbix
useradd zabbix -s /sbin/nologin
# mkdir /var/log/zabbix
# chown -R zabbix.zabbix /var/log/zabbix
# chown -R zabbix.zabbix /usr/local/zabbix/

9.修改配置文件
[root@ws_zabbix4:/usr/local/src/zabbix-4.0.10]# egrep -v '^#|^$' /usr/local/zabbix/etc/zabbix_server.conf
LogFileSize=10   开启日志滚动,单位为MB、达到指定值之后就生成新的日志文件。
ListenPort=10051
LogFile=/var/log/zabbix/zabbix_server.log    修改日志存放路径
DBName=zabbix
DBUser=zabbix
DBSocket=/tmp/mysql.sock
DBPort=3306
StartPollers=30
StartTrappers=30
StartVMwareCollectors=20
VMwareFrequency=20
VMwarePerfFrequency=20
VMwareCacheSize=64M
VMwareTimeout=30
ListenIP=0.0.0.0
HousekeepingFrequency=12
CacheSize=256M
Timeout=15
AlertScriptsPath=/usr/local/zabbix/share/zabbix/alertscripts
ExternalScripts=/usr/local/zabbix/share/zabbix/externalscripts
LogSlowQueries=3000
StartProxyPollers=20

10.启动zabbix、并查看端口是否正常监听
# 通过启动脚本启动,看不到端口
# /etc/init.d/zabbix_server start
# 直接使用sbin下的可执行程序启动,定位错误
[root@ws_zabbix4:/usr/local]# /usr/local/zabbix/sbin/zabbix_server 
[root@ws_zabbix4:/usr/local]# zabbix_server [40848]: cannot open "/var/log/zabbix/zabbix_server.log": [13] Permission denied

chown -R zabbix.zabbix /var/log/zabbix/

# 再次启动成功
[root@ws_zabbix4:/usr/local]# netstat -tnlp | grep 10051
tcp        0      0 0.0.0.0:10051           0.0.0.0:*               LISTEN      41018/zabbix_server        

安装nginx
yum install -y nginx
# 修改php.ini参数
max_input_time=300

11.创建一个zabbix前端页面存放目录
# mkdir /data/www/vhosts/zabbix.chinasoft.com

12从zabbix解压包里面把php的所有文件拷贝到/var/www/html/zabbix目录下
# cp -ar frontends/php/* /data/www/vhosts/zabbix.chinasoft.com

13.通过网页来安装zabbix



默认账号Admin 密码 zabbix

nginx配置文件

[root@zabbix4_clone:~]# cat /usr/local/nginx/conf/vhost.d/zabbix.chinasoft.com.conf 
server
{
    listen      80;
    server_name  zabbix.chinasoft.com;
    index index.php index.html index.htm;
    root   /data/www/vhosts/zabbix.chinasoft.com/httpdocs;
    access_log /data/www/logs/zabbix/access_zabbix.log  combined;
    error_log  /data/www/logs/zabbix/error_zabbix.log; 

    #expires                         
    location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$
    {
        expires 30d;
    }

    location ~ .*.(js|css)?$
    {
        expires      24h;
    }    

    location /webstatus {
        stub_status on;
        access_log off;
    }

    # location ~* ^/(attachments|images)/.*.(php|php5)$
    # {
    #    deny all;
    # }

    location ~ .*.php?$
    {
        fastcgi_pass 127.0.0.1:9000;
        #fastcgi_pass unix:/tmp/php-fcgi.sock;
        #fastcgi_pass php;
        fastcgi_index index.php;
        fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

}

 客户端启动脚本

[root@:~]# cat /etc/init.d/zabbix_agentd 
#!/bin/bash
#
# chkconfig: - 90 10
# description:  Starts and stops Zabbix Agent using chkconfig
#                Tested on Fedora Core 2 - 5
#                Should work on all Fedora Core versions
#
# @name:    zabbix_agentd
# @author:    Alexander Hagenah <hagenah@topconcepts.com>
# @created:    18.04.2006
#
# Modified for Zabbix 2.0.0
# May 2012, Zabbix SIA
#
# Source function library.
. /etc/init.d/functions

# Variables
# Edit these to match your system settings

    # Zabbix-Directory
    BASEDIR=/usr/local/zabbix_agents_3.2.0

    # Binary File
    BINARY_NAME=zabbix_agentd

    # Full Binary File Call
    FULLPATH=$BASEDIR/sbin/$BINARY_NAME

    # PID file
    PIDFILE=/tmp/$BINARY_NAME.pid

    # Establish args
    ERROR=0
    STOPPING=0

#
# No need to edit the things below
#

# application checking status
if [ -f $PIDFILE  ] && [ -s $PIDFILE ]
    then
    PID=`cat $PIDFILE`

    if [ "x$PID" != "x" ] && kill -0 $PID 2>/dev/null && [ $BINARY_NAME == `ps -e | grep $PID | awk '{print $4}'` ]
    then
        STATUS="$BINARY_NAME (pid `pidof $APP`) running.."
        RUNNING=1
    else
        rm -f $PIDFILE
        STATUS="$BINARY_NAME (pid file existed ($PID) and now removed) not running.."
        RUNNING=0
    fi
else
    if [ `ps -e | grep $BINARY_NAME | head -1 | awk '{ print $1 }'` ]
        then
        STATUS="$BINARY_NAME (pid `pidof $APP`, but no pid file) running.."
    else
        STATUS="$BINARY_NAME (no pid file) not running"
    fi
    RUNNING=0
fi

# functions
start() {
    if [ $RUNNING -eq 1 ]
        then
        echo "$0 $ARG: $BINARY_NAME (pid $PID) already running"
    else
        action $"Starting $BINARY_NAME: " $FULLPATH
        touch /var/lock/subsys/$BINARY_NAME
    fi
}

stop() {
    echo -n $"Shutting down $BINARY_NAME: "
    killproc $BINARY_NAME
    RETVAL=$?
    echo
    [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$BINARY_NAME
    RUNNING=0
}


# logic
case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    status)
        status $BINARY_NAME
        ;;
    restart)
        stop
        sleep 2
        start
        ;;
    help|*)
        echo $"Usage: $0 {start|stop|status|restart|help}"
        cat <<EOF

            start        - start $BINARY_NAME
            stop        - stop $BINARY_NAME
            status        - show current status of $BINARY_NAME
            restart        - restart $BINARY_NAME if running by sending a SIGHUP or start if not running
            help        - this screen

EOF
    exit 1
    ;;
esac

exit 0
原文地址:https://www.cnblogs.com/reblue520/p/11114935.html