【问题标题】:mysqld: dial tcp 127.0.0.1:3306: connect: connection refusedmysqld:拨打 tcp 127.0.0.1:3306:连接:连接被拒绝
【发布时间】:2019-12-12 05:23:37
【问题描述】:

我正在尝试使用 prom/mysqld-exporterprom/prometheusmysql 进行 dockerize 监控。我已经配置了 docker-compose.yml 文件,如下所示:

version: '3'

services:
  mysql:
    image: mysql
    container_name: mysql
    restart: always
    volumes: 
      - mysql:/var/lib/mysql

    # command: 
    #   - CREATE USER 'root'@'localhost' IDENTIFIED BY 'password' WITH MAX_USER_CONNECTIONS 3;
    #   - GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'root'@'localhost';
    environment: 
      - MYSQL_ROOT_PASSWORD= password
      - MYSQL_DATABASE= db #Defining a new Database
      - MYSQL_USER= mostafa
      - MYSQL_PASSWORD= ghadimi
    ports: 
      - 3306:3306
      - 33060:33060

  prometheus:
    image: prom/prometheus
    container_name: prometheus
    ports:
      - 9090:9090
    volumes:
      - prometheus:/prometheus
      - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
    command: 
      - --config.file=/etc/prometheus/prometheus.yml

  mysql-exporter:
    image: prom/mysqld-exporter
    container_name: mysql-exporter
    ports:
      - 9104:9104
    volumes:
      - ./mysql-exporter/.my.cnf:/root/.my.cnf
    depends_on: 
      - mysql

volumes:
  mysql:
  prometheus:

这是我的 ./mysql-exporter/.my.cnf 文件:

[client]
user=mostafa
password=ghadimi

运行docker-compose up命令后,一切正常,除了以下错误!:

mysqld:拨号 tcp 127.0.0.1:3306:连接:连接被拒绝

我不知道如何解决它!

PS:我也尝试通过它的容器和docker exec -it <container-id> bash 命令连接到mysql,并且我尝试了所有可能的密码(比如空字符串和我在docker-compose中设置的密码)文件),但我面临另一个错误:

ERROR 1045 (28000): 拒绝用户 'root'@'localhost' 访问(使用密码:YES)

【问题讨论】:

  • 哪个容器引发了这个错误?
  • @michalk prom/mysqld-exporter

标签: mysql docker monitoring prometheus


【解决方案1】:

Mysql-d 导出器正在localhost 上寻找 mysql 实例,但它没有在 mysqld 容器内的 localhost 上运行。您必须将外部连接字符串与mysql 的主机一起传递,因为这是 docker-compose 中 mysql 服务的名称。从mysqld-exporter docs - 您必须使用此数据源连接字符串将环境变量传递给 mysqld-exporter 容器:

mysql-exporter:
    image: prom/mysqld-exporter
    container_name: mysql-exporter
    ports:
      - 9104:9104
    volumes:
      - ./mysql-exporter/.my.cnf:/root/.my.cnf
    environment:
      - DATA_SOURCE_NAME="user:password@mysql:3306/database"
    depends_on: 
      - mysql

并将用户、密码和数据库名称更改为您想要的。

【讨论】: