MariaDB 数据库中的 user 表误删了怎么办

Linux Aug 28, 2015

总觉得学东西的来源多半是瞎折腾出来的????

迁移数据库的时候,有一个时刻需要看 mysql 表中的一些数据,所以命令行的窗口下输入了一个 use mysql,然后就悲剧了,我要导入的数据刚好有 user 这个表,而且我的导出还非常智能的加了一句 DROP TABLE IF EXISTS user; 天了噜!!! what the fuck!!!!

然后就完了,命令行退出之后再也连不上,远程的客户端也再连不上,于是查资料,有一个 mysqld_safe --user=mysql --skip-grant-tables --skip-networking & 命令,本以为遇到了救星,没想到这才是噩梦的开始 = =

一开始是这样的,把 skip-grant-tables 参数加到配置文件下,我试了,没用啊,也可能是因为教程针对 mysql,我这是 MariaDB。后来就用的如上命令,安全模式进去之后,再一看教程,我是真吐血了,网上教程是写的 user 表中的 root 用户删了怎么办,这特么跟我有个毛线关系!!!what the fuck!!!!他是有 user 表的结构的啊亲!!我特么没有啊。

后来灵机一动,从来源数据库复制用户表过去,当时没注意到来源数据库是 mysql,系统是 CentOS,复制过去,我还沾沾自喜,心想这次省事了,用户权限神马的应该直接分配好的。

然后噩梦就真的来了,我用 root 用户登录,修改一些权限,他说 access denied for user 'root'@'localhost' (using password: yes),给拒绝了,这下真的完了,什么都干不了了。

还发现 service mysql stop 命令也挂了,说 Stopping MySQL database server: mysqld failed!,遂重启服务器,还是不行,然后连 kill -s 9 这么野蛮的命令都用上了,还是杀不掉这个进程,天了噜,这个时候我已经想骂人了。

终于功夫不负有心人,用 mysqladmin shutdown -u root -p 可以关掉 mysql,但是开启之后还是啥也不行,不过这个时候来了转机,他说 access denied for user 'debian-sys-maint'@'localhost',这特么是个什么用户,在爆栈上面一搜就搜到了,点我,说这个用户的密码在 /etc/mysql/debian.cnf 这个文件里。

但是!!!!我擦!!!我现在的情况是没办法添加用户的阿喂。

不过脑子一动,于是新开了一台 VPS,装同样的系统,同样的 MariaDB,然后备份它的 user 表,把旧的 debian.cnf 改成新的密码,然后不校验模式下执行 DROP TABLE IF EXISTS user;重新导入新的备份,然后完美解决????

折腾折腾又对数据库的权限管理有了新的认识。

Tags

Jie Li

🚘 On-road / 📉 US Stock / 💻 Full Stack Developer / 🎓 Grad Student / ®️ ENTJ

Great! You've successfully subscribed.
Great! Next, complete checkout for full access.
Welcome back! You've successfully signed in.
Success! Your account is fully activated, you now have access to all content.