Zabbix导入数据报错 解决办法详解 未选择数据库

Zabbix 导入数据报错 “未选择数据库” 解决办法详解

错误现象:导入 Zabbix 初始 schema 时提示 ERROR 1046 (3D000): No database selected 或 Web 安装向导报 “未选择数据库”。 90% 原因:命令行导入时没指定要导入到哪个库;剩下 10% 是数据库不存在、用户权限不对、字符集不匹配。

一、错误原因

Zabbix 安装时需要把官方提供的 SQL 文件导入到你创建的 zabbix 数据库里。常见两种做法:

  1. 命令行导入(CentOS yum 安装后推荐)
  2. Web 安装向导(浏览器点 “下一步” 自动导入)

“未选择数据库” 通常发生在命令行导入,因为你执行了:

mysql -uroot -p < schema.sql      # ❌ 没指定数据库

MySQL 不知道把表建到哪个库里。

二、正确导入步骤(CentOS7 + MySQL/MariaDB)

1. 先创建数据库和账号(如果还没建)

mysql -uroot -p
CREATE DATABASE zabbix CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
CREATE USER 'zabbix'@'localhost' IDENTIFIED BY 'Zabbix@Pass2026';
GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'localhost';
SET GLOBAL log_bin_trust_function_creators = 1;
FLUSH PRIVILEGES;
EXIT;

Zabbix 6.x+ 要求 utf8mb4 + utf8mb4_bin,不能用旧的 utf8。

2. 找到官方 SQL 文件

# 不同版本路径略不同,找一下
rpm -ql zabbix-server-mysql | grep sql
# 常见路径:
# /usr/share/doc/zabbix-server-mysql-5.0.43/create.sql.gz
# /usr/share/doc/zabbix-server-mysql-6.0/schema.sql.gz

5.x 是一个 create.sql.gz;6.x+ 拆成 schema.sql、images.sql、data.sql 三个文件,必须按顺序导入。

3. 正确导入命令(关键!)

Zabbix 5.x(单文件 create.sql.gz)

# ✅ 必须在 mysql 命令里指定数据库名 zabbix
zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix

Zabbix 6.x/7.x(三文件按顺序)

cd /usr/share/doc/zabbix-server-mysql-*
# ✅ 注意末尾的 zabbix 就是数据库名
mysql -uzabbix -p zabbix < schema.sql
mysql -uzabbix -p zabbix < images.sql
mysql -uzabbix -p zabbix < data.sql

如果你用 root 导入也行,但末尾必须写 zabbix:

mysql -uroot -p zabbix < schema.sql

4. 导入后关掉临时参数

SET GLOBAL log_bin_trust_function_creators = 0;

三、验证导入成功

mysql -uzabbix -p zabbix -e "show tables;" | wc -l

Zabbix 6.x 应该有 100+ 张表(5.x 也是上百张)。如果只有几张或 0 张,就是没导成功。

mysql -uzabbix -p zabbix -e "select * from users;"

应该能看到默认的 Admin 用户。

四、Web 安装向导报 “未选择数据库”

如果你是在浏览器 http://服务器IP/zabbix 安装向导第 1 步数据库配置页报错:

  1. Database type:选 MySQL
  2. Database host:localhost(如果 zabbix-server 和数据库同台)
  3. Database port:0(用默认 3306),不要填成 socket
  4. Database name:zabbix
  5. User:zabbix
  6. Password:你创建时设的密码
  7. 点 Next step,如果报 “未选择数据库”:
    • 检查 Database name 是否留空了
    • 检查数据库是否真的存在:show databases;
    • 检查 zabbix 用户对 zabbix 库有权限:show grants for 'zabbix'@'localhost';

五、常见坑与排错

1. ERROR 1046 (3D000): No database selected

就是命令末尾没写数据库名,按上面第二节写法补上。

2. Access denied for user 'zabbix'@'localhost'

  • 密码错
  • zabbix 用户没建对
  • 重新 GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'localhost'; FLUSH PRIVILEGES;

3. Unknown database 'zabbix'

数据库根本没建,回到第一步 CREATE DATABASE。

4. 导入到一半报错 Check that you have required privileges

  • zabbix 用户权限不够,需要 GRANT ALL ON zabbix.*
  • 或改用 root 导入:mysql -uroot -p zabbix < schema.sql

5. 字符集报错 Incorrect string value

  • 数据库建错了字符集。删掉重建:
DROP DATABASE zabbix;
CREATE DATABASE zabbix CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
  • 重新导入。

6. 6.x 导入顺序错了

必须 schema → images → data,不能乱序,否则外键报错。

7. 导入太慢 / 卡住

  • MySQL 配置 innodb_flush_log_at_trx_commit=2 临时加速;
  • 或导入完再改回 1。

8. PostgreSQL 版本

# PostgreSQL 导入(注意切换到 zabbix 用户)
sudo -u zabbix psql -d zabbix -f /usr/share/doc/zabbix-server-pgsql*/schema.sql
sudo -u zabbix psql -d zabbix -f /usr/share/doc/zabbix-server-pgsql*/images.sql
sudo -u zabbix psql -d zabbix -f /usr/share/doc/zabbix-server-pgsql*/data.sql

六、导入后配置 zabbix_server

编辑 /etc/zabbix/zabbix_server.conf:

DBName=zabbix
DBUser=zabbix
DBPassword=Zabbix@Pass2026
# 如果 socket 方式
# DBSocket=/var/lib/mysql/mysql.sock
# 如果远程数据库
# DBHost=192.168.1.10
# DBPort=3306

重启:

systemctl restart zabbix-server
systemctl status zabbix-server
tail -f /var/log/zabbix/zabbix_server.log

日志里不应再有 database errors 或 no database selected。

七、验证整套流程

  1. 浏览器打开 http://服务器IP/zabbix
  2. 默认账号:Admin / zabbix(注意 A 大写)
  3. 左下角改成中文:User settings → Language → Chinese (zh_CN)

八、一句话总结

导入命令末尾必须显式写数据库名:

mysql -uzabbix -p zabbix < schema.sql
#                 ^^^^^^ 这就是"选择数据库"

少了这个 zabbix,MySQL 就报 “未选择数据库”。

© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享
评论 抢沙发
头像-次元社
欢迎您留下宝贵的见解!
提交
头像-次元社

昵称

取消
昵称表情代码图片快捷回复

    暂无评论内容