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にパスワード設定するかして次からログインできるようにする。