質問: ### 前提・実現したいこと 現在LinuxのCentos7.2を用いてwebサーバーの構築をしている者です。 質問内容に不備等あるかもしれませんがよろしくお願いします。 サーバー構築をするためにMySQL5.7.16のインストールをしたところエラーが発生したので回答の方お願いいたします ### 発生している問題・エラーメッセージ インストールが完了したのでログインをしようとしましたが出来ませんでした ``` エラーメッセージ ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) ``` ### 該当のソースコード ``` mysql -u root -p ↓ Enter password: ``` ### 試したこと ネットで調べてみたところ、初期パスワードがあったので sudo cat /var/log/mysqld.log | grep root で初期パスワードを確認し、そのパスワードを先ほどの Enter password: の後に入力しましたが だめでした。 そうなった場合、一度SQLを停止し、MySQLを権限システムを使用せずに起動してからmysqlコマンドプロンプトに入り、rootへの権限設定をしましょうと書いてあったサイトがあったので手順を踏んでみましたが、 mysql_safe --skip-grant-tables & のコマンドを打ったところで bash: mysql_safe: command not found... と出てしまい無理でした。 また、mysql_secure_installation でもパスワードを打ち込んだところでエラーメッセージとおなじ文が出てしまい駄目でした。 ### 補足情報(言語/FW/ツール等のバージョンなど) CentOS Linux release 7.2.1511 (Core) mysql Ver 5.7.16 for Linux on x86_64 (MySQL Community Server (GPL))
回答: CentOS 7では`systemd`で管理されているため、`mysqld_safe`が使用できないようです。 そのため、`systemctl`から設定を施す必要があるようです。 また、設定時のパスワードはログから確認できるようです。 `grep 'temporary password' /var/log/mysqld.log` systemctlから設定する方法は下記になります。 ``` systemctl stop mysqld systemctl set-environment MYSQLD_OPTS="--skip-grant-tables" systemctl start mysqld mysql -u root mysql> UPDATE mysql.user SET authentication_string = PASSWORD('MyNewPassword') -> WHERE User = 'root' AND Host = 'localhost'; mysql> FLUSH PRIVILEGES; mysql> quit systemctl stop mysqld systemctl unset-environment MYSQLD_OPTS systemctl start mysqld ``` 参考URL: