ShlinkのDBをローカルMariaDBからAlways FreeのマネージドMySQLに移行した話(後日談)

技術

はじめに

短縮URLサービスの Shlink を Ubuntu VM に直インストールして使い始めたとき、
とりあえず簡単に動かすために ローカルの MariaDB に接続させていました。

ところが、運用していくと気になる点が増えてきます。

  • バックアップや監視を自分でやらないといけない
  • サーバーを落としたときに DB ごと巻き込まれる
  • 他サービスと DB をまとめたい

「だったらマネージドDBに移せば解決じゃん」と思い、試してみたら…
Oracle Cloud の Always Free で MySQL(HeatWave)インスタンスが使えることに気づきました。
つまり 追加コストゼロでマネージド化できる。これなら使わない手はない!ということで、
Shlink の DB をローカル MariaDB から Always Free のマネージド MySQL に移行しました。


移行の流れ

マネージド側で準備

まずは Oracle Cloud(Always Free の MySQL HeatWave インスタンス)で 空のDBとユーザーを作成
文字コードは UTF8MB4、権限は Shlink が必要とする
SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER, INDEX を付与。

ローカル MariaDB からデータをダンプ

既存データは mysqldump --single-transaction でエクスポート。
InnoDB 前提ならこれで停止せずに抜けるのが便利。

mysqldump --single-transaction -u shlink -p shlink \
  | gzip > /tmp/shlink_$(date +%F).sql.gz

マネージド MySQL へリストア

gzip パイプでマネージド側に流し込み。

gunzip -c /tmp/shlink_2025-08-24.sql.gz \
  | mysql -h <managed-host> -P 3306 -u shlink -p shlink

DEFINER が原因でエラーになる場合は sed で削除して再実行。

Shlink の接続先を切り替え

今回は config/params/generated_config.php を編集して、新しいDBホストを指定。
その後 php vendor/bin/shlink-installer init を実行。

出力例:

Initializing database if needed... Success!
Updating database... Success!
Generating proxies... Success!

→ テーブル作成&マイグレーション完了。

APIキーを再発行

DBを新規にしたので旧キーは存在せず。
api-key:generate で新しいキーを作り、Web Client の servers.json に登録。

動作確認

curl -H "X-Api-Key: <KEY>" https://ドメイン/rest/v3/health を叩くと
{"status":"pass"} が返ってくる。
Web UI からも短縮URLの作成・統計ができることを確認。

ローカル MariaDB の完全削除

不要になったのでサービスを停止し、自動起動を無効化して削除。

sudo systemctl stop mariadb
sudo systemctl disable mariadb
sudo apt purge mariadb-server mariadb-client mariadb-common
sudo apt autoremove --purge
sudo rm -rf /etc/mysql /var/lib/mysql

dpkg -l | grep mariadb で何も出なければ完全に消えた状態。
サーバーのリソースも軽くなった。


移行してみての感想

「とりあえず動かす」ならローカルDBで十分ですが、

  • バックアップ
  • 冗長化
  • モニタリング

を考えると、本番運用はやはりマネージドDBが安心

しかも Oracle Cloud の Always Free を使えば 追加コストなしでクラウド側に任せられる。
結果として、ゼロ円で“管理いらず”の本番運用DBを手に入れられました。


まとめ

  • Shlink の DB をローカル MariaDB から Always Free のマネージドMySQL へ移行
  • dump → restore → generated_config.php 更新 → shlink-installer init の流れで簡単に切替可能
  • APIキーは新規発行が必要
  • ローカル MariaDB は stop/disable/purge で完全削除
  • 運用コストも金銭的コストもゼロに近い状態で、より安心して使えるようになった

コメント

タイトルとURLをコピーしました