centos 7.9 离线部署Zabbix 6.0.46 监控详细方案(解决数据库字符集问题)

agent离线包的下载地址:https://repo.zabbix.com/zabbix/6.0/rhel/7/x86_64/
server用的是docker,不是上述的链接
一、外网环境准备(需联网设备操作)
1. 下载所需 Docker 镜像
复制代码
# 核心镜像
docker pull mysql:8.0
docker pull zabbix/zabbix-server-mysql:6.0-ubuntu-latest
docker pull zabbix/zabbix-web-nginx-mysql:6.0-ubuntu-latest
docker pull zabbix/zabbix-agent:6.0-ubuntu-latest

# 可选管理工具
docker pull portainer/portainer-ce:latest
docker pull adminer:latest
2. 保存镜像 为离线文件
复制代码
mkdir zabbix-docker-offline
docker save -o D:/mysql.tar mysql:8.0
docker save -o D:/zabbix-server-mysql.tar zabbix/zabbix-server-mysql:ubuntu-6.0-latest
docker save -o D:/zabbix-server-web.tar zabbix/zabbix-web-nginx-mysql:6.0-ubuntu-latest
docker save -o D:/zabbix-agent.tar zabbix/zabbix-agent:6.0-latest
docker save -o D:/portainer.tar portainer/portainer-ce:latest
docker save -o D:/adminer.tar adminer:latest

# 打包传输 zabbix-docker-offline目录名称
tar czvf zabbix-docker-offline.tar.gz zabbix-docker-offline/
二、内网服务器部署(192.168.145.136)
1. 传输并加载镜像
复制代码
# 上传文件到服务器
mkdir -p /opt/zabbix-docker
tar xzvf zabbix-docker-offline.tar.gz -C /opt/zabbix-docker

# 加载所有镜像
docker load -i /opt/zabbix-docker/mysql.tar
docker load -i /opt/zabbix-docker/zabbix-server.tar
docker load -i /opt/zabbix-docker/zabbix-web.tar
docker load -i /opt/zabbix-docker/zabbix-agent.tar
2. 创建持久化目录
复制代码
mkdir -p /data/zabbix/{mysql,server,web}
chmod -R 777 /data/zabbix
3. 编写 docker-compose.yml(字符集不能是**utf8mb4_unicode_ci**)
复制代码
version: '3.8'
 
services:
  mysql-server:
    image: mysql:8.0
    container_name: zabbix-mysql
    restart: unless-stopped
    environment:
      MYSQL_DATABASE: zabbix
      MYSQL_USER: zabbix
      MYSQL_PASSWORD: Fit2cloud...  # 替换为你的真实密码
      MYSQL_ROOT_PASSWORD: Fit2cloud...  # 替换为你的真实密码
    volumes:
      - /data/zabbix/mysql:/var/lib/mysql
    networks:
      - zabbix-net
    ports:
      - "3306:3306"  #新增:映射3306增加sql远程连接
    command:
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_bin
      --default-authentication-plugin=mysql_native_password
      --log_bin_trust_function_creators=1  # 新增:解决函数创建权限问题(关键)
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-pFit2cloud..."]  # 替换为你的root密码
      interval: 10s
      timeout: 5s
      retries: 10
      start_period: 30s

 
  zabbix-server:
    image: zabbix/zabbix-server-mysql:6.0-ubuntu-latest
    container_name: zabbix-server
    restart: unless-stopped
    environment:
      DB_SERVER_HOST: mysql-server
      MYSQL_DATABASE: zabbix
      MYSQL_USER: zabbix
      MYSQL_PASSWORD: Fit2cloud...  # 替换为你的真实密码
      ZBX_ENABLE_SNMP_TRAPS: "true"
      DB_SERVER_PORT: 3306
    volumes:
      - /data/zabbix/server:/var/lib/zabbix
    networks:
      - zabbix-net
    ports:
      - "10051:10051"
    depends_on:
      mysql-server:
        condition: service_healthy
 
  zabbix-web:
    image: zabbix/zabbix-web-nginx-mysql:6.0-ubuntu-latest
    container_name: zabbix-web
    restart: unless-stopped
    environment:
      DB_SERVER_HOST: mysql-server
      MYSQL_DATABASE: zabbix
      MYSQL_USER: zabbix
      MYSQL_PASSWORD: Fit2cloud...  # 替换为你的真实密码
      ZBX_SERVER_HOST: zabbix-server
      PHP_TZ: Asia/Shanghai
    networks:
      - zabbix-net
    ports:
      - "80:8080"
      - "443:8443"
    depends_on:
         zabbix-server:
          condition: service_started
 
  portainer:
    image: portainer/portainer-ce:latest
    container_name: portainer
    restart: always
    ports:
      - "9000:9000"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /data/zabbix/portainer:/data
    networks:
      - zabbix-net
 
networks:
  zabbix-net:
    driver: bridge
4. 启动服务栈
复制代码
cd /opt/zabbix-docker
docker compose up -d
5. 离线部署报错dbversion.table没找到,需要等一会就行了,如果不行可以从自己的虚拟机里复刻环境,把table导出后手动导入,但这样可能因为数据库字段格式等问题有其他报错(不推荐)
复制代码
1.进入docker中mysql的命令行
docker exec -it zabbix-mysql mysql -uroot -p
2.导出数据表
mysqldump -u username -p database_name table_name > table_name.sql
3.导入文件,使用命令,将上一步产生的sql文件复制到容器的内部
docker cp /path/to/your/sql/file.sql <container_id_or_name>:/path/in/container
4.进入docker中mysql的命令行
docker exec -it zabbix-mysql mysql -uroot -p
5.导入表
mysql -u username -p new_database_name < table_name.sql
或者直接移植数据
复制代码
1.把运行的容器关掉
#docker compose down 
2.进入compose文件所在的路径,运行如下
#tar -czf zabbix-backup.tar.gz docker-compose.yml /data/zabbix
3.打包之后转移到新机器后,把要复制的data/zabbix解压到 /data/zabbix
6.安装agent时有时连不上,是因为防火墙没开端口(即使开了端口没设置作用域也不行),防火墙关闭即可,
docker agent2的监测模板提取不到数据、监测不到,是因为需要把zabbix用户添加到docker的用户组,没有权限
检查docker组是否存在
复制代码
1.检查docker组是否存在
#getent group docker

2.将zabbix用户添加到docker 组
#usermod -aG docker zabbix

3.验证用户组更改
#groups zabbix

4.重启zabbix-agent2
#systemctl restart zabbix-agent2

7.当agent连接不上时,排障思路是从server主机测试agent连接,例如

复制代码
curl 1.1.1.1:10050
相关推荐
a努力。23 分钟前
四维解析Agent记忆架构:从零实战LangGraph长期记忆
java·开发语言·数据库
ss27338 分钟前
PG实战笔记 | 04 PostgreSQL市场地位与实际案例
数据库·postgresql
众链网络1 小时前
Agent 重试的工程解法:幂等、断点续跑与熔断怎么落地
java·前端·数据库·人工智能
oradh1 小时前
Oracle 索引维护操作总结
数据库·oracle
for_ever_love__1 小时前
MySQL Online DDL 完全指南:INSTANT/INPLACE/COPY 三种算法、MDL 锁事故与 gh-ost 实战
数据库·mysql·ddl·online·gh-ost·锁表·加字段
for_ever_love__1 小时前
MySQL 子查询、派生表与 CTE 优化:半连接、物化和递归实战
数据库·mysql·优化·as·子查询·with·cte
DBA_G2 小时前
GBase 8c分布式数据库客户端工具 gsql
数据库·分布式
用户5611610232732 小时前
量化笔记程序代码分析,逐笔数据、五档快照和分钟行情代码分析
数据库
房开民2 小时前
通俗总结 Octree(八叉树)
java·服务器·数据库
星云低代码开发平台2 小时前
AI 连接器运行健康度:指标、异常恢复和联调清单
大数据·运维·网络·数据库·人工智能·mcp