远程连接docker的mysql容器 解决1251 client does not support authentication protocol 问题

本文详细介绍了如何在Docker环境下启动并配置MySQL容器,包括登录MySQL、修改root用户密码及刷新服务等关键步骤,确保数据库服务稳定运行。
  • 开启mysql容器

    docker exec -it ss_mysql /bin/bash

  • 登录mysql

    mysql -u root -p
    密码enter后,再输入

  • 查看状态(可略过)

    select host,user,plugin,authentication_string from mysql.user;

  • 修改用户

    ALTER USER ‘root’@’%’ IDENTIFIED WITH mysql_native_password BY ‘newpassword’;
    newpassword改为自己的密码

  • 刷新服务 (必须刷新服务,配置才生效)

    flush privileges;

### Docker 中安装 MySQL 遇到的身份验证协议不支持问题解决方案 当在 Docker 中启动 MySQL 并尝试连接时,可能会遇到错误 `1251`,提示客户端版本过低而不支持服务器端使用的身份验证协议。这通常是因为默认情况下 MySQL 使用较新的认证方式 (如 `caching_sha2_password`) 而旧版客户端可能只认识传统的 `mysql_native_password` 认证方法。 对于这个问题的一个常见处理办法是在创建数据库实例的时候通过环境变量指定使用更兼容的身份验证插件: ```bash docker run --name some-mysql \ -p 3306:3306 \ -e MYSQL_ROOT_PASSWORD=root \ -e MYSQL_USER=mysqluser \ -e MYSQL_PASSWORD=mypassword \ -e MYSQL_DATABASE=mydatabase \ --env="MYSQL_ROOT_HOST=%" \ --env="DEFAULT_AUTHENTICATION_PLUGIN=mysql_native_password" \ -d mysql/mysql-server:latest ``` 上述命令中的关键部分是设置了 `DEFAULT_AUTHENTICATION_PLUGIN=mysql_native_password` 来确保新建立的账户会采用更为广泛接受的老式密码加密机制[^1]。 另外,在已经运行着的服务上也可以进入容器内部执行 SQL 命令来更改现有用户的认证方式: ```sql ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'YourNewPassword!'; FLUSH PRIVILEGES; ``` 以上操作可以解决由于不同版本间认证差异带来的连接失败情况,并允许较低版本的应用程序顺利接入由 Docker 托管的新建 MySQL 实例[^2]。 最后需要注意的是,尽管这样做能解决问题,但从安全角度来看推荐尽可能升级应用程序所依赖的所有组件至最新稳定版本以便获得更好的性能以及安全性保障[^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值