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
相关推荐
weelinking1 小时前
【产品】10_搭建前端框架——把你的原型变成真实页面
java·大数据·前端·数据库·人工智能·python·前端框架
一 乐1 小时前
图书电子商务网站系统|基于SprinBoot+vue图书电子商务网站设计与实现(源码+数据库+文档)
java·前端·数据库·vue.js·论文·毕设·图书电子商务网站系统
●VON10 小时前
鸿蒙Flutter实战:分类管理页BottomSheet CRUD
数据库·flutter·华为·harmonyos·鸿蒙
Cosolar10 小时前
Chroma向量库面试学习指南
数据库·人工智能·面试·职场和发展·数据库架构
企服AI产品测评局11 小时前
Agent适配信创环境实测:企业级自动化如何实现国产操作系统与数据库全兼容?
运维·数据库·人工智能·ai·chatgpt·自动化
cfm_291411 小时前
Redis数据安全性解析
数据库·redis·缓存
DIY源码阁11 小时前
JavaSwing学生成绩管理系统 - MySQL版
java·数据库·mysql·eclipse
NiceCloud喜云13 小时前
Claude Code Routines 实战:三种触发器跑通云端自动化编码
android·运维·数据库·人工智能·自动化·json·飞书
辞忧九千七13 小时前
Redis 单机一主二从主从复制完整搭建指南
数据库·redis·缓存