windows linux 下安裝mysql 報1045 等錯誤,mysql1045
以前在windows 下安裝mysql 沒怎麼出現過問題,而在linux下安裝的時候出現了一些問題,昨天在windows 安裝的時候也出現了1045 錯誤,就個人經曆來看這個問題就是 root使用者密碼的問題,所以將解決的方式總結如下:
一、mysql登入報 1045 錯誤
mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user 'root'@'localhost' (using password: YES)'
我們看到上面的這個錯誤就是說 user 為root host為localhost的密碼有問題,所以我們就要看看 mysql資料庫中user表中user為root,host為localhost的這個使用者的密碼。
解決辦法:破解mysql密碼
1、 service mysqld stop
// 停止mysql服務
2、mysqld_safe --skip-grant-tables
// 在mysql的設定檔如果是linux(centos)則在etc/my.cnf設定檔的mysqld_safe 下天添加skip-grant-tables,如果在windows下則在安裝目錄下的my.ini 設定檔的mysqld 下添加 skip-grant-tables, skip-grant-tables是跳過授權表,這樣配置之後儲存 關閉,重新啟動mysql服務
3、 mysql -uroot -p 斷行符號
// 這樣就進來了,這裡有兩個問題,也是我遇到的兩種情況,一種是user表中有user為root的使用者,一種是沒有,如果有則進行如下處理:
(1)、use mysql;
// 使用mysql資料庫
(2)、 delete from user where host="localhost" and user=" ";
// 將host為localhost下的user為空白的使用者都刪了,其實也可以把這裡localhost改成 % 免得以後串連的時候串連不了,不過是後話在這裡該不該都可以。
(3)、 update user set password=PASSWORD("newpass") where user="root";
// 如果你查詢一下你會發現 mysql中的密碼是加密儲存的,所以修改密碼不能向平時的sql一樣 而要使用password("新密碼")關鍵字來修改密碼,新密碼為password中的字元。
(4)、 flush tables;
//資料刷到磁碟
(5)、 flush privileges;
//更新許可權
(6)、quit
//退出
(7)、將設定檔中 skip-grant-tables 注釋/刪掉 儲存
(8)、service mysqld restart
// 再次啟動服務 mysql -uroot -p新密碼斷行符號 ,這樣應該可以了
二、 接著上面3、mysql -uroot -p 斷行符號 進入之後use表中沒資料,即建立root使用者做如下處理:
第一種情況,就是user中有root使用者但是串連不上是在windows下遇到的,而user中什麼都沒有是在linux(centos) 下遇到的,具體處理如下:
在linux下安裝了mysql之後出現錯誤,剛開始以為就是第一種這種情況,網上大多也都是這類文章於是就按照這篇文章進行了修改:linux下mysql 初次登陸修改密碼 修改之後應該沒錯,但再次啟動服務root登入還是不行,下面的就是出現的問題和解決過程:
1、查詢看有沒有user 為root的使用者,或這說user中有沒有使用者。
mysqld_safe--skip-grant-tables&mysql-uroot mysql mysql> select * from user; Empty set (0.00 sec) mysql> select USER(); +--------+ | USER()| +--------+ | root@ | +--------+ 1 row in set (0.00 sec)
|
結果是沒有root使用者,user表裡面是空的,還是第一次遇到這種問題的。
2、插入使用者資訊到 user表
由於 mysqld_safe --skip-grant-tables裡面是不能用grant的,於是想到了手動insert插入root使用者:
**為了大家方便這裡提供一些說明:第一個值是host,第二個為user這兩項是必填項,password("my_password")這裡進行密碼的設定,MY_PASSWORD 就是新設的密碼 ,而'Y'有28個,之後有1個enum和3個blob 可以為空白,也就是這裡的4個Null 字元,int類型有4個,預設值為0
INSERTINTO user VALUES('%','root',password('MY_PASSWORD'),'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','Y','Y','','','','',0,0,0,0)
|
這裡要主要的是第3個欄位密碼處要用password('密碼'),因為mysql中密碼是要經過編碼的,不是直接字串儲存的。
3、接著在殺掉所有mysql進程,之後正常重啟mysql,即可用root使用者登入
到目前個人就遇到的問題總的就這兩種,希望對你有用!!