データベース運用において、バックアップの冗長化と効率的なストレージ管理は必須要件です。本スクリプトは、mysqldumpによるエクスポート処理を自動化し、ローカルディレクトリへの保存、別ホストへのファイル転送、およびオブジェクトストレージへのアップロードを一元化するシェルユーティリティです。
主要機能
- 指定されたデータベースの自動ダンプ取得と日付連番命名
- ローカルディレクトリにおける古いアーカイブの自動ローテート(保持期間設定対応)
- SSH鍵認証によるリモートサーバーへの差分同期(rsync/scp対応)
- Aliyun OSS などのクラウドストレージへのファイル転送
- 各保存ノードにおける保存期間の一元管理によるストレージ最適化
初期デプロイ
公開リポジトリからスクリプトを取得し、実行権限を付与します。以下のコマンドはcurlを用いた導入例です。
curl -O https://raw.githubusercontent.com/zxc7563598/mysql-backup-shell/main/mysql_backup.sh
chmod +x mysql_backup.sh
mv mysql_backup.sh db_backup_utility.sh
スクリプト内に定義されているデータベース接続パラメータ(ホスト名、ポート、認証情報、対象スキーマ)を運用環境に合わせて修正してください。
定期実行のスケジュール構成
cronを使用してバックアップジョブを自動化します。例として、每日AM2時30分に実行し、標準出力とエラーをログファイルへリダイレクトする場合の設定を示します。
crontab -e
# 追加する行
30 2 * * * /opt/scripts/db_backup_utility.sh >> /var/log/db_maintenance.log 2>&1
リモート同期の設定
別ノードへのデータ複製にはSSH公開鍵認証が推奨されます。Ed25519アルゴリズムで鍵ペアを生成し、リモートホストの認証リストに配置します。
ssh-keygen -t ed25519 -f ~/.ssh/db_replication_key -N ""
cat ~/.ssh/db_replication_key.pub | ssh admin@remote-host.example.com "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
生成した鍵情報と同期先の詳細をスクリプト内の設定セクションに記述します。変数名はスクリプト内部で更新されていますが、役割は同一です。
ACTIVATE_REMOTE_SYNC="true"
ENABLE_REMOTE_PRUNE="true"
REMOTE_HOST_ADDRESS="remote-host.example.com"
SSH_LISTEN_PORT=22
REMOTE_USER="backup_admin"
REMOTE_STORAGE_DIR="/data/replicas/mysql_dumps/"
クラウドストレージ(OSS)連携
Aliyun OSS へのアップロードには、公式CLIツールのossutil64を使用します。まず、公式ドキュメントを参照してバイナリを配置し、実行権限を付与してください(設定ファイルの初期化は不要です)。
次に、管理コンソールでバケットを作成し、AccessKey IDとAccessKey Secretを取得します。これらの情報はスクリプト内の以下のパラメータに設定します。
CLOUD_SYNC_ENABLED="true"
ENABLE_CLOUD_PRUNE="true"
DESTINATION_BUCKET="oss://production-db-archives/mysql-backups/"
CLOUD_AK_ID="EXAMPLE_AK_ID"
CLOUD_AK_SECRET="EXAMPLE_AK_SECRET"
CLOUD_REGION_ENDPOINT="oss-ap-northeast-1.aliyuncs.com"
環境変数またはスクリプト内でCLIへのパスを指定することで、バックアップ完了後に自動的にクラウドへ転送され、指定された保持期間を超えたファイルがクラウド側でも自動削除されます。