zabbix6.4主要环境为Mysql8和PHP7.25以上
本地上传或下载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 Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=${MYSQL_INSTALL_DIR}/bin/mysqld_safe --defaults-file=/etc/my.cnf
#ExecStart=${MYSQL_INSTALL_DIR}/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE = 5000 """ | sudo tee ${SYSTEMCTL_FILE} 1>/dev/null
sudo systemctl daemon-reload
sudo 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=3306
socket=${MYSQL_INSTALL_DIR}/data/mysql.sock # sock文件
[mysqld]
###server
server-id=${MYSQL_SERVER_ID}
port=3306
default-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=SYSTEM
transaction_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=1
log_timestamps=system
read_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
#### innodb
innodb_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/O
innodb_read_ahead_threshold=0 # 关闭innodb预读
innodb_lock_wait_timeout=5 # innodb事务行锁等待时间
innodb_open_files=60000 # 限制Innodb能打开的表的数据
innodb_sort_buffer_size=67108864
innodb_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存储引擎参数,表发生变化时重新排序所需的缓冲
### replication
skip-slave-start # 启动mysql服务是,不自动启动复制
relay_log_purge = 1 # 自动purge relay log
master-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
## gtid
gtid_mode = on
enforce_gtid_consistency = 1
log_slave_updates = 1
## relay log
relay_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,超过阀值,将半同步切换为异步
#### binlog
log-bin=${MYSQL_INSTALL_DIR}/logs/mysql-bin # binlog文件位置
binlog_cache_size=2M # 二进制日志缓冲大小(存放为提交的binlog文件
max_binlog_size=1G # 设置二进制文件大小,默认1G,也就是1024*1024*1024
binlog_format=row # binlog日志的格式,row/statement/mixed 格式
log-slave-updates=1 # 从节点将接受到的binlog操作,同事记录到自己的binlog中
expire_logs_days=30 # 关闭自动清除binlog
binlog_row_image=full
sync_binlog=1 # 缓冲多少次同步到磁盘(1:同步写方式;0:默认)高并发建议设置100或者0
### slow query
slow_query_log=1 # 开启慢查询
log_slow_admin_statements=1 # 记录管理型慢SQL
long_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 = 1800
wait_timeout = 28800 #默认值8小时 过大会有很多sleep
interactive_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=100M
max_binlog_cache_size=1048576000 # 最大允许接收的包的大小1G
[mysqldump]
quick
max_allowed_packet = 32M
EOF
}
# 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-11
source ./enable
直接替换旧的gcc
mv /usr/bin/gcc /usr/bin/gcc-4.8.5
ln -s /opt/rh/devtoolset-8/root/bin/gcc /usr/bin/gcc
mv /usr/bin/g++ /usr/bin/g++-4.8.5
#如果没有则跳过这条命令
ln -s /opt/rh/devtoolset-8/root/bin/g++ /usr/bin/g++
gcc --version
g++ --version
下载依赖
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-mysql
make install
由于CentOS7自带PHP版本为5.6,所以需要安装额外的库,也是remi的库
yum -y install https://rpms.remirepo.net/enterprise/remi-release-7.rpm
yum -y install yum-utils
yum-config-manager --disable 'remi-php*'
yum-config-manager --enable remi-php74
yum -y install php php-bcmath php-gd php-xml php-mbstring php-mysqlnd php-ldap
yum -y install curl-devl libxml2 libxml2-devel
需要修改PHP参数(网页预配置必要条件)
vim /etc/php.ini
#修改post_max_size为16M
#修改max_execution_time为300
#修改max_input_time为300
#yum安装httpd
yum -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.sql
mysql -uzabbix -pzabbix zabbix < /usr/local/zabbix/zabbix-6.4.0/database/mysql/images.sql
mysql -uzabbix -pzabbix zabbix < /usr/local/zabbix/zabbix-6.4.0/database/mysql/data.sql
vim /usr/local/zabbix/zabbix-6.4.0/conf/zabbix_server.conf
# DBPassword= 修改为MySQL的zabbix用户密码
DBPassword=zabbix
service httpd start
systemctl enable httpd.service
cd /usr/local/zabbix/sbin/
./zabbix_server
如果执行报错
执行一下操作后重新启动zabbix_server
locate libmysqlclient.so.18
echo "/usr/local/mysql/lib" >> /etc/ld.so.conf
ldconfig
./zabbix_server
访问地址:本机ip:80