MySQL在docker-compose中的访问被拒绝

MySQL在docker-compose中的访问被拒绝

在本文中,我们将介绍如何在使用docker-compose启动MySQL时,遇到访问被拒绝的问题以及如何解决它。

阅读更多:MySQL 教程

问题背景

在使用docker-compose启动MySQL时,可能会遇到下面的错误:

Access denied for user 'root'@'localhost' (using password: YES)

这个错误表示MySQL拒绝了用户的访问请求,可能是由于用户名、密码、主机名等信息不正确或没有权限等原因导致的。

问题解决

出现这样错误的原因可能是MySQL的用户权限问题,改进方法如下:

  1. 检查docker-compose.yml文件和相应的.env文件中的MySQL配置信息是否正确。
    services:
     db:
       image: mysql
       container_name: mysql
       environment:
         MYSQL_ROOT_PASSWORD: {MYSQL_ROOT_PASSWORD}
         MYSQL_USER:{MYSQL_USER}
         MYSQL_PASSWORD: {MYSQL_PASSWORD}
         MYSQL_DATABASE:{MYSQL_DATABASE}
       ports:
         - 3306:3306
     ```
    ```env
    MYSQL_ROOT_PASSWORD=123456
    MYSQL_USER=test
    MYSQL_PASSWORD=test1234
    MYSQL_DATABASE=testdb
    

    注意,这里的用户名、密码和数据库名称是我们自己定义的,而不是MySQL默认的root和空密码。

  2. 如果配置文件正确,则进入MySQL的容器中,检查用户列表和权限。

    docker exec -it mysql bash
    mysql -u root -p
    

    输入MySQL的root密码,进入MySQL控制台。

    mysql> use mysql;
    mysql> select user,host,authentication_string from user;
    

    这里可以看到MySQL的用户列表和密码散列值,可以判断是否存在配置文件中指定的用户,并检查密码是否正确。如果不存在,可以使用授权命令添加用户权限。

    mysql> GRANT ALL PRIVILEGES ON testdb.* TO 'test'@'%' IDENTIFIED BY 'test1234';
    mysql> FLUSH PRIVILEGES;
    

    这里指定了用户test可以在所有主机上访问testdb库,密码为test1234, ALL PRIVILEGES表示可以进行所有操作的权限。IDENTIFIED BY指定了密码,FLUSH PRIVILEGES表示重新加载权限表。

  3. 如果权限配置正确,但还是无法访问,可能是防火墙或其他网络问题导致的。

    sudo ufw allow mysql
    

总结

在使用docker-compose启动MySQL时,访问被拒绝可能是由于用户权限配置错误、密码错误、网络问题等原因导致的。我们可以通过检查配置文件、进入MySQL容器,查看用户权限和密码散列值、重新授权、配置防火墙等方法来解决这个问题。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程