網站報錯Access denied for user 'root'@'localhost' (using password: YES)
每次的挽救辦法就是:
/etc/init.d/mysqld stop
mysqld_safe --skip-grant-tables &
幾乎每隔10分鍾就出現一次,如下圖,然后手動安全模式重啟mysql。偶的內心好崩潰。。。
不得不贊阿里雲的售后技術支持太給力!耐心回復我的一個個小白問題。
總結一下,
問題原因:本地授權問題
解決辦法:“您目前啟動到mysql安全模式下,您登陸mysql,重新授權一下,允許root賬號從本地登陸mysql。授權完成后您再按照之前給您說的步驟,正常啟動mysql即可”
解決過程,具體展開解釋如下:
1. 安全模式啟動mysql
/etc/init.d/mysqld stop
mysqld_safe --skip-grant-tables &
2. 進入mysql命令行,#mysql (安全模式不需要密碼即可登錄mysql,開始偶還嚇尿了。。。囧。。。)
3. 更改root用戶的密碼
mysql>UPDATE mysql.user SET Password = password ( 'fxs_415700' ) WHERE User = 'root' ;
對sql語句的執行一定要加分號(囧。。。多年不寫SQL代碼)
不妨用查詢語句暖場 select User,Host from mysql.user WHERE User = 'root'; 查出了三條記錄
4. 更改root用戶的“host”值,已確保本地被授權
mysql>update mysql.user set host='localhost' where user='root';
(此步實際執行有錯,因為host是鍵值,故上述select語句有必要,尤其是當沒使用第三方mysql工具譬如sequel pro的話)
5. mysql>flush privileges ;
6. 退出mysql
mysql>quit
7. 停止mysql, 並查看是否還有mysql進程,有的話kill掉
# /etc/init.d/mysqld stop
通過 ps aux | grep mysql 查看mysql進程id
# ps aux | grep mysql
root 4043 0.0 0.0 63852 1252 pts/0 S 17:20 0:00 /bin/sh /usr/bin/mysqld_safe --skip-grant-tables
mysql 4234 23.7 1.0 228300 21992 pts/0 Sl 17:20 7:24 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin- dir=/usr/lib64/mysql/plugin --user=mysql --skip-grant-tables --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/lib/mysql/mysql.sock
查得進程ID,kill掉
# kill -9 4043
# kill -9 4234
8. 啟動mysql
#/etc/init.d/mysqld start
(當時因為sql語句沒加;即本地授權操作3、4、5三步未執行成功,第8步執行完后,mysql啟動,網站access deny錯誤依舊)