zabbix6.4主要环境为Mysql8和PHP7.25以上
安装MySQL8.0
本地上传或下载mysql-8.0.30-linux-glibc2.12-x86_64.tar.xz
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.30-linux-glibc2.12-x86_64.tar.xz
在线执行脚本
vim install_mysql.sh
脚本内容
#!/bin/bash# use: 安装二进制版本的数据MYSQLSOFT="/usr/local/src/mysql-8.0.30-linux-glibc2.12-x86_64.tar.xz"MYSQL_INSTALL_DIR="/usr/local/mysql"LOG_FILE="/tmp/.install_mysql.log"DEBUG_LOG_FILE="/tmp/.install_mysql_debug.log"LINK_DATA_DIR="/app/mysql-data"LINK_LOG_DIR="/app/mysql-logs"SYSTEMCTL_FILE="/usr/lib/systemd/system/mysqld.service"MYSQL_SERVER_ID=$(date +%s)ROOT_PASS="password"printInfo() { echo "`date +%Y%m%d%H%M%S` $*" echo "`date +%Y%m%d%H%M%S` $*" >> ${LOG_FILE}}# 判断数据库文件是否存在getMysqlSoft() { [ ! -f ${MYSQLSOFT} ] && printInfo "源文件 $MYSQLSOFT 不存在,请先下载安装文件至此" && exit 2}# 创建mysql用户createMysqlUser() { if id -u mysql >/dev/null 2>&1; then printInfo "mysql user exists 无需创建" else groupadd -g 27 mysql || groupadd mysql useradd -g 27 -u 27 -s /bin/false mysql -M || useradd mysql -s /bin/false mysql -M [ $? -eq 0 ] && printInfo "创建mysql用户成功" || { printInfo "创建mysql用户失败";exit 3;} fi}# 判断mysql安装目录和mysql进程是否存在,存在则退出ifInstallEnv() { [ -d ${MYSQL_INSTALL_DIR} -o -d ${LINK_DATA_DIR} -o -d ${LINK_LOG_DIR} ] && { printInfo "数据安装目录${MYSQL_INSTALL_DIR} 或者 ${LINK_DATA_DIR} ${LINK_LOG_DIR}已经存在,请先删除在执行"; exit 4;} pidof mysqld && { printInfo "mysqld进程存在 不满足安装数据库环境"; exit 4;} }# 解压安装数据库 并创建相关目录xjMysql() { cd /usr/local/src tar -Jxf ${MYSQLSOFT} -C /usr/local/ cd /usr/local/ && mv `echo $(basename ${MYSQLSOFT}) |awk -F ".tar.xz" '{print $1}'` mysql [ $? -eq 0 ] && printInfo "数据库解压至 ${MYSQL_INSTALL_DIR} 成功" || { printInfo "解压至安装目录${MYSQL_INSTALL_DIR} 失败"; exit 5;} mkdir -p ${LINK_LOG_DIR} mkdir -p ${LINK_DATA_DIR} chown mysql.mysql ${LINK_DATA_DIR} ${LINK_LOG_DIR} ln -s ${LINK_LOG_DIR} ${MYSQL_INSTALL_DIR}/logs ln -s ${LINK_DATA_DIR} ${MYSQL_INSTALL_DIR}/data}# 数据库配置文件生成enablaSysemctlService() {# 生成systemclt 文件echo """# ${SYSTEMCTL_FILE}[Unit]Description=MySQL ServerDocumentation=man:mysqld(8)Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.htmlAfter=network.targetAfter=syslog.target[Install]WantedBy=multi-user.target[Service]User=mysqlGroup=mysqlExecStart=${MYSQL_INSTALL_DIR}/bin/mysqld_safe --defaults-file=/etc/my.cnf#ExecStart=${MYSQL_INSTALL_DIR}/bin/mysqld --defaults-file=/etc/my.cnfLimitNOFILE = 5000 """ | sudo tee ${SYSTEMCTL_FILE} 1>/dev/nullsudo systemctl daemon-reloadsudo systemctl enable mysqld}# 数据库启动文件生成createMySQLConf() {cat > /etc/my.cnf <<EOF[mysqld_safe]pid-file=${MYSQL_INSTALL_DIR}/data/mysqld.pid # pid文件位置 [mysql]port=3306 # 端口号prompt="MySQL \\R:\\m:\\s[\\d]>" # 提示信息default-character-set=utf8 # 默认字符集socket=${MYSQL_INSTALL_DIR}/data/mysql.sock [client]port=3306socket=${MYSQL_INSTALL_DIR}/data/mysql.sock # sock文件 [mysqld]###serverserver-id=${MYSQL_SERVER_ID}port=3306default-storage-engine=INNODB # 默认存储引擎character-set-server=utf8 # 服务器字符集lower_case_table_names=0 # 忽略了表名的大小写,默认值skip_name_resolve # 主机名不被解析open_files_limit=2000 # 同时最大的文件打开数设置safe-user-create # 没有mysql.user的insert权限,不可使用grant创建用户performance_schema=1 # 关闭此功能# default-time-zone = "+8:00"log_timestamps=SYSTEMtransaction_isolation = READ-COMMITTED # 隔离级别,不可重复读#sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'optimizer_switch='index_merge_intersection=off' # 控制索引合并交叉访问优化skip-name-resolve # 禁用dns解析#show_compatibility_56=1log_timestamps=systemread_only=off #从库中建议打开此设置,避免程序用户对从库写入数据basedir=${MYSQL_INSTALL_DIR} # base路径datadir=${MYSQL_INSTALL_DIR}/data # data路径tmpdir=/tmp # 临时文件路径log-error=${MYSQL_INSTALL_DIR}/logs/mysql-error.log # 错误日志路径slow_query_log_file=${MYSQL_INSTALL_DIR}/logs/mysql-slow.log # 慢日志路径general_log_file=${MYSQL_INSTALL_DIR}/logs/mysql-general.log # 定义一般日志路径 #日志默认是关闭的socket=${MYSQL_INSTALL_DIR}/data/mysql.sock #### innodbinnodb_data_home_dir=${MYSQL_INSTALL_DIR}/data # InnoDB表的目录位置innodb_data_file_path=ibdata1:12M:autoextend # innodb共享表空间大小innodb_buffer_pool_size=1G # innodb缓冲池大小innodb_buffer_pool_instances=30 # 开启多个内存缓冲池实例(减少数据库内部资源竞争、增加并发处理能力)innodb_thread_concurrency=20# 并发线程数量innodb_file_per_table=1 # 为每个innodb表设置单独的表空间innodb_change_buffering=inserts # 缓存insert操作(将对二级索引的数据操作缓存下来,以此减少二级索引的随机IO,并达到操作合并的效果)innodb_use_native_aio=0 # 关闭异步I/Oinnodb_read_ahead_threshold=0 # 关闭innodb预读innodb_lock_wait_timeout=5 # innodb事务行锁等待时间innodb_open_files=60000 # 限制Innodb能打开的表的数据innodb_sort_buffer_size=67108864innodb_print_all_deadlocks=1 ## 重做日志文件 innodb_log_file_size=1G # redo log组中每个日志文件的大小innodb_log_files_in_group=3 # redo log组成员数innodb_log_group_home_dir=${MYSQL_INSTALL_DIR}/data # redo log文件路径innodb_log_buffer_size=64M # redo log缓冲区大小(redo log buffer)innodb_flush_log_at_trx_commit=1 # redo log刷数据到磁盘策略# 0:当提交事务时,并不将事务的写入磁盘上重做日志文件,而是等待主线程每秒的刷新# 1:(默认)/usr/local/mysql在执行commit时将重做日志缓冲同步写到磁盘,即伴有fsync调用# 2:将重做日志异步写到磁盘,即写到文件系统的缓存中## innodb buffer pool刷新innodb_max_dirty_pages_pct=60 # 设置脏页在缓冲池占的最大百分比(影响关闭和重启的时间,越小则恢复时间越短)innodb_io_capacity=1000 # 用来限制innodb对磁盘IO的吞吐量## 后台线程 innodb_purge_threads=4 # 独立purge线程innodb_read_io_threads=8 # innodb中读线程数量innodb_write_io_threads=8 # innodb中写线程数量 ##### MyISAM key_buffer_size = 30M # myisam存储引擎参数,用于索引的缓冲区大小,增加它可得到更好处理的索引bulk_insert_buffer_size = 2M # myisam存储引擎参数,批量插入缓存大小myisam_sort_buffer_size = 2M # myisam存储引擎参数,表发生变化时重新排序所需的缓冲 ### replicationskip-slave-start # 启动mysql服务是,不自动启动复制relay_log_purge = 1 # 自动purge relay logmaster-info-file=${MYSQL_INSTALL_DIR}/data/master.info # master info文件位置(记录主节点相关信息)sync_master_info=100 # 多少个event后,刷新master.info信息relay-log-info-repository=table #默认格式是FILE,存数据库表中更安全master_info_repository=table #默认格式是FILE,存数据库表中更安全 relay_log_recovery=1 slave_skip_errors=ddl_exist_errors#slave_skip_errors=1062#slave-parallel-type = LOGICAL_CLOCK#slave-parallel-workers = 4#slave_preserve_commit_order=1 # 保证提交的顺序性#slave_transaction_retries=128 ## gtidgtid_mode = onenforce_gtid_consistency = 1log_slave_updates = 1 ## relay logrelay_log_info_file=${MYSQL_INSTALL_DIR}/logs/relay-log.info # relay log文件的位置(记录relay log相关信息)relay-log=${MYSQL_INSTALL_DIR}/logs/relay-bin # relay log文件的位置与名称relay-log-index=${MYSQL_INSTALL_DIR}/logs/relay-bin.index # relay log索引文件位置sync_relay_log_info=100 # 多少个event后,刷新relay_log.info信息sync-relay-log = 100 # 多少个event后,刷新relay log到磁盘的频率## slave配置slave_type_conversions="ALL_NON_LOSSY" # 控制些类型转换容错性,从库类型大于主库类型,是可以复制的slave_net_timeout=60 # slave重新检测复制间隔时间## 忽略复制配置replicate-wild-ignore-table=information_schema.% # 复制忽略information_schema库#replicate-wild-ignore-table=mysql.% # 复制忽略mysql库replicate-wild-ignore-table=performance_schema.% # 复制忽略performance_schema库replicate-wild-ignore-table=test.% # 复制忽略test库## 半同步配置 plugin_load = "validate_password.so;rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"#rpl_semi_sync_slave_enabled = 1 #rpl_semi_sync_master_enabled=1 # 开启半同步复制#rpl_semi_sync_master_timeout=1000 # 主节点在等待从节点的ack,超过阀值,将半同步切换为异步 #### binloglog-bin=${MYSQL_INSTALL_DIR}/logs/mysql-bin # binlog文件位置binlog_cache_size=2M # 二进制日志缓冲大小(存放为提交的binlog文件max_binlog_size=1G # 设置二进制文件大小,默认1G,也就是1024*1024*1024binlog_format=row # binlog日志的格式,row/statement/mixed 格式log-slave-updates=1 # 从节点将接受到的binlog操作,同事记录到自己的binlog中expire_logs_days=30 # 关闭自动清除binlogbinlog_row_image=fullsync_binlog=1 # 缓冲多少次同步到磁盘(1:同步写方式;0:默认)高并发建议设置100或者0 ### slow queryslow_query_log=1 # 开启慢查询log_slow_admin_statements=1 # 记录管理型慢SQLlong_query_time=0.2 # 超过200ms记录为慢查询explicit_defaults_for_timestamp=true # 显示指定默认值为timestamp类型的字段back_log=1024 # 指定MySQL可能的连接数量。 ### 连接max_connections=2000 # 最大连接数设置max_user_connections=500 # 指定mysql账户允许的最大同时连接数max_connect_errors=100 # 最大连接错误数设置,防止恶意登陆lock_wait_timeout = 1800wait_timeout = 28800 #默认值8小时 过大会有很多sleepinteractive_timeout=28800 ### 缓存相关table_open_cache = 2048 # 表高速缓存的大小thread_cache_size=256 # 控制mysql缓存客户服务线程的数量(为加快连接数据库速度,mysql会缓存一定数量的客户服务线程以备重用)read_buffer_size = 512K # 每个线程连续扫描时为扫描的每个表分配的缓冲区的大小(字节),一次性分配read_rnd_buffer_size = 512K # 排序后,按照排序后的顺序读取行时,分配的随机读缓冲区,避免硬盘搜索sort_buffer_size=512K # 用于排序使用的缓存,会话参数,一次性分配,4M可以容下1.6W长度为256B的行join_buffer_size=512K # 不使用索引连接的时候使用这个参数用于缓存完全连接的缓冲区大小tmp_table_size=10M # 会话级参数,若内存中的临时表超过该值将转换为硬盘上的MyISAM表,提高Group by效率, Created_tmp_disk_tables/Created_tmp_tables<5% 比较合适 max_allowed_packet=100Mmax_binlog_cache_size=1048576000 # 最大允许接收的包的大小1G [mysqldump]quickmax_allowed_packet = 32MEOF}# init初始化数据initMysql() { cd /usr/local/mysql/ && ./bin/mysqld --initialize --user=mysql --basedir=${MYSQL_INSTALL_DIR} --datadir=${MYSQL_INSTALL_DIR}/data [ $? -eq 0 ] && printInfo "初始化数据库成功" || { printInfo "初始化数据库失败"; exit 6;} root_password=`grep "temporary password" ${LINK_LOG_DIR}/mysql-error.log |awk -F ": " '{print $NF}'` printInfo "获取到的数据库密码是: ${root_password}" echo "export PATH=\$PATH:${MYSQL_INSTALL_DIR}/bin" > /etc/profile.d/mysql.sh source /etc/profile}# 修改数据库密码updateMysqlPass() { systemctl start mysqld sleep 10 [ $? -eq 0 ] && printInfo "数据库启动成功" || { printInfo "数据库启动失败...."; exit 7;} ${MYSQL_INSTALL_DIR}/bin/mysql --connect-expired-password -uroot -p${root_password} -e "set global validate_password_policy=0;" ${MYSQL_INSTALL_DIR}/bin/mysqladmin -uroot -p${root_password} password ${ROOT_PASS} [ $? -eq 0 ] && printInfo "数据库root密码修改成功" || printInfo "数据库root密码修改失败" }################ main ##################main() { getMysqlSoft createMysqlUser ifInstallEnv xjMysql enablaSysemctlService createMySQLConf initMysql updateMysqlPass}main 2>&1 |tee -a ${DEBUG_LOG_FILE}exec bash
安装完成创建zabbix库
create database zabbix character set utf8 collate utf8_bin;
修改validate_password_policy参数的值
set global validate_password_policy=0;
修改密码的长度
set global validate_password_length=1;
创建zabbix用户
create user zabbix@'%' identified by 'zabbix';
授权
grant all privileges on zabbix.* to zabbix@'%';
升级gcc版本(由于CentOS7默认的gcc版本较低为4.8,因此无法顺利编译安装成功)
安装centos-release-scl
yum install centos-release-scl -y
安装devtoolset,注意,如果想安装10.版本的,就改成devtoolset-10-gcc,以此类推
sudo yum install devtoolset-11-gcc* -y
激活对应的devtoolset,所以你可以一次安装多个版本的devtoolset,需要的时候用下面这条命令切换到对应的版本
scl enable devtoolset-11 bash
查看gcc版本
gcc -v
补充:这条激活命令只对本次会话有效,重启会话后还是会变回原来的4.8.5版本,要想随意切换可按如下操作。
首先,安装的devtoolset是在 /opt/rh 目录下的
cd /opt/rh/devtoolset-11source ./enable
直接替换旧的gcc
mv /usr/bin/gcc /usr/bin/gcc-4.8.5ln -s /opt/rh/devtoolset-8/root/bin/gcc /usr/bin/gccmv /usr/bin/g++ /usr/bin/g++-4.8.5#如果没有则跳过这条命令ln -s /opt/rh/devtoolset-8/root/bin/g++ /usr/bin/g++gcc --versiong++ --version
安装zabbix6.4
下载依赖
yum install net-snmp-devel libevent-devel -y
下载官方源码包wget https://cdn.zabbix.com/zabbix/sources/stable/6.4/zabbix-6.4.0.tar.gz
创建zabbix目录
mkdir /usr/local/zabbix
解压
tar -zxvf zabbix-6.4.0.tar.gz -C /usr/local/zabbix/
创建zabbix组
groupadd zabbix
创建zabbix用户
useradd -g zabbix -M -s /sbin/nologin zabbix
编译安装Zabbix6.4
移动到zabbix目录
cd /usr/local/zabbix/zabbix-6.4.0/
编译
./configure --prefix=/usr/local/zabbix/ --enable-server --enable-agent --with-net-snmp --with-mysqlmake install
安装PHP
由于CentOS7自带PHP版本为5.6,所以需要安装额外的库,也是remi的库
yum -y install https://rpms.remirepo.net/enterprise/remi-release-7.rpmyum -y install yum-utilsyum-config-manager --disable 'remi-php*'yum-config-manager --enable remi-php74yum -y install php php-bcmath php-gd php-xml php-mbstring php-mysqlnd php-ldapyum -y install curl-devl libxml2 libxml2-devel
需要修改PHP参数(网页预配置必要条件)
vim /etc/php.ini#修改post_max_size为16M#修改max_execution_time为300#修改max_input_time为300
安装httpd
#yum安装httpdyum -y install httpd#配置httpd#移动前端文件至web服务的根目录并授权cp -r /usr/local/zabbix/zabbix-6.4.0/ui/* /var/www/html/chown apache:apache /var/www/html -R
导入数据库架构及数据
mysql -uzabbix -pzabbix zabbix < /usr/local/zabbix/zabbix-6.4.0/database/mysql/schema.sqlmysql -uzabbix -pzabbix zabbix < /usr/local/zabbix/zabbix-6.4.0/database/mysql/images.sqlmysql -uzabbix -pzabbix zabbix < /usr/local/zabbix/zabbix-6.4.0/database/mysql/data.sql
修改配置zabbix-server文件数据库密码
vim /usr/local/zabbix/zabbix-6.4.0/conf/zabbix_server.conf# DBPassword= 修改为MySQL的zabbix用户密码DBPassword=zabbix
开启httpd zabbix
service httpd startsystemctl enable httpd.servicecd /usr/local/zabbix/sbin/./zabbix_server
如果执行报错
执行一下操作后重新启动zabbix_server
locate libmysqlclient.so.18echo "/usr/local/mysql/lib" >> /etc/ld.so.confldconfig./zabbix_server
网页验证:
访问地址:本机ip:80
输入MySQL主机IP,上面创建的zabbix账号密码
来源地址:https://blog.csdn.net/Boring_05/article/details/131169598