程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> mysql常見問題

mysql常見問題

編輯:MySQL綜合教程

1. mysql忘記密碼

vim /etc/my.conf 文件在mysqld下添加skip-grant-tables,表示mysql在登錄的時候不檢查權限。登錄mysql。直接運行mysql
> use mysql;
> update user set Password=password('root') where User='root'
> flush privileges;
> quit;
User表存儲的是mysql的用戶的權限和密碼,mysql密碼都是經過加密後存儲的,所以我們的密碼需要用password函數對其進行加密。刪掉第一步添加的skip-grant-tables;重啟mysql. service mysqld restart

2. mysql無法登錄

首先檢查mysql服務器是否開啟,service mysqld status.如果開啟了,但是仍然登錄不進去,如登錄賬戶是bob, 可以用root賬戶登錄mysql.user表,查看bob賬戶的Host是否正確,如果在登錄mysql服務器沒有明確指定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...]等權限,*.*表示任意數據庫的任意表,用戶可以自己根據需要篩選。最後是賦予權限給哪個用戶。如果創建用戶後執行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命令,出錯,但是重新登錄後成功了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved