ec2(Amazon Linux 2,Amazon Linux 2023)とLinux CentOS7上にMySQL(フリーのCommunity版、バージョン8)をダウンロードとインストールする方法や、MySQLサービスの簡単な初期設定や状態確認、rootパスワードの変更、MySQLの新規ユーザ作成などについて説明します。
※ 本ページはプロモーションが含まれています。
本記事では、AWSのec2(Amazon Linux 2、Amazon Linux 2023)環境とLinux CentOS7環境で、DBのMySQLをダウンロード〜インストールする方法につい説明しています。また、MySQLインストール後の簡単なコマンド操作(MySQLの初期設定や状態確認、rootパスワードの確認と変更、MySQLの新規ユーザ作成と権限設定など)についても説明しています。
ここでインストールするMySQLサーバのエディションとバージョンは、MySQL Community Server 8.0.33です。(バージョン8.0.33は2023/5/13時点では最新安定版。2023年7月に8.1.0がリリースされたようです。ただ、バージョン8.1系はInnovationリリース?)
MySQLはいくつかのEditionがありますが、今回ダウンロード&インストールするMySQL Community Edition(コミュニティ版)はGPLライセンスに従って無料(フリー)で使えるMySQLです。オープンソースで無料で使える人気のDBです。
MySQL Community Editionは、世界で最も多く使用されているオープンソース・データベースの、無償で自由にダウンロードして利用することができるバージョンです。GPLライセンスに従って利用することができ、
(引用元:MySQL Community Edition)
◾️動作環境とバージョン情報です
OS:Amazon AWSのec2(Amazon Linux release 2 (Karoo)とAmazon Linux release 2023)、CentOS Linux release 7.9
インストールするMySQL:MySQL Community Server 8.0.33
本記事で説明しているMySQL Community Server 8のインストール方法ですが、OS環境はAmazon AWSのec2(Amazon Linux 2とAmazon Linux 2023)とCentOS7の3環境で試しましたが、どれもほぼ同じ方法でインストールできました(Amazon Linux 2023は若干違うけどインストールする流れは同じ)。
macPC環境でMySQLをインストールする方法については別ページで説明しています。
MySQLのインストール【macOS】
MySQLから派生したオープンソースのDBにMariaDBという物もあります。MariaDBはMySQLから派生しただけあってコマンドやSQLの使い方は似ていますし、GPLライセンスのもとで無料(フリー)で使用する事ができます。MariaDBのインストール方法についても別ページで説明しているので、よければ参考にしてください。
MariaDB10.6(10.5)のインストール(Amazon Linux2(ec2),CentOS7)、WordPressの環境構築
MySQLのインストールの説明の前に、amazon AWS環境でMySQLを使う場合について少し話します。
AWSでMySQLなどのDBを使う場合、RDSというデータベース専用のサービスがあるので、もちろんそのRDSを使っても良いですが、ec2にMySQLをインストールして、1台のec2上にWebサーバ+MySQLという環境を作る事もできます。
ec2にMySQLをインストールするメリットは、やっぱりコスト(料金)を安く抑えられる事だと思います。単純にDBありのウェブ環境を1つのec2で構築する事ができます。特に最近(2022年以降〜)は円安なのでドル建てのAWSのコストは高く感じるようになりました。なので少しでも料金は割安に済ませたいところです。
あとは単純に学習用にMySQLをインストールして勉強したいという人もいると思いますし、ちょっとWebサーバ+MySQLのWebサービスやWeb APIの開発を勉強したいから、手軽に1台のec2だけで試したいうケースもあると思います。その場合もコストが格安で済みそうですし。
一方、MySQLなどのDBはRDSを使い、ec2と使い分ける場合のメリットは、DBの保守運用面をRDSにある程度任せる事ができるとか、DBとそれ以外の機能の障害や負荷の切り分けや対応が簡単になる等があります。ですので、仕事の本番環境でAWSのDBを使う時は、RDSを使うケースが多いと思います。
インフラがAWSでチームで仕事をする場合、ec2とRDSを使うケースが多いのではないかと思います。ただ、個人でDBありのWeb環境を構築する場合、ec2にDBをインストールして1台のec2で済ますのも、やはりコストメリット的にアリだと思います。
ec2自体の料金を安く済ませたい、コスト最適化を図りたい場合、オンデマンド(完全従量課金)のec2ではなく、リザーブドインスタンス(RI)、Savings Plans(SP)、スポットインスタンスなどを使えば、劇的にコスト削減をできるケースもあります。
別ページでEC2のリザーブドインスタンスを購入した時について説明しているので、良ければ参考にしてください。
円安だしコスト節約のため、EC2のリザーブドインスタンスを購入する
MySQLをインストール前の準備としてyum updateをします(ただ、yum updateするかどうかは各自の判断でお願いします)。
$ sudo yum update
あと、EPELをインストールするかどうかも各自の判断でお願いします。私の環境ではEPELを入れなくてもMySQLをインストールできたので入れませんでした。
$ sudo yum install epel-release
(*EC2のAmazon Linux 2023環境は、EPELをインストールできませんでした。下のサイトを見る限り、どうやらAmazon Linux 2023ではEPELをサポートしていないらしい。) Amazon Linux 2(ec2)のamazon-linux-extrasコマンドでepelをインストールするなら、このコマンドでもできます。(Amazon Linux 2023はamazon-linux-extrasコマンドが無くなって使えなかったし、EPELもサポートしてないみたいだからスルーで。)
$ sudo amazon-linux-extras install epel
また、yum list installedコマンドでインストール済みのmysql関連のサービスやライブラリを確認してみたけど、現状は何もありませんでした。
$ yum list installed | grep -i mysql
まず、community版のMySQLをyumでインストールする場合、デフォルトではMySQLをインストールする為のリポジトリが無いので、MySQLインストール用のyumリポジトリを用意する必要があります。
ちなみに現状のyumリポジトリの情報です。
■ec2(Amazon Linux 2)の場合
$ ls /etc/yum.repos.d/
amzn2-core.repo amzn2-extras.repo
$ yum repolist
読み込んだプラグイン:extras_suggestions, langpacks, priorities, update-motd
リポジトリー ID リポジトリー名 状態
!amzn2-core/2/x86_64 Amazon Linux 2 core repository 30,941
amzn2extra-docker/2/x86_64 Amazon Extras repo for docker 86
amzn2extra-kernel-5.10/2/x86_64 Amazon Extras repo for kernel-5.10 308
■ec2(Amazon Linux 2023)の場合
$ ls /etc/yum.repos.d/
amazonlinux.repo kernel-livepatch.repo
$ yum repolist
repo id repo name
amazonlinux Amazon Linux 2023 repository
kernel-livepatch Amazon Linux 2023 Kernel Livepatch repository
■CentOS7の場合
$ ls /etc/yum.repos.d/
CentOS-Base.repo CentOS-Debuginfo.repo CentOS-Sources.repo CentOS-fasttrack.repo
CentOS-CR.repo CentOS-Media.repo CentOS-Vault.repo CentOS-x86_64-kernel.repo
$ yum repolist
〜
リポジトリー ID リポジトリー名 状態
base/7/x86_64 CentOS-7 - Base 10,072
extras/7/x86_64 CentOS-7 - Extras 515
updates/7/x86_64 CentOS-7 - Updates 4,926
yum repolist allで無効なリポジトリを確認しても、MySQL関連のリポジトリは何もありませんでした。
$ yum repolist all | grep -i mysql
MySQLのyumリポジトリを追加するには、MySQL Community Downloads -> MySQL Yum Repositoryページへ行き、自分のOS環境のDownloadボタンを選択します。(CentOS7とAmazon Linux2環境の場合、「Red Hat Enterprise Linux 7 / Oracle Linux 7 (Architecture Independent), RPM Package」のダウンロードを選択します。また、Amazon Linux 2023環境の場合、「Red Hat Enterprise Linux 9 / Oracle Linux 9 (Architecture Independent), RPM Package」のダウンロードを選択します。)
ダウンロードページへ移動したら、下の方にある「No thanks, just start my download.」というリンクを右クリック->「リンクのアドレスをコピー」を選択します。
これで、community版MySQLのrpmのURLをコピーできました。
コピーされたURLはこちらです。(ここでコピーされたURLのMySQLのバージョンは8でした)
■ec2(Amazon Linux2)、CentOS7の場合
https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm
■ec2(Amazon Linux 2023)の場合
https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm
ターミナルに戻って、 yum localinstallコマンドでcommunity版MySQLのyumリポジトリを追加します。
■ec2(Amazon Linux2)、CentOS7の場合
$ sudo yum localinstall https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm
〜
インストール:
mysql80-community-release.noarch 0:el7-7
完了しました!
■ec2(Amazon Linux 2023)の場合
$ sudo yum localinstall https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm
追加できたので、再度リポジトリを確認します。
■ec2(Amazon Linux 2)の場合
$ ls /etc/yum.repos.d/
amzn2-core.repo amzn2-extras.repo mysql-community-debuginfo.repo mysql-community-source.repo mysql-community.repo
$ yum repolist
〜
リポジトリー ID リポジトリー名 状態
amzn2-core/2/x86_64 Amazon Linux 2 core repository 30,941
amzn2extra-docker/2/x86_64 Amazon Extras repo for docker 86
amzn2extra-kernel-5.10/2/x86_64 Amazon Extras repo for kernel-5.10 308
mysql-connectors-community/x86_64 MySQL Connectors Community 164+56
mysql-tools-community/x86_64 MySQL Tools Community 98
mysql80-community/x86_64 MySQL 8.0 Community Server 405
■ec2(Amazon Linux 2023)の場合
$ ls /etc/yum.repos.d/
amazonlinux.repo kernel-livepatch.repo mysql-community-debuginfo.repo mysql-community-source.repo mysql-community.repo
$ yum repolist
repo id repo name
amazonlinux Amazon Linux 2023 repository
kernel-livepatch Amazon Linux 2023 Kernel Livepatch repository
mysql-connectors-community MySQL Connectors Community
mysql-tools-community MySQL Tools Community
mysql80-community MySQL 8.0 Community Server
■CentOS7の場合
$ ls /etc/yum.repos.d/
CentOS-Base.repo CentOS-Debuginfo.repo CentOS-Sources.repo CentOS-fasttrack.repo mysql-community-debuginfo.repo mysql-community.repo
CentOS-CR.repo CentOS-Media.repo CentOS-Vault.repo CentOS-x86_64-kernel.repo mysql-community-source.repo
$ yum repolist
〜
リポジトリー ID リポジトリー名 状態
base/7/x86_64 CentOS-7 - Base 10,072
extras/7/x86_64 CentOS-7 - Extras 515
mysql-connectors-community/x86_64 MySQL Connectors Community 220
mysql-tools-community/x86_64 MySQL Tools Community 98
mysql80-community/x86_64 MySQL 8.0 Community Server 405
updates/7/x86_64 CentOS-7 - Updates 4,926
どのOS環境も、MySQL 8.0 Community Serverと他にもMySQL関連のリポジトリが追加されています!
yum localinstallコマンドでMySQLのリポジトリを追加しましたが、yum installコマンドやrpmコマンドでも追加する事ができますよ。
$ sudo yum install https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm
$ sudo rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm
MySQLのリポジトリを追加したので、MySQLサーバのダウンロード&インストールをやっていきます。
以下のコマンド例はCentOS7上で実行したものですが、ec2(Amazon Linux 2とAmazon Linux 2023)環境でも同じように実行できました。
ネットの情報を見ていたら、MySQLサーバをインストールする前に"mariadb-libs"を削除した方がいいかもという情報を見かけました。
$ yum list installed | grep -i maria
mariadb-libs.x86_64 1:5.5.68-1.el7
けど、私の環境ではmariadb-libsを削除しなくても問題なくMySQLをインストールできたので削除しませんでした。と言いうより、このあと説明するMySQLサーバをインストールした時に、"mariadb-libs"は置換され削除されて消えていました。
yum searchコマンドでmysql関連を確認すると色々出てきますが、その中にある"mysql-community-server"をインストールします(インストール時にいくつか質問されるが全てy(Yes)で)。
$ yum search mysql
〜
mysql-community-server.x86_64 : A very fast and reliable SQL database server
$ sudo yum install mysql-community-server
〜
インストール:
mysql-community-libs.x86_64 0:8.0.33-1.el7 mysql-community-libs-compat.x86_64 0:8.0.33-1.el7 mysql-community-server.x86_64 0:8.0.33-1.el7
依存性関連をインストールしました:
mysql-community-client.x86_64 0:8.0.33-1.el7 mysql-community-client-plugins.x86_64 0:8.0.33-1.el7
mysql-community-common.x86_64 0:8.0.33-1.el7 mysql-community-icu-data-files.x86_64 0:8.0.33-1.el7
置換:
mariadb-libs.x86_64 1:5.5.68-1.el7
完了しました!
インストールできました!
とりあえずバージョンの確認をします。
$ mysql -V
mysql Ver 8.0.33 for Linux on x86_64 (MySQL Community Server - GPL)
$ mysql --version
mysql Ver 8.0.33 for Linux on x86_64 (MySQL Community Server - GPL)
MySQL Community Serverのバージョン8.0.33です(8.0.33は2023/5/13時点の最新安定版だと思う。)
ちなみにyum list installedコマンドでインストールされたMySQL関連のライブラリを確認するとこんな感じでした。
$ yum list installed | grep -i mysql
mysql-community-client.x86_64 8.0.33-1.el7 @mysql80-community
mysql-community-client-plugins.x86_64 8.0.33-1.el7 @mysql80-community
mysql-community-common.x86_64 8.0.33-1.el7 @mysql80-community
mysql-community-icu-data-files.x86_64 8.0.33-1.el7 @mysql80-community
mysql-community-libs.x86_64 8.0.33-1.el7 @mysql80-community
mysql-community-libs-compat.x86_64 8.0.33-1.el7 @mysql80-community
mysql-community-server.x86_64 8.0.33-1.el7 @mysql80-community
mysql80-community-release.noarch el7-7 @/mysql80-community-release-el7-7.noarch
■MySQLのインストール時にエラーが発生してインストールできない場合
yum installコマンドでcommunity版MySQL(mysql-community-server)のインストールしようとした時に、エラーが発生してインストールできない場合がありました。
$ sudo yum install mysql-community-server
Last metadata expiration check: 0:00:23 ago on Sun May 21 08:09:04 2023.
Error:
Problem: conflicting requests
- nothing provides libcrypto.so.10()(64bit) needed by mysql-community-server-8.0.11-1.el7.x86_64
- nothing provides libssl.so.10()(64bit) needed by mysql-community-server-8.0.11-1.el7.x86_64
〜
- nothing provides libssl.so.10(libssl.so.10)(64bit) needed by mysql-community-server-8.0.33-1.el7.x86_64
- nothing provides libcrypto.so.10(OPENSSL_1.0.2)(64bit) needed by mysql-community-server-8.0.33-1.el7.x86_64
(try to add '--skip-broken' to skip uninstallable packages)
エラー内容はlib*.soが〜って感じですが、エラーの原因は追加するMySQLのリポジトリが間違っていました。このエラーが発生したら、一度/etc/yum.repos.dディレクトリに追加したMySQLのリポジトリを削除して、再度自分のOS環境に合ったMySQLリポジトリを追加してからインストールをやり直しましょう。
$ sudo rm /etc/yum.repos.d/mysql-community*
MySQLをインストールできたので、早速少し使ってみます。まず、MySQLサービスの状態確認です。(MySQLサーバのサービス名はmysqlではなくmysqldなので注意を。)
$ systemctl status mysqld
● mysqld.service - MySQL Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
Active: inactive (dead)
Docs: man:mysqld(8)
http://dev.mysql.com/doc/refman/en/using-systemd.html
インストール直後は停止していますね。なのでMySQLサービスを起動します。
$ sudo systemctl start mysqld
再度MySQLサーバの状態を確認します。
$ systemctl status mysqld
● mysqld.service - MySQL Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
Active: active (running) since 土 2023-05-13 09:04:40 UTC; 15s ago
Docs: man:mysqld(8)
http://dev.mysql.com/doc/refman/en/using-systemd.html
Process: 3118 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
Main PID: 3189 (mysqld)
Status: "Server is operational"
CGroup: /system.slice/mysqld.service
└─3189 /usr/sbin/mysqld
起動状態になりました!(inactive (dead)からactive (running) に変わった。)$ sudo systemctl stop mysqld
OS(サーバ)を再起動した時にMySQLサービスも同時に起動するかどうかは、systemctl is-enabledコマンドで確認できます。
$ systemctl is-enabled mysqld
enabled
enabledになっているので、現状はサーバ起動時にMySQLも起動します。$ sudo systemctl disable mysqld
Removed symlink /etc/systemd/system/multi-user.target.wants/mysqld.service.
$ systemctl is-enabled mysqld
disabled
systemctl is-enabledコマンドで確認したらdisabledになりました。$ sudo systemctl enable mysqld
Created symlink from /etc/systemd/system/multi-user.target.wants/mysqld.service to /usr/lib/systemd/system/mysqld.service.
$ systemctl is-enabled mysqld
enabled
次に、MySQLサービスを起動して、rootユーザでmysqlコマンドでMySQLサービスにログインしてみます。
rootユーザのパスワードですが、MySQLインストール時にパスワードの設定はしませんでした。設定しなかったからパスワード無しでログインできるかなと思って試したけど無理でした。
実は、今回のOS環境(ec2(Amazon Linux2,Amazon Linux2023)とCentOS7)では、MySQLのrootユーザの初期パスワードは勝手にインストール時に決められてるようで、そのrootパスワードは/var/log/mysqld.logファイルで確認できます。
$ sudo cat /var/log/mysqld.log | grep password
2023-05-13T13:52:57.164830Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: XV,MzFJL)9-l
rootユーザの初期パスワードがわかったので、mysqlログインします。
$ mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.0.33
〜
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
ログインできました!mysql> status;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
エラー内容は、コマンドを実行する前にrootの初期パスワードをリセットしてねという感じです。mysql> set password='#MySQL8Password';
Query OK, 0 rows affected (0.01 sec)
*ちなみに設定するパスワードは、大文字、小文字、数字、記号が入ってないとポリシー条件を満たしていないというエラーが発生してできませんでした。
mysql> set password='MySQL8Password';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
rootユーザのパスワードを設定できたら、一旦mysqlプロンプトをexitコマンドでログアウトして、rootユーザと新しいパスワードで再度ログインできるか試してみます。
そしてログインできたら、今度はmysqlプロンプト上で色々なコマンドを実行できるかも試します。
mysql> select curdate(), CURTIME();
+------------+-----------+
| curdate() | CURTIME() |
+------------+-----------+
| 2023-05-13 | 14:38:53 |
+------------+-----------+
1 row in set (0.00 sec)
mysql> status
--------------
mysql Ver 8.0.33 for Linux on x86_64 (MySQL Community Server - GPL)
Connection id: 13
Current database:
Current user: root@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 8.0.33 MySQL Community Server - GPL
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: utf8mb4
Db characterset: utf8mb4
Client characterset: utf8mb4
Conn. characterset: utf8mb4
〜
できました。問題なさそうです!
ちなみに初期設定の文字コードはutf8mb4(1~4バイトのUTF8)なので、ここではこのままで良しとします。
もしもMySQLの文字コードのもう少し詳細な確認や使用する文字コードの設定を変更したい場合、別ページで詳しく書いているのでそちらを参考にしてください。
MariaDB(MySQL)の文字コードを設定(変更)する
せっかくなのでもう少しmysqlプロンプト上で何かやってみます。
rootユーザを使い続けるのはセキュリティ的に良くないと思うので、今度は適当なDBを作成して、そのDBを使用するMySQLの新規ユーザを作成してみます。
rootユーザでログインして、hogedbというDBを作成します。
mysql> create database hogedb;
そして、localhost(同じPC内からアクセスできる)のhogeuserという適当なユーザを作成し、hogeuserのパスワードをhogepasswordに設定します。
mysql> create user 'hogeuser'@'localhost' IDENTIFIED BY 'hogepassword';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
エラーが出ました。rootパスワードを変更した時に出たエラーと同じで、ゆるいパスワードの設定は脆弱だからダメみたいですね。mysql> set global validate_password.policy = "LOW";
再度、上でエラーが出たユーザ作成のコマンドを実行してみます。
mysql> create user 'hogeuser'@'localhost' IDENTIFIED BY 'hogepassword';
Query OK, 0 rows affected (0.01 sec)
今度はできました!mysql> GRANT ALL PRIVILEGES ON `hogedb`.* TO "hogeuser"@"localhost";
一旦ログアウトして、今度はhogeuserユーザでログインしてみます。
$ mysql -uhogeuser -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 19
Server version: 8.0.33 MySQL Community Server - GPL
〜
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| hogedb |
| information_schema |
| performance_schema |
+--------------------+
3 rows in set (0.00 sec)
mysql> use hogedb;
Database changed
ログインできたし、hogedbデータベースも使えそうです!
別ホスト(PC)からMySQLサービスが起動しているサーバにリモート接続できるユーザを作成する事もできます。その方法については別ページで説明していますので、良ければ参考にしてください。
MySQL(MariaDB)にmysqlコマンドでリモート接続する
OS環境やMySQLのバージョンによって違うと思いますが、インストールしたMySQLによっては、char型・varchar型のカラム値の平仮名カタカナや数字・英字の半角全角の区別がされません。そして、その原因がCOLLATEE(照合順序)の設定値で、COLLATEを指定する事により区別できるようになります。
この問題の詳細については別ページで説明しているので、良ければ参考にしてください。
MySQLのひらがなカタカナ、英数字の全角半角を区別する。COLLATEE(照合順序)設定