Oasistブログ

自然言語、プログラミング、ライフハックを主に特集

MySQLインストール on WSL

f:id:oasist:20200614000533p:plain
MySQL

目次

1. 環境

2. MySQLインストール

2-1. MySQLクライアントインストール

$ sudo apt install mysql-client

2-2. MySQLサーバーインストール

$ sudo apt install mysql-server

2-3. バージョン確認

MySQLがインストールされたかを下記のコマンドで確認する。

$ mysql --version
mysql  Ver 14.14 Distrib 5.7.27, for Linux (x86_64) using  EditLine wrapper

2-4. 動作確認

2-4-1. 起動

$ sudo /etc/init.d/mysql start

2-4-2. 停止

$ sudo /etc/init.d/mysql stop

2-4-3. 再起動

$ sudo /etc/init.d/mysql restart

3. rootパスワードリセット

3-1. 権限テーブルの読み込みなしでMySQLに接続する準備

$ sudo mysqld_safe --skip-grant-tables &
[1] 5676

※ この --skip-grant-tables & を使うと、いつでもどこでも誰にでもMySQLにログイン出来てしまい大変危険なので、この初期設定以外では使用を避けるべき。
Grant Tablesの詳しい説明は公式ドキュメント(英語)を参照。

3-2. ルート権限でパスワードなしでMySQLに接続

-u でrootユーザーとして接続する。

$ sudo mysql -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 7
Server version: 5.7.27-0ubuntu0.18.04.1 (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>

3-3. パスワード設定と反映

今回は下記のSQLを実行する。

mysql> UPDATE mysql.user SET authentication_string = PASSWORD('hogehoge'), password_expired = 'N' WHERE User = 'root';
mysql> UPDATE mysql.user SET plugin='mysql_native_password' WHERE User='root';
mysql> FLUSH PRIVILEGES;
exit

それぞれのSQLが何をしているのか理解しないまま実行するのは危険なので、以下に簡単に説明する。

3-3-1. UPDATE mysql.user SET authentication_string = PASSWORD('hogehoge'), password_expired = 'N' WHERE User = 'root';

DB名.テーブル名 で更新をかける対象のDB名、テーブル名を指定。
ユーザー名が root のレコードのパスワード(authentication_string)カラムに hogehoge を、パスワード期限切れ(password_expired)に N を設定。

3-3-2. UPDATE mysql.user SET plugin = 'mysql_native_password' WHERE User = 'root;

ユーザー名が root のレコードのアカウントごとに接続を試行する認証プラグインする(authentication_string)カラムに mysql_native_password を設定。

3-3-3. FLUSH PRIVILEGES;

設定内容を反映するために、Grant Tablesにリロードする。

4. MySQL接続

4-1. 権限テーブルを読み込んでMySQLに接続する準備

$ sudo mysqld_safe

4-2. 新しく設定したパスワードでMySQLに接続

-u でrootユーザーとして、-p でパスワード入力ありで接続する。

$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.7.27-0ubuntu0.18.04.1 (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の導入は完了。

5. 補足

パスワードリセット時に参照した mysql DBの user テーブルの中身は、以下のSQLで確認可能。

5-1. DB一覧表示

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.01 sec)

5-2. DBの中に入る

mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

5-3. DBのテーブル一覧表示

mysql> show tables;
+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| columns_priv              |
| db                        |
| engine_cost               |
| event                     |
| func                      |
| general_log               |
| gtid_executed             |
| help_category             |
| help_keyword              |
| help_relation             |
| help_topic                |
| innodb_index_stats        |
| innodb_table_stats        |
| ndb_binlog_index          |
| plugin                    |
| proc                      |
| procs_priv                |
| proxies_priv              |
| server_cost               |
| servers                   |
| slave_master_info         |
| slave_relay_log_info      |
| slave_worker_info         |
| slow_log                  |
| tables_priv               |
| time_zone                 |
| time_zone_leap_second     |
| time_zone_name            |
| time_zone_transition      |
| time_zone_transition_type |
| user                      |
+---------------------------+
31 rows in set (0.01 sec)

5-4. テーブルのレコードを取得

mysql> select * from user;
+-----------+------------------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+------------------+----------------+---------------------+--------------------+------------------+------------+--------------+------------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+----------------------+-----------------------+-------------------------------------------+------------------+-----------------------+-------------------+----------------+
| Host      | User             | Select_priv | Insert_priv | Update_priv | Delete_priv | Create_priv | Drop_priv | Reload_priv | Shutdown_priv | Process_priv | File_priv | Grant_priv | References_priv | Index_priv | Alter_priv | Show_db_priv | Super_priv | Create_tmp_table_priv | Lock_tables_priv | Execute_priv | Repl_slave_priv | Repl_client_priv | Create_view_priv | Show_view_priv | Create_routine_priv | Alter_routine_priv | Create_user_priv | Event_priv | Trigger_priv | Create_tablespace_priv | ssl_type | ssl_cipher | x509_issuer | x509_subject | max_questions | max_updates | max_connections | max_user_connections | plugin                | authentication_string                     | password_expired | password_last_changed | password_lifetime | account_locked |
+-----------+------------------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+------------------+----------------+---------------------+--------------------+------------------+------------+--------------+------------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+----------------------+-----------------------+-------------------------------------------+------------------+-----------------------+-------------------+----------------+
| localhost | root             | Y           | Y           | Y           | Y           | Y           | Y         | Y           | Y             | Y            | Y         | Y          | Y               | Y          | Y          | Y            | Y          | Y                     | Y                | Y            | Y               | Y                | Y                | Y              | Y                   | Y                  | Y                | Y          | Y            | Y                      |          |            |             |              |             0 |           0 |               0 |                    0 | auth_socket           |                                           | N                | 2019-11-08 00:00:00   |              NULL | N              |
| localhost | mysql.session    | N           | N           | N           | N           | N           | N         | N           | N             | N            | N         | N          | N               | N          | N          | N            | Y          | N                     | N                | N            | N               | N                | N                | N              | N                   | N                  | N                | N          | N            | N                      |          |            |             |              |             0 |           0 |               0 |                    0 | mysql_native_password | *HOGEHOGEHOGEHOGEHOGEHOGEHOGEHOGEHOGEHOGE | N                | 2019-11-08 00:00:00   |              NULL | Y              |
| localhost | mysql.sys        | N           | N           | N           | N           | N           | N         | N           | N             | N            | N         | N          | N               | N          | N          | N            | N          | N                     | N                | N            | N               | N                | N                | N              | N                   | N                  | N                | N          | N            | N                      |          |            |             |              |             0 |           0 |               0 |                    0 | mysql_native_password | *HOGEHOGEHOGEHOGEHOGEHOGEHOGEHOGEHOGEHOGE | N                | 2019-11-08 00:00:00   |              NULL | Y              |
| localhost | debian-sys-maint | Y           | Y           | Y           | Y           | Y           | Y         | Y           | Y             | Y            | Y         | Y          | Y               | Y          | Y          | Y            | Y          | Y                     | Y                | Y            | Y               | Y                | Y                | Y              | Y                   | Y                  | Y                | Y          | Y            | Y                      |          |            |             |              |             0 |           0 |               0 |                    0 | mysql_native_password | *HOGEHOGEHOGEHOGEHOGEHOGEHOGEHOGEHOGEHOGE | N                | 2019-11-08 00:00:00   |              NULL | N              |
+-----------+------------------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+------------------+----------------+---------------------+--------------------+------------------+------------+--------------+------------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+----------------------+-----------------------+-------------------------------------------+------------------+-----------------------+-------------------+----------------+
4 rows in set (0.00 sec)

SQLの使い方はw3schools.comなどを参照。