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