一次docker登录mysql报错问题的实战记录

下面我将为你详细讲解一次docker登录mysql报错问题的实战记录的完整攻略。

问题描述

在使用 docker 运行 mysql 时,执行docker exec -it mysql bash进入mysql容器内后使用mysql -uroot -p命令登录 mysql 数据库时,报错如下:

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

解决方案

方案1:使用默认密码登录

在我本地运行 mysql 时,它使用了默认的密码,所以我可以使用mysql -uroot -p命令登录。但是,在使用docker运行mysql时,密码可能会在环境变量中明文传递或者被挂载在宿主机上。因此,需要从环境变量或者宿主机文件中查找密码再进行登录。

在本次问题中,因为我们使用了环境变量MYSQL_ROOT_PASSWORD指定了密码,所以我们只需要在运行 mysql 容器时使用echo $MYSQL_ROOT_PASSWORD命令查找密码,然后使用mysql -uroot -p<password>命令登录即可。

示例命令如下:

docker run --name mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql
docker exec -it mysql bash
mysql -uroot -p123456

方案2:修改 MySQL 用户权限

在mysql中,'root'@'localhost'用户的权限很有可能不够,特别是在使用docker运行mysql时。因此,可以通过修改'root'@'localhost'的用户权限来解决问题。

具体的做法是,在容器中执行以下命令:

mysql -uroot -p

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;
FLUSH PRIVILEGES;

这样就可以解决登录问题了。

示例命令如下:

docker run --name mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql
docker exec -it mysql bash
mysql -uroot -p123456

然后进入mysql命令行后执行以下命令:

-- 授予远程连接用户全部权限
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;

-- 授予本机登录用户全部权限
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;

-- 刷新权限
FLUSH PRIVILEGES;

总结

本文介绍了两种解决 docker 登录 mysql 报错问题的解决方案,分别是通过查找默认密码以及修改 MySQL 用户权限。希望本文对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:一次docker登录mysql报错问题的实战记录 - Python技术站

(0)
上一篇 2023年5月18日
下一篇 2023年5月18日

相关文章

  • MySQL常见内存不足启动失败的完美解决方法

    MySQL常见内存不足启动失败的完美解决方法 MySQL启动时,如果出现内存不足的错误,导致无法启动,这是一个常见的问题。以下是几种解决方法。 1. 修改MySQL配置文件 在MySQL的配置文件my.cnf中,可以修改一些参数,以减少内存占用。具体可以修改以下参数: key_buffer_size = 32M thread_cache_size = 4 m…

    MySQL 2023年5月18日
    00
  • mysql 索引过长1071-max key length is 767 byte

      原因 数据库表采用utf8编码,其中varchar(255)的column进行了唯一键索引 而mysql默认情况下单个列的索引不能超过767位(不同版本可能存在差异)   于是utf8字符编码下,255*3 byte 超过限制   解决 1  使用innodb引擎; 2  启用innodb_large_prefix选项,将约束项扩展至3072byte; …

    MySQL 2023年4月12日
    00
  • MySQL存储过程相互调用并获得错误码示例

    MySQL存储过程相互调用并获得错误码需要以下步骤: 步骤一、创建存储过程 在MySQL中创建好要相互调用的存储过程。下面示例中,创建一个名为proc1的存储过程: DELIMITER // CREATE PROCEDURE proc1() BEGIN DECLARE exit handler for sqlexception BEGIN GET DIAGN…

    MySQL 2023年5月18日
    00
  • MySQL延迟问题和数据刷盘策略流程分析

    MySQL延迟问题和数据刷盘策略流程分析 MySQL是一款常用的关系型数据库管理系统,但是在使用过程中,有可能会出现延迟问题和数据刷盘策略不当的情况。本文将从延迟问题和数据刷盘策略流程分析两个方面进行详细讲解,并附带两个示例说明。 延迟问题 MySQL在使用过程中,可能会出现延迟问题,表现为读取数据或执行SQL语句的响应时间过长。 延迟问题的产生可能是因为M…

    MySQL 2023年5月19日
    00
  • MySql执行流程与生命周期详解

    MySql执行流程与生命周期详解 MySql执行流程 MySql执行流程主要包括连接、查询分析、查询执行、结果返回四个阶段。 连接 首先客户端和服务器建立连接,客户端向服务器发送连接请求,服务器通过端口接收连接请求,建立连接之后可以开始数据传输。 查询分析 连接建立完成后,客户端发送SQL语句给服务器。服务器首先进行语法分析,将SQL语句转成内部的语法树,然…

    MySQL 2023年5月19日
    00
  • mysql服务无法启动报错误1067解决方法(mysql启动错误1067 )

    下面是关于“mysql服务无法启动报错误1067解决方法”的攻略。 问题描述 有时,我们在启动MySQL服务时可能会遇到“mysql启动错误1067”的问题。错误信息可能类似于:“错误1067:服务无法启动”。这个错误通常是因为MySQL无法访问或读取数据文件导致的。接下来我们讲解一些解决方法。 解决方法一:检查my.ini文件 首先,我们需要检查MySQL…

    MySQL 2023年5月18日
    00
  • MySQL的prepare使用及遇到bug解析过程

    下面我来详细讲解MySQL的prepare使用及遇到bug解析过程的攻略。 一、什么是MySQL的prepare 在MySQL中,prepare是用来预处理SQL语句的命令。使用prepare可以将一个SQL语句提交到MySQL服务器,同时告诉MySQL服务器将要传入的参数类型,这样就可以避免SQL注入攻击,同时也可以提高SQL语句的执行效率。 二、如何使用…

    MySQL 2023年5月18日
    00
  • 使用Limit参数优化MySQL查询的方法

    使用Limit参数可以在MySQL查询时控制返回的数据行数,从而优化查询效率。下面是使用Limit参数优化MySQL查询的完整攻略: 1. 什么是Limit参数 在使用SELECT语句查询数据库时,我们可以在语句的末尾使用Limit参数来限制返回的数据行数。Limit参数有两个值:第一个值指定要返回的行数(相对于结果集的第一行),第二个值可选,指定了结果集的…

    MySQL 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部