Kako varnostno kopirati/obnoviti MySQL/MariaDB in PostgreSQL z uporabo orodij Automysqlbackup in Autopostgresqlbackup


Če ste skrbnik baze podatkov (DBA) ali ste odgovorni za vzdrževanje, varnostno kopiranje in obnavljanje baz podatkov, veste, da si ne morete privoščiti izgube podatkov. Razlog je preprost: izguba podatkov ne pomeni samo izgube pomembnih informacij, ampak lahko tudi finančno škoduje vašemu poslovanju.

Iz tega razloga morate vedno zagotoviti, da:

1. vaše zbirke podatkov se občasno varnostno kopirajo,
2. te varnostne kopije so shranjene na varnem in
3. redno izvajate vaje za restavriranje.

Te zadnje dejavnosti ne smemo spregledati, saj nočete naleteti na glavno težavo, ne da bi vadili, kaj je treba storiti v takšni situaciji.

V tej vadnici vam bomo predstavili dva prijetna pripomočka za varnostno kopiranje baz podatkov MySQL/MariaDB in PostgreSQL: automysqlbackup in autopostgresqlbackup.

Ker slednji temelji na prvem, bomo svojo razlago osredotočili na automysqlbackup in poudarili razlike z autopgsqlbackup, če sploh.

Priporočljivo je, da varnostne kopije shranite v omrežni skupni rabi, nameščeni v imeniku varnostnih kopij, tako da boste v primeru sistemske zrušitve še vedno pokriti.

Preberite naslednje uporabne vodnike o MySQL:

Namestitev zbirk podatkov MySQL/MariaDB/PostgreSQL

1. V tem priročniku je predpostavljeno, da morate imeti nameščen primerek MySQL/MariaDB/PostgreSQL. Če ne, namestite naslednje pakete:

# yum update && yum install mariadb mariadb-server mariadb-libs postgresql postgresql-server postgresql-libs
# aptitude update && aptitude install mariadb-client mariadb-server mariadb-common postgresql-client postgresql postgresql-common

2. Imate preskusno bazo podatkov MySQL/MariaDB/PostgreSQL, ki jo lahko uporabljate (svetujemo vam, da v proizvodnem okolju NE uporabljate niti automysqlbackup niti autopostgresqlbackup, dokler se ne seznanite s temi orodji).

V nasprotnem primeru ustvarite dve vzorčni zbirki podatkov in jih pred nadaljevanjem zapolnite s podatki. V tem članku bom uporabil naslednje zbirke podatkov in tabele:

CREATE DATABASE mariadb_db;
CREATE TABLE tecmint_tbl (UserID INT AUTO_INCREMENT PRIMARY KEY, 
UserName VARCHAR(50), 
IsActive BOOL);
CREATE DATABASE postgresql_db;
CREATE TABLE tecmint_tbl (
UserID SERIAL PRIMARY KEY,
UserName VARCHAR(50),
IsActive BOOLEAN);

Namestitev automysqlbackup in autopgsqlbackup v CentOS 7 in Debian 8

3. V Debianu 8 sta v repozitorijih na voljo obe orodji, zato jih je enostavno namestiti:

# aptitude install automysqlbackup autopostgresqlbackup

Medtem ko boste v CentOS 7 morali prenesti namestitvene skripte in jih zagnati. V spodnjih razdelkih se bomo osredotočili izključno na namestitev, konfiguriranje in preizkušanje teh orodij na CentOS 7, saj bomo za Debian 8 - kjer skorajda ne delujejo - v nadaljevanju tega članka podali potrebna pojasnila.

4. Začnimo z ustvarjanjem delovnega imenika znotraj /opt , da prenesemo namestitveni skript in ga zaženemo:

# mkdir /opt/automysqlbackup
# cd /opt/automysqlbackup
# wget http://ufpr.dl.sourceforge.net/project/automysqlbackup/AutoMySQLBackup/AutoMySQLBackup%20VER%203.0/automysqlbackup-v3.0_rc6.tar.gz
# tar zxf automysqlbackup-v3.0_rc6.tar.gz
# ./install.sh

5. Konfiguracijska datoteka za automysqlbackup se nahaja znotraj/etc/automysqlbackup pod imenom myserver.conf. Oglejmo si najpomembnejše konfiguracijske smernice:

# Username to access the MySQL server
CONFIG_mysql_dump_username='root'
# Password
CONFIG_mysql_dump_password='YourPasswordHere'
# Host name (or IP address) of MySQL server
CONFIG_mysql_dump_host='localhost'
# Backup directory
CONFIG_backup_dir='/var/backup/db/automysqlbackup'
# List of databases for Daily/Weekly Backup e.g. ( 'DB1' 'DB2' 'DB3' ... )
# set to (), i.e. empty, if you want to backup all databases
CONFIG_db_names=(AddYourDatabase Names Here)
# List of databases for Monthly Backups.
# set to (), i.e. empty, if you want to backup all databases
CONFIG_db_month_names=(AddYourDatabase Names Here)
# Which day do you want monthly backups? (01 to 31)
# If the chosen day is greater than the last day of the month, it will be done
# on the last day of the month.
# Set to 0 to disable monthly backups.
CONFIG_do_monthly="01"
# Which day do you want weekly backups? (1 to 7 where 1 is Monday)
# Set to 0 to disable weekly backups.
CONFIG_do_weekly="5"
# Set rotation of daily backups. VALUE*24hours
# If you want to keep only today's backups, you could choose 1, i.e. everything older than 24hours will be removed.
CONFIG_rotation_daily=6
# Set rotation for weekly backups. VALUE*24hours. A value of 35 means 5 weeks.
CONFIG_rotation_weekly=35
# Set rotation for monthly backups. VALUE*24hours. A value of 150 means 5 months.
CONFIG_rotation_monthly=150
# Include CREATE DATABASE statement in backup?
CONFIG_mysql_dump_create_database='no'
# Separate backup directory and file for each DB? (yes or no)
CONFIG_mysql_dump_use_separate_dirs='yes'
# Choose Compression type. (gzip or bzip2)
CONFIG_mysql_dump_compression='gzip'
# What would you like to be mailed to you?
# - log   : send only log file
# - files : send log file and sql files as attachments (see docs)
# - stdout : will simply output the log to the screen if run manually.
# - quiet : Only send logs if an error occurs to the MAILADDR.
CONFIG_mailcontent='quiet'
# Email Address to send mail to? ([email )
CONFIG_mail_address='root'
# Do you wish to encrypt your backups using openssl?
#CONFIG_encrypt='no'
# Choose a password to encrypt the backups.
#CONFIG_encrypt_password='password0123'
# Command to run before backups (uncomment to use)
#CONFIG_prebackup="/etc/mysql-backup-pre"
# Command run after backups (uncomment to use)
#CONFIG_postbackup="/etc/mysql-backup-post"

Ko konfigurirate automysqlbackup glede na vaše potrebe, vam toplo priporočamo, da preverite datoteko README, ki jo najdete v/etc/automysqlbackup/README.

6. Ko ste pripravljeni, zaženite program in kot argument posredujte konfiguracijsko datoteko:

# automysqlbackup /etc/automysqlbackup/myserver.conf

Hiter pregled dnevnega imenika bo pokazal, da je automysqlbackup uspešno deloval:

# pwd
# ls -lR daily

Seveda lahko dodate vnos crontab za zagon automysqlbackup v času dneva, ki najbolj ustreza vašim potrebam (vsak dan ob 1.30 v spodnjem primeru):

30 01 * * * /usr/local/bin/automysqlbackup /etc/automysqlbackup/myserver.conf

7. Zdaj namenoma spustimo bazo podatkov mariadb_db:

Ustvarimo ga znova in obnovimo varnostno kopijo. V poziv MariaDB vnesite:

CREATE DATABASE mariadb_db;
exit

Nato poiščite:

# cd /var/backup/db/automysqlbackup/daily/mariadb_db
# ls

In obnovite varnostno kopijo:

# mysql -u root -p mariadb_db < daily_mariadb_db_2015-09-01_23h19m_Tuesday.sql
# mysql -u root -p
MariaDB [(none)]> USE mariadb_db; 
MariaDB [(none)]> SELECT * FROM tecmint_tb1;

Namestitev in konfiguriranje autopostgresqlbackup v CentOS 7

8. Da bo autopostgresql brezhibno deloval v CentOS 7, bomo morali najprej namestiti nekaj odvisnosti:

# yum install mutt sendmail

Nato ponovimo postopek kot prej:

# mkdir /opt/autopostgresqlbackup
# cd /opt/autopostgresqlbackup
# wget http://ufpr.dl.sourceforge.net/project/autopgsqlbackup/AutoPostgreSQLBackup/AutoPostgreSQLBackup-1.0/autopostgresqlbackup.sh.1.0
# mv autopostgresqlbackup.sh.1.0 /opt/autopostgresqlbackup/autopostgresqlbackup.sh

Omogočimo izvedbo skripta in zagon/omogočanje storitve:

# chmod 755 autopostgresqlbackup.sh
# systemctl start postgresql
# systemctl enable postgresql

Nazadnje bomo vrednost nastavitve varnostnega imenika uredili na:

BACKUPDIR="/var/backup/db/autopostgresqlbackup"

Po končani konfiguracijski datoteki automysqlbackup je konfiguriranje tega orodja zelo enostavno (tisti del naloge je prepuščen vam).

9. V CentOS 7, za razliko od Debiana 8, je autopostgresqlbackup najbolje zagnati kot uporabnika sistema postgres, zato morate za to preklopiti ali dodati opravilo cron v datoteko crontab:

# crontab -u postgres -e
30 01 * * * /opt/autopostgresqlbackup/autopostgresqlbackup.sh

Mimogrede je treba ustvariti varnostno kopijo, njegova dovoljenja in lastništvo skupine pa je treba rekurzivno nastaviti na 0770 in postgres (spet to v Debianu NE bo potrebno):

# mkdir /var/backup/db/autopostgresqlbackup
# chmod -R 0770 /var/backup/db/autopostgresqlbackup
# chgrp -R postgres /var/backup/db/autopostgresqlbackup

Rezultat:

# cd /var/backup/db/autopostgresqlbackup
# pwd
# ls -lR daily

10. Zdaj lahko datoteke obnovite po potrebi (ne pozabite, da to storite kot postgres uporabnika po ponovnem ustvarjanju prazne baze podatkov):

# gunzip -c postgresql_db_2015-09-02.Wednesday.sql.gz | psql postgresql_db

Premisleki v Debianu 8

Kot smo že omenili, ni le enostavnejša namestitev teh orodij v Debianu, temveč tudi njihove ustrezne konfiguracije. Konfiguracijske datoteke boste našli v:

  1. Automysqlbackup:/etc/default/automysqlbackup
  2. Autopostgresqlbackup:/etc/default/autopostgresqlbackup

Povzetek

V tem članku smo razložili, kako namestiti in uporabljati automysqlbackup in autopostgresqlbackup (učenje uporabe prvega vam bo pomagalo tudi pri obvladovanju drugega), dveh odličnih orodij za varnostno kopiranje zbirke podatkov, ki lahko opravijo vaše naloge kot skrbnik sistema ali skrbnik sistema veliko lažje.

Upoštevajte, da lahko to temo razširite z nastavitvijo e-poštnih obvestil ali pošiljanjem varnostnih kopij kot prilog po e-pošti - ni nujno potrebno, včasih pa lahko pridejo prav.

Kot zadnjo opombo ne pozabite, da je treba dovoljenja za konfiguracijske datoteke nastaviti na minimum (v večini primerov 0600). Veselimo se vašega mnenja o tem članku. Sprostite nam opombo s pomočjo spodnjega obrazca.