mysql权限问题,看不到其它的库!

今天在安装mysql数据库后,想开启远程连接,发现查询不到了mysql数据库自带的mysql数据库,是由于用户的权限问题导。

[root@localhost ~]# mysql -uroot -p123

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 7

Server version: 5.0.77 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>show databases;

+--------------------+

| Database |

+--------------------+

| information_schema |

| test |

+--------------------+

只显示这个两个数据库,看不到mysql数据库

解决方法:

此问题实际上是用户没有权限:

1.关闭mysql,service mysqld stop

2.启动mysql:mysqld_safe --skip-grant-tables

3.再打开一个ssh连接服务器,进行mysql操作

[root@localhost ~]#mysql

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 7

Server version: 5.0.77 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>show databases;

在这个模式下是可以看到mysql数据库的。

在数据库名mysql下的user表中,修改相应权限,比如:

INSERT INTO `user` VALUES ('localhost','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0);

如果已经存在了host为localhost的记录,则先删除该记录,delete from user where host='localhost';

然后再进行INSERT INTO `user` VALUES ('localhost','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0);

操作。

操作完成后,将两个ssh连接都关闭,然后再重新连接一个ssh,启动mysql,service mysqld start,然后用mysql命令连接mysql数据库

[root@localhost ~]#mysql -uroot -p

密码为空。

[如果此时还连接不上,再重启一下mysql就好了,service mysqld restart]。

然后就可以用[root@localhost ~]#mysqladmin -uroot password 'newpassword'来设置密码了。

第二种情况

1.首先停止mysql服务:servicemysqld stop

2.加参数启动mysql:/usr/bin/mysqld_safe--skip-grant-tables &

然后就可以无任何限制的访问mysql了

3.root用户登陆系统:mysql -u root-p mysql

4.切换数据库:use mysql

5.显示所有的表:show tables;

这里就可以访问表了

6.查看user表中root用户的localhost权限:select *from user where user='root' and host='localhost'

7.在显示的列表中显示:root用户的localhost的权限都是'N',表示root用户本地登陆不具有权限

8.修改root用户的localhost权限:

update user set

`Select_priv` = 'Y',

`Insert_priv` = 'Y',

`Update_priv` = 'Y',

`Delete_priv` = 'Y',

`Create_priv` = 'Y',

`Drop_priv` = 'Y',

`Reload_priv` = 'Y',

`Shutdown_priv` = 'Y',

`Process_priv` = 'Y',

`File_priv` = 'Y',

`Grant_priv` = 'Y',

`References_priv` = 'Y',

`Index_priv` = 'Y',

`Alter_priv` = 'Y',

`Show_db_priv` = 'Y',

`Super_priv` = 'Y',

`Create_tmp_table_priv` = 'Y',

`Lock_tables_priv` = 'Y',

`Execute_priv` = 'Y',

`Repl_slave_priv` = 'Y',

`Repl_client_priv`= 'Y',

`Create_view_priv` = 'Y',

`Show_view_priv` = 'Y',

`Create_routine_priv` = 'Y',

`Alter_routine_priv` = 'Y',

`Create_user_priv` = 'Y',

`Event_priv` = 'Y',

`Trigger_priv` = 'Y'

where user='root' and host='localhost'//这里需注意是否有这个条件的用户

9.更新一下:flushprivileges;

10.然后重新启动下mysql,可以解决问题了




因为mysql数据库的user表里,存在用户名为空的账户即匿名账户,导致登录的时候是虽然用的是root,但实际是匿名登录的,通过错误提示里的''@'localhost'可以看出来

1.关闭mysql# service mysql stop

2.屏蔽权限# mysqld_safe --skip-grant-table屏幕出现: Starting demo from .....

3.新开起一个终端输入# mysql -u root mysqlmysql> delete from user where USER=''mysql> FLUSH PRIVILEGES;

//记得要这句话,否则如果关闭先前的终端,又会出现原来的错误




第一步:关闭mysql服务

第二步:终端输入mysql_safe --skip-grant-tables

第三步:重启mysql服务

原因:关机时。先关闭软件 再关闭服务器。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1,MySQL权限体系 mysql 的权限体系大致分为5个层级: 全局层级: 全局权限适用于一个给定服务器中的所有...
    不排版阅读 4,466评论 0 4
  • 用了mysql好多年,很少关注mysql自带库,自然也不知道这个库里存放些什么,在看《MySQL排错指南》时看到它...
    灼灼2015阅读 5,861评论 1 3
  • 1.A simple master-to-slave replication is currently being...
    Kevin关大大阅读 11,230评论 0 3
  • 什么是数据库? 数据库是存储数据的集合的单独的应用程序。每个数据库具有一个或多个不同的API,用于创建,访问,管理...
    chen_000阅读 9,452评论 0 19
  • 安装并配置MySQL数据库 3.2.1安装MySQL数据库 1.MySQL数据库的安装环境准备 如果读者没有物理服...
    SkTj阅读 9,511评论 0 6