画像やリンクが無効になっている可能性もあるのでご了承下さい。
はじめに
当ブログが稼働しているサーバーは CentOS 7 で RDBMS は MariaDB を採用している。
構築当時に最新だった 10.1 も今では旧安定版という位置にある。その次に 10.2 もあって同様に旧安定版。
現行安定版は 10.3 となり 10.4 は RC 版。
MariaDB 10.1 で何か不足している事はあるのかと聞かれれば「無い」のだが、今後も長期的に運用していきたいのでここいらで最新の安定版にアップグレードしておこうと言うことで作業を行った。
単に新しい物好きなだけということもあるが……
下準備
事前の情報収集だけは怠ると痛い目を見るので MariaDB 10.1 から 10.3 へアップグレードするケースの情報を模索した。
MariaDB オフィシャル的には 10.1 から 10.3 への直接的なアップデートは非推奨だそうで、一旦バックアップを取ってから MariaDB 関連パッケージを全削除した後、10.3 のパッケージをインストール。でもってもバックアップから DB をリカバリするのがセオリーな様だった。
ちょっと地雷を踏み抜いてみる
では実際の所、直接アップデートかましたらどうなるのだろうかと VMware Player 上に構築してある本番環境と同環境を持つ検証環境にて MariaDB のリポジトリだけ書き換えて yum update
をしてみたら mariadb-server のインストールプロセスでエラーを吐いて mariadb-server だけ 10.1 でそれ以外のパッケージが 10.3 という壊れた環境になり MariaDB の起動が不能になった。
そこで yum remove mariadb-server
としたら依存関係処理にて Postfix と Dovecot-mysql が削除された。
改めて yum install mariadb-server
とするとリポジトリは 10.3 のままなので MariaDB 自体は全て 10.3 へのアップグレードが出来たがセキュリティ的な物で root でログイン不可となったから、力業で復旧させるハメに。
Postfix と Dovecot-mysql も改めてインストール。バックアップから設定を戻すと telnet localhost 25
でメールを送信出来る物の sendmail コマンドでメールの送信が出来な状態に。
少し追ってみると alternatives --display mta
で表示されるプログラムが sendmail.ssmtp にすり替わっていたのが原因だった。Postfix が削除されたタイミングで変わったらしい。これを sendmail.postfix に戻して全て解決と。
と、この様に MariaDB を 10.1 から 10.3 のリポジトリに書き換えて直接 yum update をかますと面倒な問題が発生すると分かった。
なるべく楽な手順を組む
MariaDB のパッケージを全削除すると依存関係で他パッケージまで削除される。よって、削除されるパッケージの設定ファイルやらバックアップを取っていく必要が出てくる。ちょっと面倒。
上記直接アップデートでエラーが出た mariadb-server だけを何とかすれば良いと思われるので、それを元に情報収集したらやはりというか mariadb-server だけ依存関係無視の削除で乗り越える方法が見つかった。
その方法を用いればバックアップは純粋に MariaDB 関連の物だけで済む。
出来た手順
VMware Player 上に構築してある本番環境と同じ検証環境上でアップグレード手順を模索し、結果をまとめたもの。
root 作業
この作業は全て root ユーザで行う。最初にバックアップ先ディレクトリを変数に入れておいて後の処理を少し分かりやすくしておく事にした。
su -
BKP=/storage/backups/mariadb
mkdir -p $BKP
筆者環境では一番余裕のあるパスをバックアップ先に指定した。もし同様に作業されるのであれば各々で任意のパスに変更する必要がある。
DB を使用するサーバーの停止
DB を叩く可能性のあるサーバーは全て停止させておく。
systemctl stop postfix dovecot nginx
設定ファイルと DB のバックアップ
設定ファイルは MariaDB の物のみ全て。
DB はダンプした sql ファイルに加えて念のために MariaDB を停止させた後、/var/lib/mysql
以下にある実ファイルもコピーしてよけておいた。
cp -rp /etc/my.cnf* $BKP
mysqldump -u root -p -x --all-databases > $BKP/mariadb_backup.sql
systemctl stop mariadb
cp -rp /var/lib/mysql $BKP
MariaDB 10.3 のリポジトリ設定
MariaDB オフィシャルリポジトリの設定を次のサイトで生成された物を用いる。
今回はアップグレード手順をテキストファイルに落としてまとめてからの作業とする為、エディタを使わずヒアドキュメントで流し込む方法をとった。
cat << EOF > /etc/yum.repos.d/mariadb10.3.repo
# MariaDB 10.3 CentOS repository list - created 2019-04-08 15:00 UTC
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.3/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
EOF
MariaDB 10.1 のリポジトリは削除するか無効化しておく。
MariaDB 10.1 の一部削除
mariadb-server のみ問題が起こることからこれを rpm コマンドを用いた依存関係無視の削除としておく。
rpm --nodeps -ev MariaDB-server
MariaDB 10.3 のアップデートとインストール
下記コマンドにて mariadb-server がインストールされ、それ以外のパッケージは 10.3 にアップデートされる。
yum install MariaDB-client MariaDB-server MariaDB-common MariaDB-shared MariaDB-devel galera
実行結果を yum history info にて取得した物は次の様な感じに。
Updated MariaDB-client-10.1.38-1.el7.centos.x86_64 @mariadb
Update 10.3.14-1.el7.centos.x86_64 @mariadb
Updated MariaDB-common-10.1.38-1.el7.centos.x86_64 @mariadb
Update 10.3.14-1.el7.centos.x86_64 @mariadb
Dep-Install MariaDB-compat-10.3.14-1.el7.centos.x86_64 @mariadb
Updated MariaDB-devel-10.1.38-1.el7.centos.x86_64 @mariadb
Update 10.3.14-1.el7.centos.x86_64 @mariadb
Install MariaDB-server-10.3.14-1.el7.centos.x86_64 @mariadb
Updated MariaDB-shared-10.1.38-1.el7.centos.x86_64 @mariadb
Update 10.3.14-1.el7.centos.x86_64 @mariadb
rpm -qa | grep -i mariadb
MariaDB-compat-10.3.14-1.el7.centos.x86_64
MariaDB-shared-10.3.14-1.el7.centos.x86_64
MariaDB-server-10.3.14-1.el7.centos.x86_64
MariaDB-devel-10.3.14-1.el7.centos.x86_64
MariaDB-common-10.3.14-1.el7.centos.x86_64
MariaDB-client-10.3.14-1.el7.centos.x86_64
MariaDB の初期設定
システム起動時に MariaDB が起動するように設定したあと MariaDB を起動させる。
続いてセキュアインストレーション (mysql_secure_installation
) を念のために実行しておく。root パスワード変更するか初回に聞かれるが "N"
と入れて変更しないままで OK。
systemctl enable mariadb
systemctl start mariadb
mysql_secure_installation
設定確認
本来はここでバックアップしていた MariaDB の設定ファイルを書き戻す所かなと思っていた物の、10.1 当時の設定ファイルがそのまま残っていたので設定ファイルのリカバリは不要だった。
もし設定ファイルが残っていなかった場合は次のコマンドで戻しておく。
cp -rp $BKP/my.cnf* /etc
# 設定内容を確認後に適用する
systemctl restart mariadb
設定を戻す時にワイルドカードを使うのが不安であれば ls コマンドに同様の引数を与えた ls $BKP/my.cnf*
なんて実行して処理されるファイルを目視確認しても良い。筆者はワイルドカードを用いたファイル操作時にはこうして ls コマンドで確認をしてから実行している。
DB のアップグレードを行う
MariaDB のバージョンアップに伴い DB の構造へ変化があった場合に備えて mysql_upgrade
コマンドを打っておく。
mysql_upgrade -u root -p
停止していたサーバーを起動する
冒頭で停止させていたサーバー群を起動させる。
systemctl start postfix dovecot nginx
出来た手順の予行演習
筆者の場合は収集した情報を元に検証環境上でここに示した手順を作って見た。
DB が原因で不測の事態が起こると本当にマズいので必ず検証環境上でテストを行ってから本番環境に適用するようにしよう。
個人運用のサーバーだからとは言ってもサービス停止時間が長引くのは色々と気分が悪い物で変な汗が噴き出た状態になる。
本番環境でアップグレード適用
出来た手順をそのまま本番環境で基本コピペで処理していったら「こんなものか…」という位にさっくりノントラブルで完了した。
動作確認
DB を叩くサーバーが正常にアクセス出来ているか等々動作確認を行っておく。
筆者の場合は WordPress の動作が出来る事を先ず確認をし、Dovecot の認証やそれを使う Postfix のメール送信などで行った。
MySQLTuner を用いて MariaDB の状態を診断するのも手。
おわりに
無事 MariaDB 10.1 から 10.3 へのアップグレード作業が完了出来た。
何にしても事前調査と検証環境上でのテストが大事だなという事で。
コメント