先說我遇到的問題:
有個項目中使用了127.0.0.1來連接本地的數據庫,現在要設置本地數據庫的密碼。於是通過cmd 窗口使用命令:
#mysql -uroot -p // 已經知道原來是不設密碼的,這里可以登錄 mysql>update mysql.user set password=password(‘mypassword’) where user=’root’; mysql>flush privileges; mysql>quit;
密碼修改好了,但項目中使用上面的密碼后還是連接不上。 通過cmd 窗口使用命令 ,使用修改后的密碼倒是可以。
后來弄明白了。
解決:
MySQL有三種登錄命令: (1)#mysql -uroot -p (2)#mysql -uroot -p -h localhost (3)#mysql -uroot -p -h 127.0.0.1
見MySQL的mysql.user 表:
都是root 用戶,登錄途徑不同,有各自不同的password 。
既讓明白了原理,這就來修改:
先通過已知方式登錄: #mysql -uroot -p 修改密碼: grant all on *.* to root@'%' identified by 'mypassword' with grant option; grant all on *.* to root@'127.0.0.1' identified by 'mypassword' with grant option; grant all on *.* to root@'localhost' identified by 'mypassword' with grant option; flush privileges;
補充一:
這三種路徑不同,深究一下:
證明了(1)#mysql -uroot -p 與 (2)#mysql -uroot -p -h localhost 是相同的,而與(3)是不同的。
補充二:
localhost與127.0.0.1的區別是什么?
相信有人會說是本地ip,曾有人說,用127.0.0.1比localhost好,可以減少一次解析。
看來這個問題還有人不清楚,其實這兩者是有區別的。
localhost也叫local ,正確的解釋是:本地服務器
127.0.0.1在windows等系統的正確解釋是:本機地址(本機服務器)
他們的解析通過本機的host文件,windows自動將localhost解析為127.0.0.1
localhot(local)是不經網卡傳輸!這點很重要,它不受網絡防火牆和網卡相關的的限制。
127.0.0.1是通過網卡傳輸,依賴網卡,並受到網絡防火牆和網卡相關的限制。
一般設置程序時本地服務用localhost是最好的,localhost不會解析成ip,也不會占用網卡、網絡資源。
有時候用localhost可以,但用127.0.0.1就不可以的情況就是在於此。猜想localhost訪問時,系統帶的本機當前用戶的權限去訪問,而用ip的時候,等於本機是通過網絡再去訪問本機,可能涉及到網絡用戶的權限。