MySQLは世界で最も多く利用されているオープンソースのデータベースです。MySQLはクライアント-サーバ型のデータベースで、データベースにアクセスするためには、あらかじめMySQLのサーバプログラムを起動しておく必要があります。MySQLサーバ(サーバプログラム)が起動している状態で、MySQLクライアントプログラムを起動するとMySQLデータベースにアクセスできます。

図に示すようにMySQLはクライアントプログラムとサーバプログラムの2つで動作しています。これはWebシステムにおけるWebブラウザとWebサーバの関係とよく似ています。クライアント-サーバ型で動作する利点は、クライアントプログラムとサーバプログラムを複数の異なるコンピュータ上で起動できます。また実際のデータの読み書きはサーバプログラムが行うことで、複数のクライアントプログラムからの要求を適切に処理できます。

MySQLサーバプログラムのインストール(Cloud9上でのインストール)

本稿、執筆時点でのCloud9上では、デフォルトでMySQLのクライアントプログラムのみインストールされていますので、MySQLのサーバプログラムをインストールする必要があります。

Cloud9(Amazon Linux 2)において、MySQLのサーバプログラムをインストールするためには以下のコマンドを実行します。

$ sudo yum install -y mysql-server

上記のコマンドを実行する前に sudo yum update -y と入力して既存のパッケージを更新しておくと良いでしょう。

上記のコマンドを実行すると数秒でMySQLのサーバプログラムがインストールされます。インストールの過程でターミナルには以下のようなログが出力されるでしょう。

...省略

Dependency Installed:
  mariadb-backup.x86_64 3:10.2.38-1.amzn2.0.1           mariadb-cracklib-password-check.x86_64 3:10.2.38-1.amzn2.0.1   mariadb-errmsg.x86_64 3:10.2.38-1.amzn2.0.1          mariadb-gssapi-server.x86_64 3:10.2.38-1.amzn2.0.1  
  mariadb-rocksdb-engine.x86_64 3:10.2.38-1.amzn2.0.1   mariadb-server-utils.x86_64 3:10.2.38-1.amzn2.0.1              mariadb-tokudb-engine.x86_64 3:10.2.38-1.amzn2.0.1   perl-Compress-Raw-Bzip2.x86_64 0:2.061-3.amzn2.0.2  
  perl-Compress-Raw-Zlib.x86_64 1:2.061-4.amzn2.0.2     perl-DBD-MySQL.x86_64 0:4.023-6.amzn2                          perl-DBI.x86_64 0:1.627-4.amzn2.0.2                  perl-IO-Compress.noarch 0:2.061-2.amzn2             
  perl-Net-Daemon.noarch 0:0.48-5.amzn2                 perl-PlRPC.noarch 0:0.2020-14.amzn2                           

Complete!

最後に Complete! というメッセージが確認できればMySQLのサーバプログラムのインストールは完了です。ただし注意点として、本稿執筆時点のCloud9ではMySQLの派生プロダクトであるMaria DBがインストールされます。Maria DBであってもMySQLデータベースと遜色なく利用できるのでそのまま開発を進めて大丈夫です。

コマンドについても補足しておくと yum コマンドはAmazon Linux 2のパッケージ管理コマンドです。yum install のあとにインストールするパッケージ名(ソフトウェアの名前、ここでは mysql-server)を指定します。また -y オプションは対話形式の操作を省略する(Yesと回答する)ものです。先頭の sudo とは管理者権限でコマンドを実行するという意味です。本講座の開発環境においては、パッケージを追加する操作は管理者権限が必要となります。

MySQLサーバプログラムの起動状態の確認

MySQLを利用する上で注意するポイントの1つは、サーバプログラムが起動していることを確認するという点です。MySQLサーバプログラムが起動していない場合は、あとのMySQLクライアントプログラムを実行しても、データベースに接続できないので注意が必要です。

Cloud9(Amazon Linux 2)において、MySQLのサーバプログラムが起動しているかどうかを確認するためには、以下のコマンドを実行します。

$ sudo systemctl status mariadb
● mariadb.service - MariaDB 10.2 database server
   Loaded: loaded (/usr/lib/systemd/system/mariadb.service; disabled; vendor preset: disabled)
  Drop-In: /usr/lib/systemd/system/mariadb.service.d
           └─tokudb.conf
   Active: inactive (dead)

sudo systemctl status とコマンドを入力するとMySQL(Maria DB)のサーバプログラムが起動しているかどうかを確認できます。出力の最後の部分で Active: inactive (dead) と出力されているので、MySQLのサーバプログラムが停止していることがわかります。

コマンドについても補足しておくと systemctl コマンドはAmazon Linux 2のサーバプログラムを管理するコマンドです。systemctl status と入力するとサーバプログラムのステータス(起動しているかどうかなど)を確認できます。systemctl status httpd とすればApacheの起動確認にも利用できます。

またMySQLのサーバプログラムが起動している場合は、以下のように出力されます。

$ sudo systemctl status mariadb
● mariadb.service - MariaDB 10.2 database server
   Loaded: loaded (/usr/lib/systemd/system/mariadb.service; disabled; vendor preset: disabled)
  Drop-In: /usr/lib/systemd/system/mariadb.service.d
           └─tokudb.conf
   Active: active (running) since Fri 2021-11-19 07:52:10 UTC; 3s ago
  Process: 4082 ExecStartPost=/usr/libexec/mysql-check-upgrade (code=exited, status=0/SUCCESS)
  Process: 3968 ExecStartPre=/usr/libexec/mysql-prepare-db-dir %n (code=exited, status=0/SUCCESS)
  Process: 3911 ExecStartPre=/usr/libexec/mysql-check-socket (code=exited, status=0/SUCCESS)
 Main PID: 4007 (mysqld)
   Status: "Taking your SQL requests now..."
    Tasks: 38
   Memory: 62.6M
   CGroup: /system.slice/mariadb.service
           └─4007 /usr/libexec/mysqld --basedir=/usr

MySQLのサーバプログラムが起動している場合は、出力に Active: active (running) since 〜 という記述が確認できます。

すでにMySQLサーバプログラムが起動している場合は、次の起動処理は不要です。

MySQLサーバプログラムの起動

それでは実際にMySQLのサーバプログラムを起動してみましょう。

$ sudo systemctl start mariadb

MySQLのサーバプログラムを起動する場合も systemctl コマンドを使用します。ただしコマンドの引数部分が status ではなく start となっている点に注意してください。

sudo systemctl status mariadb と入力してサーバプログラムが起動していることを確認します。

$ sudo systemctl status mariadb
● mariadb.service - MariaDB 10.2 database server
   Loaded: loaded (/usr/lib/systemd/system/mariadb.service; disabled; vendor preset: disabled)
  Drop-In: /usr/lib/systemd/system/mariadb.service.d
           └─tokudb.conf
   Active: active (running) since Fri 2021-11-19 07:52:10 UTC; 3s ago
  Process: 4082 ExecStartPost=/usr/libexec/mysql-check-upgrade (code=exited, status=0/SUCCESS)
  Process: 3968 ExecStartPre=/usr/libexec/mysql-prepare-db-dir %n (code=exited, status=0/SUCCESS)
  Process: 3911 ExecStartPre=/usr/libexec/mysql-check-socket (code=exited, status=0/SUCCESS)
 Main PID: 4007 (mysqld)
   Status: "Taking your SQL requests now..."
    Tasks: 38
   Memory: 62.6M
   CGroup: /system.slice/mariadb.service
           └─4007 /usr/libexec/mysqld --basedir=/usr

日時やPID(プロセスID)などの出力は環境によって異なります。上記のような内容が確認できれば大丈夫です。

以上でMySQLのサーバプログラムの起動は完了です。次はMySQLのクライアントプログラムを起動してみましょう。

参考:MySQLサーバプログラムの起動時のエラーログについて

Cloud9上にMySQLサーバプログラムをインストールすると、MySQLサーバの起動ログに以下のエラーメッセージ出力されることがあります。

Nov 19 08:14:21 ip-172-31-22-244.ap-northeast-1.compute.internal mysql-check-upgrade[8317]: ERROR: ld.so: object '/usr/lib64/libjemalloc.so.1' from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored.

libjemalloc ライブラリのロードに失敗しています。

上記のエラーが出力されていてもMySQLサーバにアクセスできますが、Cloud9のターミナルで以下のコマンドで jemalloc をインストールするとエラーは解消できます。

$ sudo yum install -y jemalloc

jemallocライブラリをインストールしたらMySQLのサーバプログラムを再起動しておきましょう。

$ sudo systemctl restart mariadb

まとめ

  • MySQLはクライアントサーバ型のデータベース
  • MySQLサーバをあらかじめ起動しておく必要がある
  • Linuxでは systemctl コマンドでMySQLサーバを起動できる