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サーバを起動できる