#进入容器:env LANG=C.UTF-8 避免容器中显示中文乱码
docker exec -it atguigu-mysql-master env LANG=C.UTF-8 /bin/bash
#进入容器内的mysql命令行
mysql -uroot -p
#修改默认密码校验方式
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
这段命令序列用于进入一个运行中的 Docker 容器,并在其中执行一些 MySQL 相关的操作。下面是每个步骤的详细解释:
进入容器并设置语言环境
# 进入容器:env LANG=C.UTF-8 避免容器中显示中文乱码
docker exec -it atguigu-mysql-master env LANG=C.UTF-8 /bin/bash
docker exec
: 这个命令用于在已运行的容器内执行命令。-it
:-i
表示使容器的标准输入保持打开状态;-t
表示为容器分配一个伪TTY。atguigu-mysql-master
: 这是你要进入的容器的名字或者ID。env LANG=C.UTF-8
: 这个命令设置环境变量LANG
为C.UTF-8
。这会告诉容器内的程序使用 UTF-8 编码,这样可以避免在容器内显示中文时出现乱码问题。/bin/bash
: 这是在容器内启动的命令,即打开一个 Bash shell。
进入 MySQL 命令行
# 进入容器内的mysql命令行
mysql -uroot -p
mysql
: 这是 MySQL 的客户端命令,用于连接 MySQL 服务器。-u root
: 指定以root
用户身份登录。-p
: 提示输入密码。这会在终端中提示用户输入密码。
修改默认密码校验方式
# 修改默认密码校验方式
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
ALTER USER
: 用于修改用户的属性。'root'@'%'
: 指定要修改的用户。这里的%
表示允许root
用户从任意主机登录。IDENTIFIED WITH mysql_native_password BY '123456'
: 这里设置了root
用户的身份验证方式为mysql_native_password
并设置密码为'123456'
。
总结
这段命令序列首先通过 docker exec
进入名为 atguigu-mysql-master
的容器,并设置环境变量 LANG
为 C.UTF-8
以避免中文乱码问题。接着,通过 mysql
命令以 root
用户身份登录到 MySQL 服务器。最后,使用 ALTER USER
命令修改 root
用户的密码,并指定使用 mysql_native_password
身份验证插件。
关于mysql_native_password
mysql_native_password
是 MySQL 中的一种身份验证插件,用于处理用户登录时的密码验证。它是 MySQL 最常用的身份验证方法之一,并且在大多数 MySQL 版本中默认启用。
插件概述
-
mysql_native_password
是 MySQL 5.6 和更高版本中默认的身份验证插件。它使用 SHA-1 散列算法来存储加密后的密码,并在用户登录时验证密码是否正确。 -
插件工作原理:
- 当用户设置密码时,MySQL 会使用 SHA-1 算法对密码进行散列,并将散列后的结果存储在
mysql.user
表中。 - 当用户尝试登录时,MySQL 会对提供的密码再次使用相同的散列算法,并将结果与存储在
mysql.user
表中的散列值进行比较,以验证密码是否正确。
- 当用户设置密码时,MySQL 会使用 SHA-1 算法对密码进行散列,并将散列后的结果存储在
使用示例
如果你想修改某个用户的密码验证方式为 mysql_native_password
,你可以使用以下 SQL 命令:
ALTER USER 'username'@'hostname' IDENTIFIED WITH mysql_native_password BY 'new_password';
这里:
'username'
是你要修改的用户名。'hostname'
指定用户可以从哪个主机登录。通常使用'localhost'
表示本地登录,'%'
表示允许从任何主机登录。'new_password'
是新的密码。
注意事项
-
安全性:
- 使用
mysql_native_password
插件时,虽然密码是以散列形式存储的,但 SHA-1 散列算法现在被认为不是最安全的选择。在 MySQL 8.0 中,引入了更强的身份验证插件caching_sha2_password
,它使用更安全的 SHA-2 散列算法。
- 使用
-
兼容性:
- 如果你需要与旧版 MySQL 兼容,或者你正在使用不支持新插件的应用程序,那么
mysql_native_password
可能是一个合适的选择。
- 如果你需要与旧版 MySQL 兼容,或者你正在使用不支持新插件的应用程序,那么
示例命令
假设你想要修改 root
用户的密码验证方式为 mysql_native_password
并设置密码为 '123456'
,可以使用如下命令:
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
请注意,设置简单密码如 '123456'
在生产环境中是不安全的。在实际应用中,你应该使用更复杂、更安全的密码。
总结
mysql_native_password
是 MySQL 中的一种身份验证插件,用于处理密码的散列和验证。它使用 SHA-1 散列算法,是 MySQL 5.6 及更高版本中的默认身份验证插件。尽管它在某些情况下仍然有用,但对于最新的 MySQL 版本来说,推荐使用更安全的 caching_sha2_password
插件。