mysql常见问题

1. mysql忘记密码

  1. vim /etc/my.conf 文件在mysqld下加入skip-grant-tables,表示mysql在登录的时候不检查权限。
  2. 登录mysql。直接运行mysql
    > use mysql;
    > update user set Password=password('root') where User='root'
    > flush privileges;
    > quit;
    User表存储的是mysql的用户的权限和密码。mysql密码都是经过加密后存储的,所以我们的密码须要用password函数对其进行加密。
  3. 删掉第一步加入的skip-grant-tables;
  4. 重新启动mysql. service mysqld restart

2. mysql无法登录

  1.  首先检查mysqlserver是否开启,service mysqld status.
  2. 假设开启了。可是仍然登录不进去。如登录账户是bob, 能够用root账户登录mysql.user表。查看bob账户的Host是否正确,假设在登录mysqlserver没有明白指定Host,默认是localhost,有时表中有127.0.0.1,可是没有localhost,这个时候尝试下mysql -h127.0.0.1 -ubob -p假设能够登录。那就每次登录的时候直接制定host登录,或者改动mysql.user表,加入root@localhost.
    > use mysql;
    > insert into user(Host,User,Password) values('localhost','bob',password('1234'));
    > grant all on *.*  to 'bob'@'localhost'
    最后一句是赋予权限的意思。赋予bob全部的权限。当中all能够换成[update|delete|insert|create...]等权限,*.*表示随意数据库的随意表。用户能够自己依据须要筛选。最后是赋予权限给哪个用户。
  3. 假设创建用户后运行mysql -u bob -p仍然无法登录, Access denied for user 'bob'@'localhost' (using password: YES),这时须要检查下是否有''@localhost账户存在,假设有运行
    DROP USER ''@'localhost';
    因为mysql假设匹配到多个账户时。有特定的顺序the most-specific Host values first。具体见http://stackoverflow.com/questions/10299148/mysql-error-1045-28000-access-denied-for-user-billlocalhost-using-passw

3. 运行grant时出现Access denied for user 'root'@'localhost' to database 'database'

root@localhost没有訪问database的权限。

我们运行

SELECT * FROM mysql.user WHERE User='root' and Host="localhost" G
G表示以键值对形式返回,这样看起来更方面,当中我们会发现
 Grant_priv: N
表示账户没有grant权限,所以我们就赋予grant权限给它。
> update user set Grant_priv='Y' where User='root' and Host='localhost';
> flush privileges;
又一次登录mysql。

笔者直接flush privilege后运行grant命令,出错,可是又一次登录后成功了。

4. 运行grant出现Can't find any matching row in the user table

在创建完user后,运行grant命令时出现上述error。可是查找user表。能够看到创建的user存在。主要因为运行的create user后没有更新权限表导致。仅仅需运行
flush privileges
后错误消失。


原文地址:https://www.cnblogs.com/mqxnongmin/p/10630208.html