一,问题产生
刚装好mysql数据库,删除了一些没用的用户(匿名用户等),然后退出。使用mysqladmin -uroot password 'mingyue666'
给还没有密码的root管理员设置密码。
结果:mysqladmin: unable to change password; error: ‘Can’t find any matching row in the user table’
二,解决办法
最简单的办法就是登录到数据库执行FLUSH PRIVILEGES;这一语句即可。发生这一错误的原因是在变更了mysql.user表之后,没有使用FLUSH PRIVILEGES命令来更新权限表(grant tables)
重新启动mysql数据库服务也可以。
三,深究
flush privileges 命令本质上的作用是将当前user和privilige表中的用户信息/权限设置从mysql库(MySQL数据库的内置库)中提取到内存里。MySQL用户数据和权限有修改后,希望在”不重启MySQL服务”的情况下直接生效,那么就需要执行这个命令。通常是在修改ROOT帐号的设置后,怕重启后无法再登录进来,那么直接flush之后就可以看权限设置是否生效。而不必冒太大风险。