先日、KUSANAGI 9 が PostgreSQL 14 および 15 に対応し、PostgreSQL のアップグレードに対応しました。
KUSANAGI 9がPostgreSQL のアップグレードに対応
KUSANAGI 9がPostgreSQL 15に対応しました
WordPress は MySQL(MariaDB) で動かすことを前提としていますが、他の CMS 、例えば Drupal は PostgreSQL で稼働させることができます。
今回のニュースで知った方もいるかもしれませんが、KUSANAGI は PostgreSQL の利用にも対応しています。
今回紹介する kusanagi dbinit psql
/ kusanagi upgrade psql
コマンドでは、 kusanagi init
した時に設定したデータベースを切り替えたり、データベースのバージョンを上げることが可能です。
それでは実際に kusanagi dbinit psql
/ kusanagi upgrade psql
を使用すると何ができるのか見ていきましょう……と行きたいのですが、まずはこちらを見てください。
データベースのバックアップを取る
kusanagi dbinit psql
/ kusanagi upgrade psql
のどちらもデータベースを丸ごと変える処理です。
もちろん、 KUSANAGI は不備がないように万全を期しているつもりですが、絶対に失敗しないとは言えません。
何かあった時の対策として、 kusanagi dbinit psql
/ kusanagi upgrade psql
を実行する前には必ずデータベースのバックアップを取るようにしてください。
それでは、実際にバックアップを取る方法を2つ記載します。
スナップショットを取る
クラウドベンダーでは VM に紐づくディスクのスナップショットを取る機能が用意されています。
以下に代表的なクラウドベンダーでのスナップショットの作成手順を記載します。
AWS
AWS のコンソールにログイン
-> EC2 ダッシュボードを開く
-> メニューからボリュームを選択
-> 対象のディスクを選択
-> アクションからスナップショットを作成
Azure
Azure のコンソールにログイン
-> 対象のリソースグループを選択
-> 対象のディスクを選択
-> 上部メニューからスナップショットを作成
GCP
GCP のコンソールにログイン
-> 対象のプロジェクトを選択
-> メニューからディスクを選択
-> 対象のディスクを選択
-> 上部メニューからスナップショットを作成
このように、クラウドベンダーではディスクのスナップショットを取る機能が用意されていますので、この機能を利用して簡単にスナップショットを取ることができます。
復旧したい場合は、スナップショットからディスクを作成して、対象の VM にディスクをアタッチすれば手軽にスナップショットを取った状態まで戻すことができます。
データベースのダンプを取る
データベースにはダンプと呼ばれる、データベースのデータをファイルとして出力する機能が存在します。
以下に MariaDB と PostgreSQL のダンプの取り方を記載します。
MariaDB
MariaDB は MySQL と同じように mysqldump
を使用してデータベースのダンプを取ることができます。
mysqldump -h localhost -u root -p (対象データベース名) > (出力するファイルパス)
※ 実行する際に、データベースの root ユーザ(管理者ユーザにあたります)のパスワードの入力を求められます。
出力するファイルパスで指定したパスに、対象データベース名で指定したデータベースのデータが出力されます。
復旧する際には、以下のコマンドを使用します。
mysql -u root -p (対象データベース名) < ( mysqldump で出力したファイルパス)
※ 実行する際に、データベースの root ユーザ(管理者ユーザにあたります)のパスワードの入力を求められます。
これで、対象データベース名で指定したデータベースのデータを mysqldump を実行したの時のデータに戻すことができます。
PostgreSQL
PostgreSQL では pg_dump
を使用してデータベースのダンプを取ることができます。
pg_dump -h localhost -U postgres -d (対象データベース名) > (出力するファイルパス)
※ 実行する際に、データベースの postgres ユーザ(管理者ユーザにあたります)のパスワードの入力を求められます。
出力するファイルパスで指定したパスに、対象データベース名で指定したデータベースのデータが出力されます。
復旧する際には、以下のコマンドを使用します。
psql -h localhost -U postgres -d (対象データベース名) -f ( pg_dump で出力したファイルパス)
※ 実行する際に、データベースの postgres ユーザ(管理者ユーザにあたります)のパスワードの入力を求められます。
以上の手順を参考に、DB の環境を変える際には必ずバックアップを取るようにしてください。
それでは今度こそ kusanagi dbinit psql
/ kusanagi upgrade psql
を使用すると何ができるのか見ていきましょう。
MariaDB から PostgreSQL に切り替える
現在設定されているデータベースが MariaDB であり、それを PostgreSQL に切り替えたい場合は、
を使用します。kusanagi dbinit psql
注意していただきたいのですが、
によるデータベースの切り替えはデータ移行を伴いません。kusanagi dbinit psql
もし、既に MariaDB を利用していてデータベースを PostgreSQL に変更したい場合、
でデータベースを切り替えてもデータは移行されないので、ご自身によるデータ移行を行って下さい。kusanagi dbinit psql
これは kusanagi dbinit mariadb
コマンドも同様です。
それでは実際の例として、MariaDB を利用するデータベースとして既に kusanagi init
してある環境があるとします。
# kusanagi status
KUSANAGI Version 9.4.2-1.el8
(クラウド名)
:
(中略)
:
*** (active) mariadb : mariadb10.5 ***
* mariadb.service - MariaDB 10.5.22 database server
Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled)
Active: active (running) since Thu 2023-10-12 14:24:59 JST; 1min 3s ago
*** (inactive) psql : ***
*** (inactive) pgpool-II : ***
:
(中略)
:
status completed.
#
このように、 MariaDB 10.5 がインストールされていて、 PostgreSQL がインストールされていないことが確認できます。
それでは、この状態から kusanagi dbinit psql
を使用してデータベースを PostgreSQL に切り替えます。
# kusanagi dbinit psql --use psql13 --dbrootpass (DB 管理者ユーザーパスワード)
Last metadata expiration check: 0:09:31 ago on Thu Oct 12 14:23:56 2023.
pgdg-redhat-repo-latest.noarch.rpm 12 kB/s | 13 kB 00:01
Dependencies resolved.
================================================================================
Package Architecture Version Repository Size
================================================================================
Installing:
pgdg-redhat-repo noarch 42.0-35PGDG @commandline 13 k
:
:
dbinit psql completed.
dbinit completed.
#
dbinit psql completed.
および dbinit completed.
が表示されれば、切り替え成功です。
再び、 kusanagi status
を実行して環境を確認します。
# kusanagi status
KUSANAGI Version 9.4.2-1.el8
(クラウド名)
:
(中略)
:
*** (inactive) mariadb : mariadb10.5 ***
* mariadb.service - MariaDB 10.5.22 database server
Loaded: loaded (/usr/lib/systemd/system/./mariadb.service; disabled; vendor preset: disabled)
Active: inactive (dead)
*** (active) psql : psql13 ***
* postgresql-13.service - PostgreSQL 13 database server
Loaded: loaded (/usr/lib/systemd/system/postgresql-13.service; enabled; vendor preset: disabled)
Active: active (running) since Thu 2023-10-12 14:34:23 JST; 1min 27s ago
*** (active) pgpool-II : pgpool44 ***
* pgpool.service - Pgpool-II
Loaded: loaded (/usr/lib/systemd/system/pgpool.service; enabled; vendor preset: disabled)
Active: active (running) since Thu 2023-10-12 14:34:40 JST; 1min 11s ago
:
(中略)
:
status completed.
#
MariaDB が inactive になり、 PostgreSQL が active になりました。
これで切り替わったことが確認できました。
では実際に、 Drupal の環境をプロビジョニングしてみましょう。
# kusanagi provision --drupal --fqdn (FQDN) --noemail --dbname drupal_test --dbuser drupal_user --dbpass (DB ユーザーパスワード) drupal_test
Target directory is /home/kusanagi/drupal_test.
CREATE ROLE
provision postgresql completed.
provision db completed.
Last metadata expiration check: 0:18:48 ago on Thu Oct 12 14:40:28 2023.
:
(中略)
:
Provisioning of drupal_test completed. Access (FQDN) and install drupal.
provision completed.
#
provision completed.
と表示され、無事に Drupal がプロビジョニングされました。
指定した FQDN にアクセスしてみます。
このように、ちゃんと PostgreSQL で Drupal が動くことが確認できました。
なお、今回切り替える際に以下のコマンドを使用しました。
kusanagi dbinit psql --use psql13 --dbrootpass (DB 管理者ユーザーパスワード)
この、 --use psql13
が切り替える PostgreSQL のバージョンの指定となります。
この場合は、 PostgreSQL 13 となります。
対応可能なバージョンは、最下部に記載した KUSANAGI 9 のマニュアルを参照してください。
PostgreSQL の設定を最適化する
kusanagi dbinit psql
には使用するデータベースを切り替える以外にも、データベースの最適化を行うこともできます。
利用するデータベースが PostgreSQL の状態で kusanagi dbinit psql
にオプションを付けずに実行すると最適化が行えます。
# kusanagi dbinit psql
dbinit psql completed.
dbinit completed.
#
これで、 PostgreSQL の設定が最適化されました。
PostgreSQL のバージョンを上げる
それでは、最近対応しました PostgreSQL のバージョンを上げる方法を見ていきます。
先ほどの「MariaDB から PostgreSQL に切り替える」際に使用した kusanagi dbinit psql
では、オプションとして --use psql13
を指定しました。
これは前述したように、 PostgreSQL 13 のインストールとなります。
この PostgreSQL 13 を kusanagi upgrade psql
を使用して PostgreSQL 14 にバージョンを上げてみましょう。
# kusanagi upgrade psql --use psql14
Last metadata expiration check: 0:44:35 ago on Thu Oct 12 14:40:28 2023.
Dependencies resolved.
Nothing to do.
Complete!
:
(中略)
:
upgrade psql completed.
upgrade completed.
#
upgrade psql completed.
および upgrade completed.
が表示されれば、バージョンアップ成功です。
kusanagi status
で環境を見てみましょう。
# kusanagi status
KUSANAGI Version 9.4.2-1.el8
(クラウド名)
:
(中略)
:
*** (inactive) mariadb : mariadb10.5 ***
* mariadb.service - MariaDB 10.5.22 database server
Loaded: loaded (/usr/lib/systemd/system/./mariadb.service; disabled; vendor preset: disabled)
Active: inactive (dead)
*** (active) psql : psql14 ***
* postgresql-14.service - PostgreSQL 14 database server
Loaded: loaded (/usr/lib/systemd/system/postgresql-14.service; enabled; vendor preset: disabled)
Active: active (running) since Thu 2023-10-12 15:25:52 JST; 2min 42s ago
*** (active) pgpool-II : pgpool44 ***
* pgpool.service - Pgpool-II
Loaded: loaded (/usr/lib/systemd/system/pgpool.service; enabled; vendor preset: disabled)
Active: active (running) since Thu 2023-10-12 15:26:15 JST; 2min 19s ago
:
(中略)
:
status completed.
#
psql : psql13
から psql : psql14
に変わったことが確認できます。
このように、簡単に PostgreSQL のバージョンを上げることができました。
なお、 kusanagi upgrade psql
ではバージョンを上げることはできますが、下げることができない点はご注意ください。
こちらも、対応可能なバージョンは、最下部に記載した KUSANAGI 9 のマニュアルを参照してください。
初期設定時から PostgreSQL を使用する
今回紹介するコマンドから離れますが、 KUSANAGI の初期設定をする時点で既に PostgreSQL をインストールすることが決まっているのであれば、kusanagi init
で PostgreSQL を指定することができます。
kusanagi init --passwd (kusanagi ユーザーパスワード) --nophrase --dbrootpass (DB 管理者ユーザーパスワード) --psql13
このように、最後につけたオプション --psql13
が PostgreSQL 13 を使用することになります。
以前の Tech Column に kusanagi init
の紹介もありますので、こちらも合わせて見てみてください。
kusanagi initでKUSANAGIの初期設定を簡単に実行する
kusanagi dbinit psql
/ kusanagi upgrade psql
コマンドでできることは以上になります。
KUSANAGI は MariaDB だけでなく PostgreSQL も利用できますので、皆様ぜひとも活用してみてください。
KUSANAGI 9 コマンドのマニュアル (dbinit psql) :https://kusanagi.tokyo/document/commands/dbinit-psql/
KUSANAGI 9 コマンドのマニュアル (upgrade psql) :https://kusanagi.tokyo/document/commands/upgrade-psql/