Ubuntu安装MySQL无法设置密码的处理一例

2015-01-09 • 技术文章评论

同学买了个VPS,自己装不上MySQL,遂请我帮忙。

简单地使用apt-get install来安装,在设置密码时终端返回信息fopen: Permission denied,很显然是权限问题。查看/var/log/mysql/error.log,发现ERROR: 1005 Can't create table 'tmp_db' (errno: 13)这个错误,具体定位到/usr/sbin/mysqld: Can't create/write to file '/tmp/iblrF3x1' (Errcode: 13)。也就是说,可以确定mysqld的进程无法对/tmp目录进行读写,再进一步说就是mysql用户无法对/tmp进行读写,遂授予权限。

再重新安装,安装没有再提示无法设置密码,但是在终端用root登录时提示ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES),使用/etc/mysql/debian.cnf中提供的用户名和密码进行登录,查看mysql数据库的user表,发现根本没有root这个用户。这时我们或许可以insert一个root进去,但是这样是否会带来其它的问题不得而知。怀疑是起初设置密码失败遗留的原有data目录下的数据库造成的,遂彻底删除mysql所有的数据和配置再重新安装。重新安装后,root终于出现了,设置密码也可以登录了。

由于这个VPS的是暴露在公网上的,有两个独立IP,之前尝试性处理时直接用了root作为root的密码,我们可以登录后,修改mysql库user表中的root密码即可:UPDATE user SET password=PASSWORD('新密码') WHERE user='root'; FLUSH PRIVILEGES;,退出然后重新登录就行了。

以上是已知密码的情况,假如我们忘了MySQL的密码又该怎么办呢?没错,上面提到了debian.cnf这个文件中有一个预设用户可以利用,但对更广谱的操作系统而言,假如没有这个用户怎么办?执行service mysql stop停掉服务,然后设定跳过检查mysqld_safe --user=mysql --skip-grant-tables --skip-networking &,登录并使用mysql库:mysql -u root mysql,后面同上面的UPDATE和FLUSH后重启mysql服务即可。