◆

MySQL root 密码修改命令

2024-06-27 08:250

改 root 密码有两条路:一条是登进 MySQL 客户端执行 ALTER USER 语句,另一条是用 mysqladmin 这个命令行工具在 shell 里直接改。这篇记的是后者。

mysqladmin 是 MySQL 自带的管理工具,专门用来在不进入交互式客户端的情况下做一些管理操作,比如改密码、查看服务状态、刷新权限表、关闭服务。它的好处是能直接写在脚本里,适合放进初始化流程或者自动化部署里跑。

前提条件是知道当前的密码。这个命令走的是正常的认证流程,只是换个界面改密码,密码彻底忘了的话它帮不上,那种情况得用跳过授权表的方式启动服务再重置,风险和步骤都完全不同。

命令如下

NEW_PASSWORD 为你要修改的新密码

mysqladmin -u root -p password NEW_PASSWORD

参数解释一下,这条命令的写法有点绕,容易看错。

-u root 指定操作的用户。-p 表示需要密码认证,注意它后面故意不跟值——这样执行后会交互式地提示输入当前密码,输入时不回显。这是推荐的写法,因为密码不会出现在命令里,也就不会被记进 shell 的历史文件,同一台机器上的其他用户也无法通过进程列表看到。如果写成 -p当前密码 紧贴在一起,密码就明文暴露在历史记录和进程列表里了。

后面那个 password 不是参数而是子命令,意思是「执行改密码这个操作」,它后面跟的才是新密码。所以这条命令里出现的两个跟密码相关的东西是不同层级的:-p 是认证用的旧密码,password NEW_PASSWORD 是要设置的新密码。第一次看这条命令,很容易误以为 -p 后面该接新密码。

新密码里如果包含空格或者 $、!、& 这类 shell 会解释的特殊字符,需要用单引号包起来,否则 shell 会先做变量替换或者命令分割,实际设置的密码跟你想的不一样,之后就登不进去了。这个坑挺常见,用单引号而不是双引号,因为双引号里 $ 仍然会被展开。

新密码同样会留在 shell 历史里,介意的话可以改用交互式的方式:只写 mysqladmin -u root -p password,不给新密码,它会提示输入两遍新密码,全程不回显。

还有一点,如果服务器启用了密码强度策略,新密码不满足复杂度要求会被拒绝,报错信息会说明具体不满足哪一条。

💬留言板0

还没有留言,来发表第一条吧~

PAGE LOAD / LIVEMySQL root 密码修改命令加载中