MySQL 5.7不能登入的問題
先在MySQL出到了5.7版本,經理讓用最新的版本搭建LNMP,搭建過程遇到很多問題,今天簡要說說MySQL的一個問題:
安裝完成後,無法登陸mysql,按理說新安裝後預設是以root使用者登入,而且密碼應該為空白,所以可以直接進的,但是出現了下面的問題
[root@bogon mysql]# bin/mysql
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
[root@bogon mysql]# bin/mysqladmin -uroot password
mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user 'root'@'localhost' (using password: NO)'
此時我的反應是會不會為了安全起見,新版mysql預設有密碼,我一查還真是,mysql預設安裝會有密碼產生,密碼檔案直接寫在 log-error 記錄檔中(在5.6版本中是放在 root/.mysql_secret 檔案裡,更加隱蔽,不熟悉的話可能會無所適從),但是我去查看了log_error,但是沒有找到密碼,而且也沒有root/.mysql_secret 檔案;
之後我嘗試在設定檔中加了skip-grant-tables,重啟之後可以進去了;所以一定是密碼的問題,所以我開始改密碼
mysql> update user set password=password('123456') where user='root';
ERROR 1054 (42S22): Unknown column 'password' in 'field list'
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> update user set password=password('123456') where user='root';
ERROR 1054 (42S22): Unknown column 'password' in 'field list'
但是出現了這種情況,改不了,網上說:官方的方式,筆者無論是否使用--skip-grant-tables啟動mysql都測試失敗,親們可以測試:
shell>mysql -uroot -p'password' #password即.mysql_secret裡的密碼
mysql>SET PASSWORD = PASSWORD('newpasswd');
但是根據上面的操作,官方說明也不是太靠譜。。。。。。。。。
於是我又開始搜尋各種解決辦法,又在朋友的協助下,終於找到解決的辦法-----------------------
我們把root@localhost使用者刪了,然後有建立了這個使用者
mysql> delete from mysql.user where user='root' and host='localhost';
Query OK, 1 row affected (0.01 sec)
mysql> select user,host from mysql.user;
+-----------+-----------+
| user | host |
+-----------+-----------+
| mysql.sys | localhost |
+-----------+-----------+
1 row in set (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> grant all on *.* to 'root'@'localhost' identified by '123456';
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> select user,host from mysql.user;
+-----------+-----------+
| user | host |
+-----------+-----------+
| mysql.sys | localhost |
| root | localhost |
+-----------+-----------+
2 rows in set (0.01 sec)
但是到這還是不行,你用下面的命令會發現一個情況
mysql> select * from mysql.user\G;
Grant顯示N--mysql許可權架構體系(應該是這麼說)是關閉的,so.............
mysql> grant all on *.* to 'root'@'localhost' identified by '123456' with grant option;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
退出mysql,將skip-grant-tables注掉,然後重啟mysql。此時在登陸就可以了。
-----------------------------------------------------------------------------------------------
當然許多朋友的錯可能只跟我類似,但是並不是相同,如果上述方法還是不行,可以跟我留言,我們可以探討。
當然我對mysql還並不是太熟,我在想刪除使用者,如果裡邊有資料怎麼辦,其實以防萬一備份一下就好了;而我朋友告訴我其實刪除使用者和建立使用者不影響資料,沒事,因為我沒有實際操作,所以不好保證,其實備份一下更好更安全,不影響資料那對我們更好啦。
本文永久更新連結地址: