freehck.script_mysql_backup

freehck.script_mysql_backup

このロールは、MySQLのバックアップを行うスクリプトを作成します。

データベースをダンプし、必要に応じてgzipで圧縮し、aes256で暗号化することができます。

Slackへのメッセージ送信も可能です。

バックアップをS3に保存したり、他のホストにscpで送信したりできます。

ロール変数

基本変数

mysql_backup_host: MySQLホスト

mysql_backup_port: MySQLポート(デフォルトは3306)

mysql_backup_user: MySQLユーザー

mysql_backup_pass: MySQLパスワード

mysql_backup_db: バックアップするMySQLデータベース(設定されていない場合、mysqldumpに--all-databasesオプションが渡されます)

mysql_backup_backend_use_s3: バックアップをS3に保存したい場合はtrueに設定してください

mysql_backup_backend_use_scp: scpを使用して他のホストにバックアップを送信したい場合はtrueに設定してください

S3バックエンド変数

mysql_backup_s3cfg_template: S3fs設定のテンプレート(デフォルトが提供されているので心配しないでください)

mysql_backup_s3: 次のような形式のS3設定オプション

mysql_backup_s3:
  username: "s3user"
  access_key: "s3user-akey"
  secret_key: "s3user-skey"
  bucket: "bucket-name"
SCPバックエンド変数

mysql_backup_scp_host: バックアップをコピーするストレージホスト

mysql_backup_scp_user: ストレージホストにログインするためのユーザー

mysql_backup_scp_dst: ストレージホストにバックアップを保存するパス

mysql_backup_scp_identity_src: ストレージホストにログインするために使用するアイデンティティファイル(はい、これは秘密鍵である必要があります)

名称

mysql_backup_archive_prefix: バックアップ名またはタイムスタンプ前のすべて

mysql_backup_archive_stamp: dateツール形式のタイムスタンプテンプレート(デフォルトは %F-%Hh%Mm%Ss で、結果のタイムスタンプは 2019-09-23-12h22m07s のようになります)

mysql_backup_script_name: 基本スクリプトの名前を変更したい場合はどうぞ

mysql_backup_custom_script_name: バックアップを実行するジョブスクリプトに特定の名前を設定したい場合。デフォルトは mysql-backup-<database_name>.sh で、はバックアップするデータベースが指定されていない場合は all になります。

mysql_backup_scp_identity_name: デフォルトは id_rsa ですが、異なる鍵を使う複数のSCPバックエンドを持ちたい場合は変更するのが便利です。

mysql_backup_encrypt_aes_key_name: デフォルトは aes256.key で、異なるバックアップタスクに対して異なる暗号化キーを持ちたい場合に必要です。

通知

mysql_backup_warn_size: GiB単位で、デフォルトは0です。このサイズとバックアップを比較します。バックアップがこれより小さい場合は警告します。

mysql_backup_hostname: ホスト名(Slackメッセージに印刷されます)

mysql_backup_slack_webhook: 上記の通り、SlackのWebhookです。Slack通知を受け取るために設定してください。

Slack Webhookを取得する方法: https://get.slack.help/hc/en-us/articles/115005265063-Incoming-WebHooks-for-Slack

圧縮と暗号化の変数

mysql_backup_gzip: gzipバックアップファイル

mysql_backup_encrypt_aes: バックアップファイルを暗号化します(gzipが有効な場合、このアクションはgzipの後に実行されます)

mysql_backup_encrypt_aes_key_src: バックアップを暗号化するためのaes256キー

Aes256キーは32バイトのランダムです。

次のコマンドを使用して作成できます: dd if=/dev/urandom of=aes256.key count=1 bs=32

より安全でない文字列パスワードを好む場合は、次のように使用できます: pwgen -n1 -s 32 | tr -d '\n' >aes256.key

ディレクトリ

mysql_backup_script_dir: 基本スクリプトを保存するディレクトリ

mysql_backup_custom_script_dir: 適切なバックアップジョブに特有のスクリプトを保存するディレクトリ

mysql_backup_conf_dir: バックアップスクリプトの設定ファイルを保存するディレクトリ

mysql_backup_encrypt_aes_key_dir: aes256暗号化キーを保存するディレクトリ

mysql_backup_tmpdir: 一時的な結果を保持するディレクトリ(特に別のものを作成する必要はなく、デフォルトで/tmpです)

ロールの外でデータを渡す

mysql_backup_save_facts_about_custom_script: trueに設定すると、バックアップを実行するために実行する必要がある生成されたジョブスクリプトの完全なパスを mysql_backup_last_generated_custom_script 変数に保存します。この変数を使用して、特定のcronタスクをこのスクリプトに追加できます。

例プレイブック

# MySQLバックアップジョブスクリプトを作成
- role: freehck.script_mysql_backup
  # MySQL接続パラメータ
  mysql_backup_host: "{{ db_host }}"
  mysql_backup_user: "{{ db_user }}"
  mysql_backup_pass: "{{ db_pass }}"
  mysql_backup_db: "{{ db_name }}"
  # バックエンドストレージパラメータ
  mysql_backup_backend_use_s3: no
  mysql_backup_backend_use_scp: yes
  mysql_backup_scp_host: "{{ hostvars['storage'].ansible_host }}"
  mysql_backup_scp_identity_src: "{{ playbook_dir }}/files/id_rsa.bkp.db01"
  mysql_backup_scp_user: 'file'
  mysql_backup_scp_dst: '/var/www/file/public/mysql-db-prod-backup'
  # gzipおよび暗号化
  mysql_backup_gzip: yes
  mysql_backup_encrypt_aes: yes
  mysql_backup_encrypt_aes_key_src: "{{ playbook_dir }}/files/aes256.bkp.key"
  # その他
  mysql_backup_save_facts_about_custom_script: yes
  mysql_backup_logfile: "/var/log/mysql-backup.log"
  tags: [ backup, mysql ]

# このジョブスクリプトに対してcronジョブを作成するのは正当です
- role: freehck.crontask
  crontask_file: "backups"
  crontask_name: "データベースのバックアップ"
  crontask_hour: "12"
  crontask_minute: "0"
  crontask_job: "{{ mysql_backup_last_generated_custom_script }}"
  crontask_user: "root"
  crontask_commented_out: false
  tags: [ backup, mysql ]

重要な情報

MySQLバックアップスクリプトをホストにデプロイした後、バックアップタスクを実行するホストに行って、パラメータなしで /opt/scripts のジョブスクリプトを実行するのが理にかなっています。エラーなく通過し、ストレージにバックアップファイルが見える場合は、すべて問題ありません。そうでなければ、問題が何かを見つけることができます。例えば、ユーザーを設定する際にストレージホストを known_hosts に追加するのを忘れたかもしれません。あるいは、s3cfg テンプレートに間違いが含まれている可能性があります。バックアップ作業は非常に重要なタスクなので、すべてを二度確認するのを忘れないでください。

バックアップが正しく作成され、正しい場所に保存されていることを確認したら、注意深く確認してください。それを使って復元できることを確信する必要があります。

ライセンス

MIT

著者情報

Dmitrii Kashin, freehck@freehck.ru

プロジェクトについて

install a script performing mysql backups

インストール
ansible-galaxy install freehck.script_mysql_backup
ライセンス
mit
ダウンロード
1.2k
所有者