寝て起きて寝て

プログラミングが出来ない情報系のブログ

rootでMySQL5.7.20に入れなかった話

環境

Ubuntu16.04 MySQL5.7.20

現象

久々にMySQL使ってPHP動かそうと思って環境整えようとしたら MySQLにrootでログインできなくて詰まった

$sudo apt-get install mysql-server
$ mysql -u root
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

ナニコレー

とりあえず調べる

原因と解決方法

どうやらMySQL5.7でmysql-serverをインストールした時にrootのパスワードを設定しないと上記のエラーが出てログインできないらしい(パスワード設定しろとかいわれてない気がするんだよなぁ・・)

これを解決するにはセーフモードで起動する必要がある。 一回起動しているMySQLを落としてからセーフモードで起動

$ sudo /etc/init.d/mysql stop
$ sudo mysqld_safe --skip-grant-tables &
[1] 3497
krs1@krs1-PC-MK32MEZCF:/var/log/mysql$ 2017-11-19T12:58:25.504739Z mysqld_safe Logging to syslog.
2017-11-19T12:58:25.507492Z mysqld_safe Logging to '/var/log/mysql/error.log'.
C17-11-19T12:58:25.534624Z mysqld_safe Directory '/var/run/mysqld' for UNIX socket file don't exists.

別のターミナルを起動してもういちどMySQLを起動してみる

$ mysql -u root
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (111)

なんかファイルがないらしいから作ってやる

sudo mkdir /var/run/mysqld/
sudo chown mysql:mysql  /var/run/mysqld/
sudo touch mysqld/mysqld.sock
sudo chown mysql:mysql  /var/run/mysqld/mysqld.sock
sudo chmod 777 mysqld.sock

できたら先ほど別起動しっぱなしのMySQLを落としてから

もう一度起動

$ sudo mysqld_safe --skip-grant-tables &

別のターミナルからrootでログイン

$ sudo mysql -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.20-0ubuntu0.16.04.1 (Ubuntu)

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

入れたのでとりあえずここで新しいユーザーを作るか rootにパスワード設定するかして次からログインできるようにする。

参考URL

Ubuntu 16.04におけるmysqlのインストールと設定、エラー対応のまとめ - Qiita