CentOS 7中使用rpm方式安裝MySQL 5.7後無法使用root登入解決
最近在CentOS 7中通過rpm方式安裝了最新版本的mysql-server 5.7 (mysql57-community-release-el7-7.noarch.rpm) ,發現安裝成功後無法使用root登入。百度google一番無果,最後在官方文檔中找到了答案。現記錄完整安裝及問題解決過程,希望能協助到其他朋友。
CentOS6.5系統下RPM包安裝MySQL5.6
CentOS 6.5下安裝MySQL 5.6.21
《MySQL權威指南(原書第2版)》清晰中文掃描版 PDF
OS版本:
Linux version 3.10.0-327.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.3 20140911 (Red Hat 4.8.3-9) (GCC) ) #1 SMP Thu Nov 19 22:10:57 UTC 2015
RPM方式安裝mysql-server過程如下:
$ su root
$ sudo wget http://repo.mysql.com/mysql57-community-release-el7-7.noarch.rpm
$ sudo rpm -ivh mysql57-community-release-el7-7.noarch.rpm
$ sudo yum install mysql-server
##一路yes之後等待安裝成功的提示
到此為止,mysql57已經成功安裝。現在使用root嘗試登入到mysql,提示錯誤 ERROR 1045 (28000): Access denied for user 'root'@'localhost'
發生這個問題的原因估計是rpm方式安裝之後mysql使用了預設密碼來初始化root使用者。
度娘Google之後得到的解決方案對5.7.x版本無效。 在官網上尋找到了一些思路 https://dev.mysql.com/doc/refman/5.7/en/server-management-using-systemd.html
mysql5.7.x版本有一些新的變化,大致是
1.mysqld_safe已經被廢棄,rpm安裝包預設不會安裝mysqld_safe
2.user表中password列已經更改為authentication_string
在經過多次實驗之後終於解決了root登入問題。解決步驟如下
$ sudo systemctl stop mysqld.service
$ sudo systemctl set-environment MYSQLD_OPTS="--user=mysql --skip-grant-tables --skip-networking"
$ sudo systemctl start mysqld.service
$ mysql -u root mysql
mysql > UPDATE mysql.user SET authentication_string=PASSWORD("abcdef") WHERE user='root' and host='localhost';
mysql > flush privileges;
mysql > quit
$ sudo systemctl unset-environment MYSQLD_OPTS
$ sudo systemctl restart mysqld.service
OK,經過以上幾個步驟操作之後,重新使用root登入成功。