docker-compose.yml 中设置了 mysql 的 root 密码未生效

docker-compose.yml 中设置了 mysql 的 root 密码未生效

问题

使用docker-compose创建mysql服务器时,docker-compose.yml配置如下:

version: '3.0'
services:
    mysql:
        restart: always
        image: mysql:5.7.23
        container_name: mysql
        ports:
          - 3306:3306
        environment:
          TZ: Asia/Shanghai
          MYSQL_ROOT_PASSWORD: rootpwd
          MYSQL_USER: user
          MYSQL_PASS: userpwd
        command:
          --character-set-server=utf8mb4
          --collation-server=utf8mb4_general_ci
          --explicit_defaults_for_timestamp=true
          --lower_case_table_names=1
          --max_allowed_packet=128M
          --sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO"
        volumes:
          - /home/mysql/data:/var/lib/mysql
          - /home/mysql/conf/my.cnf:/etc/my.cnf:ro
          - /home/mysql/init:/docker-entrypoint-initdb.d/

在相应目录下运行

docker-compose up -d

再进入容器内部

docker exec -it mysql /bin/bash

尝试登陆mysql

[root@i ~]# mysql
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO) 

发现并不能登陆mysql,出现的问题在于docker-compose中的密码设置无效,导致用户无法登陆。

解决方案

1、修改my.cnf 文件,在[mysqld]下添加

skip-grant-tables

2、进入容器内部登陆mysql

[root@i ~]# docker exec -it mysql /bin/bash

3、登陆mysql

[root@/ ~]# mysql
mysql>

4、修改root用户密码

mysql>update  mysql.user  set  authentication_string=password('xxxx')  where user='root';

注:mysql 4.6版本以上的mysql服务器password改为authentication_string;所以用‘update mysql.user set password=password(‘xxxx’) where user=‘root’;’无法修改用户密码,切记!!!!!!!!
5、退出登陆,并删除my.cnf文件中的‘skip-grant-tables’
6、重启mysql

docker restart mysql

7、重新登陆,登陆成功!

mysql 4.6版本以上的mysql服务器password改为authentication_string;所以用‘update mysql.user set password=password(‘xxxx’) where user=‘root’;’无法修改用户密码,切记!!!!!!!!
提醒下用户user的密码设置也无效,请重新设置!!

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: 编写 MySQLDocker Compose 文件 (docker-compose.yml) 可以实现在 Docker 环境快速部署和管理 MySQL 数据库。以下是一个示例的 docker-compose.yml 文件: ```yaml version: '3.8' services: mysql: image: mysql:latest restart: always environment: MYSQL_ROOT_PASSWORD: mysecretpassword MYSQL_DATABASE: mydatabase MYSQL_USER: myuser MYSQL_PASSWORD: mypassword volumes: - ./data:/var/lib/mysql ports: - 3306:3306 ``` 在这个示例,我们定义了一个名为 `mysql` 的服务,使用了最新版本的 MySQL 镜像。`restart: always` 命令可以确保 MySQL 容器在停止后自动重新启动。 通过 `environment` 部分,我们可以设置 MySQL 的一些环境变量,如 `MYSQL_ROOT_PASSWORD`、`MYSQL_DATABASE`、`MYSQL_USER` 和 `MYSQL_PASSWORD`。这些环境变量用来设置 MySQL 的根密码、创建的数据库、新用户的用户名和密码。 `volumes` 部分指定了宿主机和容器之间的数据卷映射。在这个示例,我们将宿主机的 `./data` 文件夹映射到容器内的 `/var/lib/mysql` 目录,以保持数据的持久化。 通过 `ports` 部分,我们将容器内的 3306 端口映射到宿主机的 3306 端口,可以通过宿主机的 IP 地址和端口号来访问 MySQL 数据库。 在终端,进入包含 docker-compose.yml 文件的目录,执行以下命令即可启动 MySQL 服务: ``` docker-compose up -d ``` 这样,MySQL 容器将在后台运行,并通过定义的端口对外提供服务。可以使用其他 MySQL 客户端工具连接到数据库。如果需要停止 MySQL 服务,可以运行以下命令: ``` docker-compose down ``` 以上就是一个基本的 MySQL Docker Compose 文件的编写和使用方法。根据实际需求,可以进行适当的修改和扩展。 ### 回答2: MySQL是一个流行的关系型数据库管理系统,而Docker Compose是一个工具,它可以通过YAML文件来定义和管理多个Docker容器,使得应用程序的部署和管理更加简便和可重复。 当我们需要部署MySQL数据库时,可以使用Docker Compose来编写一个docker-compose.yml文件,以下是一个示例: version: '3' services: db: image: mysql container_name: mysql_db restart: always environment: MYSQL_ROOT_PASSWORD: mysecretpassword MYSQL_DATABASE: mydatabase MYSQL_USER: myuser MYSQL_PASSWORD: mypassword ports: - 3306:3306 volumes: - ./data:/var/lib/mysql 在这个示例,我们定义了一个名为db的服务,其基于MySQL镜像创建容器。我们指定了容器的重启策略为always,表示容器在停止后会自动重启。使用environment字段,我们设置MySQLroot密码、数据库名称、用户名和密码等环境变量。通过ports字段,我们将容器内部的3306端口映射到宿主机的3306端口,以便在宿主机上访问MySQL服务。使用volumes字段,我们将MySQL数据目录挂载到宿主机的./data目录,以便数据的持久化存储。 通过编写这个docker-compose.yml文件,我们可以使用docker-compose命令快速启动和管理MySQL数据库容器,如下所示: $ docker-compose up -d 这样,MySQL容器将在后台运行,并根据我们在docker-compose.yml文件定义的配置进行初始化和配置。我们可以通过连接到localhost:3306来访问MySQL数据库,并使用我们在docker-compose.yml文件设置的用户名和密码进行身份验证。 整体而言,通过MySQLdocker-compose.yml文件编写,我们能够快速地部署和管理MySQL数据库容器,提高了开发和部署过程的效率和可重复性。 ### 回答3: MySQL是一个非常流行的开源关系型数据库管理系统,而Docker Compose是一种能够简化应用程序容器化部署的工具。 编写一个MySQLdocker-compose.yml文件通常需要以下几个步骤: 1. 首先,我们需要指定MySQL容器的版本。可以通过添加版本号来实现,如:version: '3'。 2. 接下来,我们需要定义服务。在这个例子,我们只定义一个MySQL服务。可以通过添加services: mysql来实现。 3. 在MySQL服务下,我们需要指定镜像。可以通过添加image: mysql来实现。 4. 然后,我们需要指定MySQL的环境变量。可以通过添加environment来实现。这些环境变量包括:MYSQL_ROOT_PASSWORD(MySQL的根密码)、MYSQL_DATABASE(要创建的数据库名称)和MYSQL_USER(要创建的用户名)等。 5. 另外,我们可以使用volumes选项将本地的目录挂载到MySQL容器,以便于持久化数据。 综上所述,一个基本的MySQLdocker-compose.yml文件可以如下所示: version: '3' services: mysql: image: mysql environment: - MYSQL_ROOT_PASSWORD=123456 - MYSQL_DATABASE=mydb - MYSQL_USER=myuser volumes: - ./data:/var/lib/mysql 这个docker-compose.yml文件定义了一个名为mysql的服务,它使用MySQL的官方镜像,并指定了根密码为123456、创建的数据库名为mydb、用户名为myuser。同时,将当前目录下的data目录映射到MySQL容器的/var/lib/mysql目录,以进行数据持久化。 通过这样的docker-compose.yml文件,我们可以使用Docker Compose轻松部署和管理MySQL容器。只需要在终端进入到该文件所在的目录,然后运行docker-compose up命令即可启动MySQL容器。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值