1. 程式人生 > >linux的mysql資料庫的由於許可權問題看不到mysql庫user表

linux的mysql資料庫的由於許可權問題看不到mysql庫user表

今天在安裝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,可以解決問題了