apt
で mysql-server
をインストールします。
$ sudo apt update
$ sudo apt install mysql-server
インストールが終わると自動的に MySQL サーバーが起動するようです。
$ service mysql status
● mysql.service - MySQL Community Server
Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: en
Active: active (running) since Sun 2019-03-17 07:36:24 UTC; 19s ago
Main PID: 19007 (mysqld)
Tasks: 27 (limit: 1152)
CGroup: /system.slice/mysql.service
└─19007 /usr/sbin/mysqld --daemonize --pid-file=/run/mysqld/mysqld.pi
ところが root でログインしようとしてもできません。
$ mysql -uroot
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
これは root の認証方法がデフォルトで auth_socket
に設定されているためです。
auth_socket
についての詳細は https://dev.mysql.com/doc/refman/5.7/en/socket-pluggable-authentication.html で確認できます。
簡単に説明すると、認証方法が auth_socket
に設定されている場合は以下のいずれかに一致する時のみログインすることができます。
mysql
コマンドで指定したユーザ名が、Ubuntu にログイン中のユーザ名と等しい(今回は root
)
mysql.user
テーブルにある、 mysql
コマンドで指定したユーザ名の行の authentication_string
列の値が Ubuntu にログイン中のユーザ名と等しい
つまり Ubuntu 上で root ユーザになってからログインすればよいということなので、sudo
を使ってログインします。
$ sudo mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.7.25-0ubuntu0.18.04.2 (Ubuntu)
Copyright (c) 2000, 2019, 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.
mysql>
ログインできました。
mysql.user
テーブルを確認すると確かに auth_socket
になっています。
mysql> select User, plugin, authentication_string from mysql.user;
+------------------+-----------------------+-------------------------------------------+
| User | plugin | authentication_string |
+------------------+-----------------------+-------------------------------------------+
| root | auth_socket | |
| mysql.session | mysql_native_password | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| mysql.sys | mysql_native_password | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| debian-sys-maint | mysql_native_password | *D7714B61633694B96C8A02C2486C20B8ADBEFE53 |
+------------------+-----------------------+-------------------------------------------+
4 rows in set (0.00 sec)
新しく作成したユーザの認証方法はデフォルトで mysql_native_password
になるようです。
mysql> CREATE USER newuser IDENTIFIED BY 'password';
Query OK, 0 rows affected (0.00 sec)
mysql> select User, plugin, authentication_string from mysql.user;
+------------------+-----------------------+-------------------------------------------+
| User | plugin | authentication_string |
+------------------+-----------------------+-------------------------------------------+
| root | auth_socket | |
| mysql.session | mysql_native_password | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| mysql.sys | mysql_native_password | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| debian-sys-maint | mysql_native_password | *D7714B61633694B96C8A02C2486C20B8ADBEFE53 |
| newuser | mysql_native_password | *2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19 |
+------------------+-----------------------+-------------------------------------------+
5 rows in set (0.00 sec)
root の認証方法を変更する
root の 認証方法を auth_socket
から変えたい場合は ALTER USER 文を使います。
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
Query OK, 0 rows affected (0.00 sec)
変更できました。
mysql> select User, plugin, authentication_string from mysql.user;
+------------------+-----------------------+-------------------------------------------+
| User | plugin | authentication_string |
+------------------+-----------------------+-------------------------------------------+
| root | mysql_native_password | *2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19 |
| mysql.session | mysql_native_password | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| mysql.sys | mysql_native_password | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| debian-sys-maint | mysql_native_password | *D7714B61633694B96C8A02C2486C20B8ADBEFE53 |
| newuser | mysql_native_password | *2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19 |
+------------------+-----------------------+-------------------------------------------+
5 rows in set (0.00 sec)