> 数据库 > MySQL >

用shell为MySQL新版重置密码

旧版的MySQL安装成功后,root账号是没有密码的,方便但是也带来不安全。从5.6.8版开始(现在的最新版是5.6.20),通过RPM方式安装的MySQL在安装过程中会自动设置一个随机的临时密码。安装过程结束后,通过账号下一个临时文件$HOME/.mysql_secret找到密码。它的内容是这样的:

# The random password set for the root user at xxxxxxxxxxxxxxxx: eQLxneugXwlucXLk

这个密码是临时密码,用它登录后只能做一件事:修改密码。通过MySQL客户端登录后,执行这个命令:

set password=password('123456');

再退出用新密码(123456)重新登录就可以了。

quit;

这样做安全了一点,但是有一个问题,这样安装过程就无法通过SHELL脚本实现自动化了。我想了两个办法:

1 通过mysqladmin命令修改密码,失败提示:Your password has expired. To log in you must change it using a client that supports expired passwords.

看来随机临时密码不能用于mysqladmin

2 通过mysql命令修改密码

echo "set password=password('123456')" | mysql -pzvhhvTKlJLSAdkGP

与mysqladmin命令的错误提示相同。

看来这个限制做的特别严格,我想了一个办法曲线解决问题:

1 停掉MySQL

service mysql stop

2 清空MySQL的数据库目录(如果其中有有用的数据,请自行备份)

\rm -rf /var/lib/mysql/*

3 重新初始化数据库,RPM方式初始化时会自动加上--random-passwords参数,我们这次重新执行不需要任何参数

mysql_install_db

4 为刚生成的文件修改所属用户/组

chown -R mysql:mysql /var/lib/mysql/

5 启动MySQL

service mysql start

6 设置新密码

/usr/bin/mysqladmin password 123456

顺利的话,就已经成功将密码设置为123456了,当然你可以设置的复杂一些。因为以上1-6步都是shell命令,所以可以在新版的MySQL中实现自动化设置密码。设置新密码

/usr/bin/mysqladmin password 123456 (责任编辑:IT)