用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
 评论
  SQLite做服务器不知道能不能抗的住啊,虽然目前并发不大,但是考虑以后的发展恐怕很难用SQLite
回复:嗯,那就还是用MySQL吧

  MySQL里面的列能设置成任意类型么?就是每条纪录某一列的类型是不确定的,有可能是整型,也可能是字符串,也可能是实数。
回复:我不知道有这样的列类型,不过SQLite是你说的这样的。
 发表评论
姓   名: