linux的mysql資料庫的由於許可權問題看不到mysql庫user表
阿新 • • 發佈:2019-01-05
今天在安裝mysql資料庫後,想開啟遠端連線,發現查詢不到了mysql資料庫自帶的mysql資料庫,是由於使用者的許可權問題導致,解決辦法如下:
第一種情況
[[email protected] ~]# 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操作
[[email protected] ~]#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資料庫
[[email protected] ~]#mysql -uroot -p
密碼為空。
[如果此時還連線不上,再重啟一下mysql就好了,service mysqld restart]。
然後就可以用 [[email protected] ~]#mysqladmin -uroot password 'newpassword' 來設定密碼了。
第二種情況
1.首先停止mysql服務:service mysqld 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.更新一下:flush privileges;
10.然後重新啟動下mysql,可以解決問題了