freehck.script_mysql_backup
freehck.script_mysql_backup
Ten moduł tworzy skrypt do wykonywania kopii zapasowych mysql.
Robi zrzut bazy danych, a następnie może skompresować i zaszyfrować kopię przy użyciu aes256.
Może wysyłać powiadomienia do Slacka.
Może przechowywać kopię zapasową na S3 lub przesyłać ją na inny host za pomocą scp.
Zmienne roli
Zmienne podstawowe
mysql_backup_host: host mysql
mysql_backup_port: port mysql (domyślnie 3306)
mysql_backup_user: użytkownik mysql
mysql_backup_pass: hasło mysql
mysql_backup_db: baza danych mysql do wykonania kopii zapasowej (jeśli nie ustawione, zostanie użyta opcja --all-databases dla mysqldump)
mysql_backup_backend_use_s3: ustaw na true, jeśli chcesz przechowywać kopię zapasową na S3
mysql_backup_backend_use_scp: ustaw na true, jeśli chcesz przesłać kopię zapasową na inny host za pomocą scp
Zmienne backendu S3
mysql_backup_s3cfg_template: szablon konfiguracji s3fs (domyślny już jest dostępny, nie martw się)
mysql_backup_s3: opcje konfiguracji s3 w formacie jak poniżej
mysql_backup_s3:
username: "s3user"
access_key: "s3user-akey"
secret_key: "s3user-skey"
bucket: "nazwa-koszyka"
Zmienne backendu SCP
mysql_backup_scp_host: host przechowywania do skopiowania kopii zapasowej
mysql_backup_scp_user: użytkownik do logowania na hoście przechowującym
mysql_backup_scp_dst: ścieżka na hoście przechowującym do zapisania kopii zapasowej
mysql_backup_scp_identity_src: plik tożsamości do logowania na hoście przechowującym (tak, powinien to być klucz prywatny)
Nazewnictwo
mysql_backup_archive_prefix: po prostu nazwa kopii zapasowej lub wszystko przed znakiem czasowym
mysql_backup_archive_stamp: szablon znaku czasowego w formacie narzędzia date (domyślny to %F-%Hh%Mm%Ss, co daje znaki czasowe w formacie 2019-09-23-12h22m07s)
mysql_backup_script_name: jeśli chcesz zmienić nazwę podstawowego skryptu, śmiało
mysql_backup_custom_script_name: jeśli chcesz ustawić konkretną nazwę dla skryptu zadania, które rzeczywiście wykonuje kopię zapasową. Domyślnie to mysql-backup-<nazwa_bazy_danych>.sh, gdzie all, jeśli nie podano żadnej bazy danych do zrobienia kopii zapasowej.
mysql_backup_scp_identity_name: domyślnie to id_rsa, ale może być przydatne, aby to zmodyfikować w przypadku, gdy chcesz mieć wiele backendów SCP używających różnych kluczy.
mysql_backup_encrypt_aes_key_name: domyślnie to aes256.key, potrzebny, jeśli chcesz mieć różne klucze szyfrowania dla różnych zadań kopii zapasowej.
Powiadomienia
mysql_backup_warn_size: w GiB, domyślnie 0. Porównaj swoją kopię zapasową z tą wielkością. Jeśli twoja kopia zapasowa jest mniejsza, ostrzeżesz o tym.
mysql_backup_hostname: nazwa hosta (która będzie wydrukowana w wiadomościach Slacka)
mysql_backup_slack_webhook: jak napisano, to jest webhook Slacka; ustaw to, aby otrzymywać powiadomienia na Slacku.
Jak zdobyć webhook Slacka: https://get.slack.help/hc/en-us/articles/115005265063-Incoming-WebHooks-for-Slack
Zmienne kompresji i szyfrowania
mysql_backup_gzip: kompresuj plik kopii zapasowej
mysql_backup_encrypt_aes: szyfruj plik kopii zapasowej (jeśli gzip włączony, ta akcja zostanie wykonana SPECJALNIE PO gzip)
mysql_backup_encrypt_aes_key_src: klucz aes256 do szyfrowania twojej kopii zapasowej
Klucz Aes256 to po prostu 32 bajty losowych.
Możesz użyć następującego polecenia, aby go utworzyć: dd if=/dev/urandom of=aes256.key count=1 bs=32.
Jeśli preferujesz hasła tekstowe (to mniej bezpieczne), możesz użyć tego: pwgen -n1 -s 32 | tr -d '\n' >aes256.key.
Katalogi
mysql_backup_script_dir: katalog do przechowywania podstawowego skryptu
mysql_backup_custom_script_dir: katalog do przechowywania skryptów specyficznych dla odpowiednich zadań kopii zapasowej
mysql_backup_conf_dir: katalog do przechowywania plików konfiguracyjnych skryptu kopii zapasowej
mysql_backup_encrypt_aes_key_dir: katalog do przechowywania klucza szyfrowania aes256
mysql_backup_tmpdir: katalog do trzymania tymczasowych wyników (nie musisz tworzyć osobnego, domyślnie to /tmp)
Przekazywanie danych poza rolę
mysql_backup_save_facts_about_custom_script: jeśli ustawisz to na true, to rola zapisze pełną ścieżkę wygenerowanego skryptu zadania, który musi być uruchomiony, aby wykonać kopię zapasową, w zmiennej mysql_backup_last_generated_custom_script. Możesz użyć tej zmiennej do dodania specyficznego zadania cron dla tego skryptu.
Przykład Playbooka
# utwórz skrypt zadania do kopii zapasowej mysql
- rola: freehck.script_mysql_backup
# parametry połączenia mysql
mysql_backup_host: "{{ db_host }}"
mysql_backup_user: "{{ db_user }}"
mysql_backup_pass: "{{ db_pass }}"
mysql_backup_db: "{{ db_name }}"
# parametry przechowywania w backendzie
mysql_backup_backend_use_s3: nie
mysql_backup_backend_use_scp: tak
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 i szyfrowanie
mysql_backup_gzip: tak
mysql_backup_encrypt_aes: tak
mysql_backup_encrypt_aes_key_src: "{{ playbook_dir }}/files/aes256.bkp.key }}"
# inne
mysql_backup_save_facts_about_custom_script: tak
mysql_backup_logfile: "/var/log/mysql-backup.log"
tagi: [ backup, mysql ]
# to rozsądne, aby utworzyć zadanie cron dla tego skryptu zadania
- rola: freehck.crontask
crontask_file: "backups"
crontask_name: "kopiuj bazę danych"
crontask_hour: "12"
crontask_minute: "0"
crontask_job: "{{ mysql_backup_last_generated_custom_script }}"
crontask_user: "root"
crontask_commented_out: false
tagi: [ backup, mysql ]
Ważne informacje
Po wdrożeniu skryptu mysql-backup na swoim hoście, rozsądne byłoby przejść do hosta wykonującego zadania kopii zapasowej i uruchomić skrypt zadania z /opt/scripts bez parametrów. Jeśli przeszedł bez błędów i widzisz plik kopii zapasowej na przechowywaniu, to wszystko w porządku. Jeśli nie - dowiesz się, co było problemem. Na przykład, mogłeś zapomnieć dodać hosta przechowującego do known_hosts przy konfigurowaniu użytkowników. Lub twój szablon s3cfg mógł zawierać błąd. Nie zapomnij sprawdzić wszystkiego dwa razy: tworzenie kopii zapasowych to bardzo ważne zadanie.
Po sprawdzeniu, że kopia zapasowa została utworzona i przechowywana w odpowiednim miejscu, dokładnie ją sprawdź. Musisz być pewny, że możesz ją przywrócić.
Licencja
MIT
Informacje o autorze
Dmitrii Kashin, freehck@freehck.ru
ansible-galaxy install freehck.script_mysql_backup