天天看點

MySQL 5.7以上 root使用者預設密碼問題

廢話少說一句話系列:

CentOS系統用yum安裝MySQL的朋友,請使用 grep "temporary password" /var/log/mysqld.log 指令,傳回結果最後引号後面的字元串就是root的預設密碼。

按照以前,安裝完MySQL之後是可以直接用

mysql -uroot

進入MySQL控制台的,結果現在不行了,會提示

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

被拒絕通路了。一開始以為是因為我之前已經設定過CentOS自帶的MariaDB的密碼,安裝MySQL的時候MySQL替換了MariaDB,但繼承了MariaDB的密碼,然後用指令:

mysql -uroot -p

去帶密碼登陸,但是試了幾個密碼都不對。

正巧後來因為手賤犯了點事兒,系統被我玩炸了,重裝了CentOS系統。再次安裝MySQL的時候還是沒有辦法登陸進控制台,提示和之前一樣。

這就有點棘手了,難不成MySQL現在還有預設密碼了?抱着這個懷疑去MySQL官網一查文檔,還真是!

Incompatible Change: MySQL deployments installed using mysql_install_db now are secure by default. The following changes have been implemented as the default deployment characteristics: The installation process creates only a single root account, 'root'@'localhost', automatically generates a random password for this account, and marks the password expired. The MySQL administrator must connect as root using the random password and use SET PASSWORD to select a new password. (The random password is found in the .mysql_secret file in the home directory of the effective user running the script.) Installation creates no anonymous-user accounts. Installation creates no test database.

個人渣翻如下:

不相容的更改:MySQL的部署安裝使用mysql_install_db,現在預設是安全的。下面的更改已被實作并成為預設部署特性: 在安裝的過程裡,将僅建立一個root賬戶——'root'@'localhost',同時将自動生成一個随機密碼給它,并标記此密碼已過期。MySQL管理者必須使用随機密碼登陸root賬戶,并使用SET PASSWORD去設定一個新的密碼。(随機密碼可以在運作安裝腳本的有效使用者其主目錄中的.mysql_secret檔案中找到。) 安裝時不建立匿名使用者賬戶。 安裝時不建立測試資料庫。

有關重點我已經有紅色加粗字型标出。不過這個是腳本部署的,我當時是直接将MySQL源添加進了系統源裡,然後用yum install mysql-community-server指令安裝的,是以自然是沒有辦法在主目錄裡找到“.mysql_secret”檔案。那密碼會在哪兒呢?

其實MySQL在運作的時候會有一個日志檔案,它存在于/var/log/mysqld.log,我們在安裝時生成的随機密碼就在這個檔案裡,我們可以直接用下面這條指令顯示出這個檔案裡的所有内容:

cat /var/log/mysqld.log

這滿螢幕密密麻麻的字,看着就暈,如果我說密碼已經在上面的截圖裡了,你能馬上找到嗎?肯定得花好久,是以我們這裡可以用個更友善的指令:

grep "temporary password" /var/log/mysqld.log

怎麼樣,現在密碼是不是很清楚了?被設定為了“m6qVLN8kYQ?d”。

現在就可以用随機密碼登陸MySQL控制台了。

現在好不容易進入了控制台,接下來要做的就是修改密碼了,畢竟這麼一串密碼誰都記不住吧?設定新密碼的指令是:

SET PASSWORD = PASSWORD('你的新密碼');

不過需要注意的是現在MySQL已經強制要求強密碼,已經不能再用弱密碼比如“123456”了。如果你設定的密碼過于簡單,會提示錯誤:

ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

寫在最後:這個問題其實還是蠻棘手的,因為完全不知道MySQL後來加了初始随機密碼的問題,問了幾個朋友他們都說自己部署的時候沒有這個問題,最後隻好去找官方文檔。一是文檔全英文,二是自己英語渣,再加上相關文檔釋出的較早,最後花費了好多時間在這上面。總之也是不知道該對MySQL說什麼好……

繼續閱讀