Docker-Compose部署下,Telegraf连接MySQL的[inputs.sql]DSN配置及故障修复
解决Telegraf连接Docker部署的MySQL时的连接拒绝问题
用Docker服务名替代静态IP
你使用的192.168.48.5是容器动态IP,重启后可能变化,且在docker-compose默认网络中,直接用MySQL的服务名(即docker-compose.yml里MySQL服务的名称,通常为mysql)作为地址更可靠。修正后的DSN示例:your_username:your_password@tcp(mysql)/your_db?parseTime=true注意
parseTime=true是MySQL Go驱动必需参数,不可省略。确认Docker网络互通性
三个服务通过docker-compose部署时默认会加入同一个自定义网络,先验证Telegraf容器能否访问MySQL服务:# 进入Telegraf容器 docker-compose exec telegraf sh # 测试连接 telnet mysql 3306若能连通说明网络正常;若不通,检查docker-compose.yml是否为所有服务配置了同一网络(如果手动指定了网络)。
检查MySQL容器状态与配置
- 查看MySQL是否正常启动:
查找日志中的docker-compose logs mysqlready for connections字样,确认服务运行正常。 - 确认MySQL的环境变量(如
MYSQL_USER、MYSQL_PASSWORD、MYSQL_DATABASE)与Telegraf DSN里的用户名、密码、库名完全一致。
- 查看MySQL是否正常启动:
验证MySQL用户权限
确保你的MySQL用户允许从Docker网络内任意地址访问,默认新建用户可能仅允许localhost登录。进入MySQL容器执行授权:docker-compose exec mysql mysql -u root -p # 替换占位符后执行授权命令 GRANT ALL PRIVILEGES ON your_db.* TO 'your_username'@'%'; FLUSH PRIVILEGES;
内容的提问来源于stack exchange,提问作者xmh
相关产品推荐
相关产品推荐

