本記事では、WSL上のUbuntuにMySQLをインストールしてサーバーを立ち上げる方法と、WindowsからMySQL WorkbenchによりWSL上のMySQLサーバーに接続する方法を示します。
目次
- 準備
- MySQLのインストール
- MySQLサーバーの起動・停止・再起動
- rootのパスワードの設定
- セキュリティ強化のための設定
- MySQLサーバーのPortの変更
- パスワード認証プラグインの確認
- MySQL WorkbenchによるWSL上のMySQLへの接続
- まとめ
準備
WSL(Windows Subsystem for Linux)上にLinuxのディストリビューションであるUbuntuをインストールして、その上でMySQLサーバーを立ち上げます。
その準備となるWSLとUbuntuのインストールについては、以下の記事をご覧ください。
-
WSL(Windows Subsystem for Linux)インストールからファイル操作、プログラムの実行まで
WSLを利用することで、Windowsコンピュータ上でLinuxを利用することが可能になります。本記事では、WSLのインストール方法からファイル操作までを解説し、異なるOS間でのプログラムの実行とファイルアクセスが非常に簡単できることを示します。
続きを見る
記事執筆段階において、
・ Windows 11 Home (22H2, Build 22621.2134)
・ Ubuntu 22.04.3 LTS (GNU/Linux 5.15.90.1-microsoft-standard-WSL2 x86_64)
を使用しております。
MySQLのインストール
MySQLは、オープンソースのリレーショナルデータベース管理システムで、主にウェブアプリケーションやソフトウェアで使用され、データの保存、取得、管理を行います。MySQLは高速で信頼性が高く、多くのプラットフォームで利用できます。データベースのアクセスや操作にはSQL(Structured Query Language)を使用します。MySQLはクライアント/サーバー型を採用しており、多くのユーザーが同時にデータベースにアクセスできる特徴をもっています。
WSL上のUbuntuにMySQLサーバーをインストールする手順を示します。
1.パッケージ一覧を更新します。
$ sudo apt update
2. MySQLをインストールします。
$ sudo apt install mysql-server
3. MySQLのバージョン番号とインストールを確認します。
$ mysql --version
mysql Ver 8.0.33-0ubuntu0.22.04.4 for Linux on x86_64 ((Ubuntu))
記事執筆時点でのMySQLのバージョンは8.0.33でした。
MySQLサーバーの起動・停止・再起動
常時稼働しているアプリケーションをサービスと呼びます。MySQLはサービスです。Ubuntuではサービスをsystemctlコマンド、または、serviceコマンドで操作します。
systemctlコマンド
systemctlコマンドでmysqlサーバーを操作する基本的な方法を示します。
説明 | コマンド |
MySQLサーバーを起動する | sudo systemctl start mysql |
MySQLサーバーを停止する | sudo systemctl stop mysql |
MySQLサーバーを再起動する | sudo systemctl restart mysql |
MySQLの状態を確認する active = 起動中 inactive = 停止中(エラーなし) failed = 停止中(起動しようとして失敗) | systemctl status mysql |
OS起動時にMySQLを自動起動させる | sudo systemctl enable mysql |
OS起動時にMySQLを自動起動しない | sudo systemctl disable mysql |
serviceコマンド
serviceコマンドでmysqlサーバーを操作する基本的な方法を示します。
説明 | コマンド |
MySQLサーバーを起動する | sudo service mysql start |
MySQLサーバーを停止する | sudo service mysql stop |
MySQLサーバーを再起動する | sudo service mysql restart |
MySQLの状態を確認する active = 起動中 inactive = 停止中(エラーなし) failed = 停止中(起動しようとして失敗) | service mysql status |
rootのパスワードの設定
rootのパスワードの設定
次のコマンドでrootユーザーとして、MySQLにログインします。
$ sudo mysql
次に、MySQLサーバーにrootユーザーのパスワードを設定します。
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '〇〇〇〇';
〇〇〇〇の部分に設定するパスワードを記述します。そして、
FLUSH PRIVILEGES;
を実行して、rootユーザーのパスワード変更を反映します。反映した後は、
exit
として、MySQLの対話モードから抜けます。
rootのパスワードが設定されたことの確認
sudoコマンドでMySQLにログインしようとすると、エラーが発生することが確認できます。
$ sudo mysql
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
これは先ほどMySQLのrootユーザーのパスワードを変更したためです。
rootユーザーでログインする場合には、
$ mysql -u root -p
とします。パスワードを訊かれますので、先ほど設定したパスワードを入力します。以上でrootユーザーのパスワードが設定されたことを確認できました。
セキュリティ強化のための設定
mysql_secure_installationの実行
MySQLサーバーを初めてインストールした後に、セキュリティを強化するためのスプリクトを実行します。次のコマンドを使用します。
$ mysql_secure_installation
パスワードを訊かれますので、設定したrootパスワードを入力します。
すると、いくつかの質問を受けますので、それについて1つ1つ回答していきます。
各質問の意味を以下に示します。
質問 | 意味 | 参考 |
VALIDATE PASSWORD COMPONENT can be used to test passwords and improve security. It checks the strength of password and allows the users to set only those passwords which are secure enough. Would you like to setup VALIDATE PASSWORD component? | パスワード認証のポリシーを設定します。ポリシーは次の3つから選択します。 LOW / MEDIUM / STRONG 選んだポリシーに基づいて、パスワードを変更した際に十分な強度をもつか確認が行われます。 また、現在のパスワードを変更するかどうかについても聞かれます(変更しないことも可能です) | 設定することが推奨です(y)。 パスワードのポリシーは別途変更することが可能です。 |
By default, a MySQL installation has an anonymous user, allowing anyone to log into MySQL without having to h ave a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? | 匿名ユーザーを削除するかを質問しています。 匿名ユーザーMySQLをデフォルトでインストールすると、匿名ユーザーが作成されます。 匿名ユーザーは名前もパスワードも持たないアカウントを意味し、 この匿名ユーザーによって、ユーザーアカウントを作成せずに 誰でもMySQLにログインできるようになっています。 | 匿名ユーザーは削除することが推奨です(y)。 匿名ユーザーはセキュリティ上のリスクを持っているため、セキュリティが重要とされるどんな環境でも削除することが推奨されます。 |
Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? | リモートからrootユーザーのログインを許可しないように設定するかを尋ねています。 通常、rootユーザーはlocalhostのみから接続が許可されるべきです。 これにより、ネットワークを介してrootoパスワードを推測しようとするものからの アクセスを防ぐことができます。 | リモートからのrootユーザーのログインを許可しないことが推奨です(y)。 |
By default, MySQL comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? | テスト用のデータベースを削除するかどうかを尋ねています。 MySQLのデフォルトの設定では、'test'という名前のデータベースが含まれており、 このデータベースは誰でもアクセスできるようになっています。 このデータベースはテスト目的のみを意図しており、本番環境に移行する前に削除すべきデータベースです。 | セキュリティ上は'test'データベースとそのアクセス権を削除することが推奨されています(y)。 |
Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? | これまでに行われたすべての変更が直ちに反映されるように、 権限テーブルを再読み込みするかを尋ねています。 | 再読み込みすることが推奨されます(y)。 |
パスワード認証のポリシーの変更
MySQLのパスワード認証ポリシーの確認は、MySQLにログインした後に次のコマンドを用います。
show variables like 'validate_password%';
実行すると次のような表が表示されます。以下はパスワード認証ポリシーをSTRONGとした場合の例です。
mysql> show variables like 'validate_password%';
+--------------------------------------+--------+
| Variable_name | Value |
+--------------------------------------+--------+
| validate_password.check_user_name | ON |
| validate_password.dictionary_file | |
| validate_password.length | 8 |
| validate_password.mixed_case_count | 1 |
| validate_password.number_count | 1 |
| validate_password.policy | STRONG |
| validate_password.special_char_count | 1 |
+--------------------------------------+--------+
7 rows in set (0.00 sec)
これらの値を変更するには、Variable_nameの欄の変数〇〇〇に対して、
set global 〇〇〇 = 値 ;
とすれば変更できます。例えば、パスワード認証ポリシーをLOWに変更するには、
set global validate_password.policy = 'LOW';
とします。
MySQLサーバーのPortの変更
WSL上で起動しているMySQLサーバーが動作するデフォルトのポート(3306)を非デフォルトのポートに変更します。
この操作により、WSL上とホストマシーン上に2つの異なるMySQLサーバーを同時に実行することができます。
まず、Bash上で設定ファイルを開きます。
sudo vim /etc/mysql/my.cnf
エディタにvimを使用していますが、nanoでもemacsでも使い慣れたエディタを使用してください。次の文を追加します。
[mysqld]
port = 33061
デフォルトのMySQLのポートは3306です。これを33061に変更する例になります。ポートを変更したら、MySQLサーバーを再起動します。
sudo systemctl restart mysql
これでWSL上のMySQLサーバーのポート番号が33061になりました。ブラウザなどでURLにhttp://localhost:33061/と打ち込むと、WSL上のMySQLサーバーがポート33061で起動していることを確認できます。
パスワード認証プラグインの確認
MySQLには2種類のパスワードの認証プラグインがあります。1つは、caching_sha2_password、もう1つは、mysql_native_passwordになります。
認証プラグイン | アルゴリズム |
caching_sha2_password | SALT付きのSHA-256を使用します。 |
mysql_native_password | SALTなしのSHA-1を使用します。 以前のバージョンのMySQLで主に使用されていました。 認証プロトコルとして、チャレンジ&レスポンス認証を使用します。 複数のユーザーが同じパスワードを利用していると authentication_stringが同じになるため、 NIST によりSHA-1を認証に使うことは非推奨となっています。 |
MySQLのデフォルトの認証方法を確認するには、MySQLにログインした後に、次のコマンドを実行します。
show variables like 'default_authentication_plugin';
以下は実行例です。
+-------------------------------+-----------------------+
| Variable_name | Value |
+-------------------------------+-----------------------+
| default_authentication_plugin | caching_sha2_password |
+-------------------------------+-----------------------+
1 row in set (0.00 sec)
MySQL8.0以降はデフォルトの認証プラグインはcaching_sha2_passwordになっています。caching_sha2_passwordはmysql_native_passwordよりもセキュリティが強化されています。ただし、新しい認証プラグインのため互換性に問題がある場合があります。
一部のアプリケーションやクライアントはcaching_sha2_passwordをサポートしていない場合があり、その場合には認証エラーが発生します。そのようなアプリケーションを使用するときには、mysql_native_passwordへの変更が必要です。
MySQLのデフォルトの変更は、MySQLの設定ファイルを修正します。
sudo vim /etc/mysql/my.cnf
により設定ファイルを開き、[mysqld]に以下の一文を追加します。
[mysqld]
default_authentication_plugin = mysql_native_password
設定ファイルを変更した後、MySQLサーバーを再起動するとデフォルトの認証プラグインがmysql_native_passwordに変更されます。
その他に、ユーザーごとの認証プラグインは次のように確認できます。例えば、rootの認証方法を確認するには次のコマンドを実行します。
select User, Plugin from mysql.user where User = 'root';
以下は実行例です。
+------+-----------------------+
| User | Plugin |
+------+-----------------------+
| root | mysql_native_password |
+------+-----------------------+
1 row in set (0.00 sec)
rootのパスワードがmysql_native_passwordになっているのは、パスワード設定の際に「ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY...」という形で認証プラグインを指定したためです。
MySQL WorkbenchによるWSL上のMySQLへの接続
MySQLを操作できるツールとしてMySQL Workbenchを使って、WSL上のMySQLサーバーにアクセスします。MySQL WorkbenchはMySQLの公式統合開発環境(IDE)ツールで、データベースの管理から設計・開発までGUIで操作することができます。
WindowsやmacOS、Linuxの主要なプラットフォームで動作し、公式のMySQLウェブサイトから無料でダウンロードできます。
公式ページに飛び「ダウンロードはこちら」というボタンを押します。その後、Windows上にインストールするため、Select Operating Systemで「Microsoft Windows」を選択し、「Go to Download Page >」のボタンを押します。
すると次のページが表示されます。
mysql-installer-web-communityとmysql-installer-communityの2種類がありますが、前者はオンライン状態でインストールを行うためのインストーラ、後者はオフライン状態でインストールするためのインストーラです。
ここでは前者を選択しました。ログインを求められますが、オラクルアカウントをもたない場合には「No thanks, just start my download.」からダウンロードできます。
ダウンロードしたインストーラを実行すると、Setup Typeを選択します。
本記事では、Customを選択し、「Applications」の「MySQL Workbench」のみをインストールしました。再度インストーラを実行することで、後から変更することが可能です。
インストール後にMySQL Workbenchを実行して、WSLへのテスト接続を行います。メニューの「Database」->「Manage Connections」を開きます。
この画面で以下の項目を設定します。
項目 | 設定値 | 参考 |
Connection Name | WSL Ubuntu | 任意の名前を設定できます。 |
Connection Method | Standard (TCP/IP) | |
Hostname | localhost | |
Port | 33061 | デフォルトは3306。 上述したようにPort番号を本記事では変更したため、 その設定値33061を用います。 |
Username | root | |
Password | WSL上のMySQLで設定したrootのパスワード | |
Default Schema | デフォルトで表示するデータベース名 | 後から変更できます。 |
画面右下にあるTest Connectionを実行して、「Successfully made the MySQL connection」というダイアログボックスが表示されたら、WindowsからWSL上のMySQLへの接続ができています。
まとめ
本記事では、WSL上のUbuntuにMySQLをインストールして、MySQL WorkbenchによりWSL上のMySQLへの接続し、以下について説明しました。
・ インストール方法
・ ルートパスワード変更
・ mysql_secure_installationによるセキュリティの簡易設定
・ MySQLサーバーのポート変更
・ MySQL WorkbenchによるWSL上のMySQLサーバーへの接続設定
同じように勉強している方の参考になりましたら幸いです。