红联Linux门户
Linux帮助

一次误删mysql用户造成的困扰

发布时间:2016-03-19 10:52:31来源:linux网站作者:我要看到妳幸福to金莎

记得之前安装mysq的时候,在网上看得一篇教程,那时候useradd了一个其实可以不要设定的用户,昨天在将root用户的密码改了之后(之前我是没改的,因为ubuntu的原先root密码是每次开机都随机生成的,而且我也从来没在sudo -i之后我的控制台下更改过root的passwd,因为之前没遇到权限问题没在意过,直到上一篇文章中提到的没有权限访问)。我就想把这个多余的用户mysql给删除了。


这里不知道为什么,还只能在root直接登陆的shell中(就是用root账号密码登陆系统时候,而不是普通用户转到root用户)删除。于是潇洒地userdel  -f  mysql,-f是将所有和mysql用户相关的东西全部都删除。于是这个碍眼的用户从我的系统中消失了。(有强迫症的我暗暗爽了一把)

之后没啥不一样的,但是问题出在我要加入mysql的时候。我输入mysql  -h127.0.0.1  -uroot  -p,输入密码。这时候提示我
ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ (2),咋办呢?老办法,查呗。网上的回答到是很多,但是很多都是同一篇。看了挺久的,一开始找上面提示的那个/var/lib/mysql/mysql.sock文件,然而并没有找到,回头才知道这个文件是mysql启动成功之后才会产生,mysql关闭之后就会自动删除。于是把这个文件出错排除了。


中间的过程略过吧,找了有快一个小时,大概应该是怎么回事了。当时我安装mysql时,自己手动创建了一个拥有mysql数据库权限的用户(就是我之前任性删掉的那一个),删掉之后呢,当前用户没有了对mysql数据库的操作权限了,也就是没有可用的用户其启动mysql-server进程了。你可以键入service  mysql  status,查看mysql的状态,我这里一直都是显示stop/waitting,停止等待。跟着输入ps  -ef | grep mysql | grep  -v  grep,我这里是不存在正在运行中的mysql进程的。这时候,发现了原因,就开始修改了。


按照网上的说法,我先查看了  /var/log/mysql/error.log  日志文件(我这版本是14.04  LTS,其他版本的ubuntu可能放在不同的地方,但是一般都差不多的目录下,可以使用locate找到)然后找到下面的信息:

一次误删mysql用户造成的困扰

可以看到,在我输入service  mysql  start之后,出现了错误,就是无法找到user  ‘mysql’,因为这个用户被我删除了。这时候我就算重新再useradd一个mysql也不行,因为没有给他赋之前在安装mysql的时候赋的权限了,也就是说,我只能在原有用户上面改权限,例如:将mysql的执行权限赋给root用户。

接着,我开始修改mysql的配置文件vi  /etc/mysql/my.cnf ,在里面修改了这么一行:

一次误删mysql用户造成的困扰

把原先的mysql换成了root。这时候我们再启动mysql,还是提示错误,这是再看error.log,看看到底是哪里出了错误。

一次误删mysql用户造成的困扰

可以看到,从上面开始都是正常的,一直到配置完了InnoDB,红线指到的那个地方,the  error  meants  mysqld does  not have....就是说没有下面这个文件的所有权(依旧是权限问题),下面就是将提示的文件的所有权给root。


将ibdata1的权限赋给root,chown  -R root  /var/lib/mysql/ibdata1,将这个ibdata1的所有者身份也给root(也可以将整个目录所有者身份赋给root:chown -R root  /var/lib/mysql)
之后执行service  mysql  restart,这时候你会发现mysql终于能重新启动了。

这时候,我们兴高采烈地想要进入mysql,mysql  -h127.0.0.1 -uroot  -p,输完密码,有出来这么个东西:
Access denied for user 'hong'@'localhost' (using password: YES)。这是个啥错误呢?其实就是你在数据库中没有对应的字段,不允许你进入它(其实原有的就是刚才删掉的mysql这个用户)。这时候我们应该怎么解决它呢?


在网上找到了一位朋友的文章,很快解决了这个问题。
1.vi  /etc/mysql/my.cnf   ,在其中任意一行加入一句: skip-grant-tables,保存退出。这句是告诉mysql不要去验证里面的user表。
2.现在直接就能进入mysql,不用输密码。输入:
update user set password=PASSWORD("helloworld") where user='root';
3.之后退出,将之前添加的  skip-grant-tables注释掉或者删除。保存关闭。
这时候你重启mysql,输入mysql  -uroot  -phelloworld  ,还是熟悉的界面,苦尽甘来。


总结:linux下的东西还是不要随便乱删,自己的电脑上可以试试,但是如果是在公司,或者别人的电脑,没绝对把握,不要随便操作。


本文永久更新地址:http://www.linuxdiyf.com/linux/19068.html