memiah.mysql-s3-backup
MySQL S3 バックアップ
この Ansible ロールは、Amazon AWS コマンドラインインターフェースをインストールし、個々の MySQL データベースのバックアップを Amazon S3 にアップロードするための bash スクリプトを設定します。
要件
このロールは、すでに MySQL がインストールされていることを前提としています。
GPG を有効にする場合は、それらの資格情報も作成する必要があります。
制限された権限を持つユーザーを作成することをお勧めします。以下は、バケット [bucket-name]
に対して制限された (作成・一覧・アップロード) アクセスを提供するために使用できるポリシーの例です。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [ "s3:CreateBucket", "s3:ListBucket" ],
"Resource": [ "arn:aws:s3:::[bucket-name]" ]
},
{
"Effect": "Allow",
"Action": [ "s3:PutObject" ],
"Resource": [ "arn:aws:s3:::[bucket-name]/*" ]
}
]
}
さらに、S3 内でのバケットのバージョン管理やライフサイクルについて検討することをお勧めします。
ロール変数
利用可能な変数は以下にリストアップされており、デフォルト値も示されています(defaults/main.yml
を参照):
mysql_backup_name
: "mysql-s3-backup"
このロールを識別するために使われる名前で、デフォルトのディレクトリ、ファイル、AWS プロファイル名に使用されます。
mysql_backup_dir
: "/opt/{{ mysql_backup_name }}"
バックアップスクリプトと設定が保存されるディレクトリです。
mysql_backup_cronfile
: "{{ mysql_backup_name }}"mysql_backup_cron_enabled
: truemysql_backup_cron_hour
: 23mysql_backup_cron_minute
: 0mysql_backup_cron_email
: false
Cron が有効で、毎日 23:00 に実行され、受信者にメールは送信されません。出力をメールで受け取りたい場合は、ここを受信者のメールアドレスに設定してください。
mysql_backup_aws_profile
: "{{ mysql_backup_name }}"
分離のために、このスクリプトコンテキスト用に新しい AWS プロファイルを作成します。プロファイルを無視する場合は "default"
に設定できます。
mysql_backup_aws_access_key
: "[access-key]"
あなたの Amazon AWS アクセスキーです。
mysql_backup_aws_secret_key
: "[secret-key]"
あなたの Amazon AWS シークレットキーです。
mysql_backup_aws_region
: eu-west-1
S3 バケットがある地域の名前です。
mysql_backup_aws_format
: text
AWS CLI からの出力形式です。
mysql_backup_gpg_secret_key
: False
バックアップが暗号化される GPG シークレットキーです。
mysql_backup_gpg_secret_dest
: "~/{{ mysql_backup_name }}-gpg.asc"
GPG シークレットキーを保存するために使用される場所です。
mysql_backup_system_user
: root
バックアップスクリプトと Cron ジョブを実行するユーザーです。
mysql_backup_config
: []
バックアップスクリプト自体のカスタマイズ(値は bash 構文を使用)。
timestamp: "$(date +"%Y-%m-%d_%H%M")"
バックアップディレクトリを作成するために使用される日付と時間 "YYYY-MM-DD_HHII"。backup_dir: "/tmp/mysql-s3-backups/${timestamp}"
アップロード前にファイルを保存するためのローカルバックアップディレクトリのパス。backup_dir_remove: "true"
スクリプトの完了時にローカルバックアップディレクトリを削除します。aws_bucket: "mysql-s3-backups"
デフォルトの AWS S3 バケット名。aws_dir: "$timestamp"
バックアップを保存するためのデフォルトの AWS ディレクトリ。aws_extra_arguments: "--endpoint https://s3-compatible-endpoint.example.com"
AWS CLI に渡す追加の引数。aws_enabled: "true"
Amazon S3 へのアップロードを有効にします。 false の場合、"backup_dir_remove" フラグは false に設定されます。aws_profile: "mysql-s3-backup"
使用する AWS プロファイルを設定します(~/.aws/credentials と ~/.aws/config)。mysql_slave: "false"
MySQL スレーブサーバーからバックアップを取る場合は true に設定します。これにより、スレーブが停止され、スクリプト終了時に再度起動されます。mysql_using_rds: "false"
RDS リードレプリカからバックアップする場合は true に設定します。これにより、標準の STOP / START SLAVE コマンドではなく、mysql.rds_stop_replication および mysql.rds_start_replication 関数が使用されます(これらは RDS で必要な権限を持っていません)。mysql_use_defaults_file: "true"
デフォルトの MySQL 設定ファイルを使用します。mysql_defaults_file: ""
設定ファイルの具体的な場所を指定します。例: "/etc/my.cnf"。mysql_user: ""
,mysql_password: ""
,mysql_host: ""
mysql_use_defaults_file が false の場合、これらのパラメータを使用して MySQL に接続を試みます。mysql_exclude: "information_schema|performance_schema|mysql|sys"
エクスポートから除外するデータベースのリストです。これはパイプで区切られたリスト(正規表現)です。mysqldump_args: "--triggers --routines --force --opt --add-drop-database"
データベースダンプに使用するデフォルトのフラグ。gpg_enabled: "false"
true の場合、バックアップは GPG で暗号化され、各バックアップファイルに ".gpg" サフィックスが追加されます。gpg_args: "--encrypt --batch --trust-model always"
GPG 暗号化に使用するデフォルトのフラグ。gpg_recipient: ""
公開鍵で暗号化されたファイルの受信者。gpg_sign: "false"
バックアップに署名を強制するフラグ。gpg_signer: ""
署名に使用するデフォルトの GPG キー。
依存関係
例プレイブック
- hosts: mysql-servers
vars_files:
- vars/main.yml
roles:
- memiah.mysql-s3-backup
vars/main.yml
の中では *:
mysql_backup_aws_access_key: "access_key_here"
mysql_backup_aws_secret_key: "secret_key_here"
mysql_backup_aws_region: eu-west-1
mysql_backup_config:
aws_profile: "{{ mysql_backup_aws_profile }}"
aws_bucket: "bucket_name_here"
backup_dir: "{{ mysql_backup_dir }}/backups/${timestamp}"
ライセンス
MIT / BSD
著者情報
このロールは、2016 年に Memiah Limited によって作成されました。