Grafana MySQL数据源未使用指定密码,数据库连接失败
解决方案
1. 修复secureJsonData的密码加密问题
Grafana的secureJsonData字段要求密码为加密后的字符串,明文写入会被忽略,这是导致密码未传递、出现using password: NO的核心原因。执行以下步骤处理:
- 进入Grafana容器:
docker exec -it <你的Grafana容器名/ID> /bin/bash - 用grafana-cli加密密码:
grafana-cli secrets encrypt "你的数据库密码" - 复制输出的加密字符串,替换配置文件中
secureJsonData.password的明文内容。
2. 规范YAML配置格式
确保配置缩进严格符合YAML规范(建议用2个空格缩进),同时注意字段名的大小写:Grafana provisioning配置中标准连接地址字段为小写url,而非大写URL。正确配置示例:
- name: MySQL type: mysql url: <my_host>:3306 database: csc648 user: <user> isDefault: false secureJsonData: password: "加密后的密码字符串" jsonData: maxOpenConns: 0 maxIdleConns: 2 connMaxLifetime: 14400
3. 临时明文调试(仅限非生产环境)
若需快速验证是否为加密问题,可暂时将密码移至jsonData中(明文存储,生产环境禁用):
jsonData: password: "你的数据库密码" maxOpenConns: 0 maxIdleConns: 2 connMaxLifetime: 14400
移除原secureJsonData块后,重启Grafana测试连接。
4. 确认MySQL用户权限的主机匹配
执行MySQL查询,检查用户的主机授权条目:
SELECT user, host FROM mysql.user WHERE user='<user>';
确保存在'<user>'@'%'的条目,且无其他更严格的主机条目(如'<user>'@'localhost')导致权限匹配冲突。若有冲突,可删除多余条目或重新授权。
5. 检查Docker挂载的配置文件权限
若通过本地文件挂载到容器/etc/grafana/provisioning/datasources/路径,需确保文件权限为644,保证Grafana进程(用户grafana)可读取:
chmod 644 /本地路径/你的数据源配置.yaml
重启Grafana容器生效。
内容的提问来源于stack exchange,提问作者Vasek - Tom C.
相关产品推荐
相关产品推荐

