Kako napraviti sigurnosnu kopiju/vratiti MySQL/MariaDB i PostgreSQL koristeći alate 'Automysqlbackup' i 'Autopostgresqlbackup'


Ako ste administrator baze podataka (DBA) ili ste odgovorni za održavanje, pravljenje rezervnih kopija i vraćanje baza podataka, znate da ne možete priuštiti gubitak podataka. Razlog je jednostavan: gubitak podataka ne znači samo gubitak važnih informacija, već može i finansijski oštetiti vaše poslovanje.

Iz tog razloga, uvijek morate biti sigurni da:

1. vaše baze podataka se povremeno prave sigurnosne kopije,
2. te sigurnosne kopije su pohranjene na sigurnom mjestu, i
3. redovno izvodite restauratorske vježbe.

Ovu posljednju aktivnost ne treba zanemariti, jer ne želite da naiđete na veliki problem a da niste uvježbali šta treba učiniti u takvoj situaciji.

U ovom vodiču ćemo vas upoznati sa dva dobra uslužna programa za pravljenje rezervnih kopija MySQL/MariaDB i PostgreSQL baza podataka, respektivno: automysqlbackup i autopostgresqlbackup.

Pošto je ovo drugo zasnovano na prvom, fokusiraćemo naše objašnjenje na automysqlbackup i istaći razlike sa autopgsqlbackup, ako ih ima.

Izričito se preporučuje pohranjivanje sigurnosnih kopija u mrežni dio koji je montiran u direktorij sigurnosne kopije, tako da ćete i dalje biti pokriveni u slučaju pada u cijelom sistemu.

Pročitajte sljedeće korisne vodiče za MySQL:

Instaliranje MySQL/MariaDB/PostgreSQL baza podataka

1. Ovaj vodič pretpostavlja da morate imati pokrenutu instancu MySQL/MariaDB/PostgreSQL, ako ne, instalirajte slijedeći paketi:

Distribucije zasnovane na Fedora:

yum update && yum install mariadb mariadb-server mariadb-libs postgresql postgresql-server postgresql-libs

Debian i derivati:

aptitude update && aptitude install mariadb-client mariadb-server mariadb-common postgresql-client postgresql postgresql-common

2. Imate testnu MySQL/MariaDB/PostgreSQL bazu podataka koju možete koristiti (preporučuje se da < strong style="color:red">NEMOJTE koristiti ni automysqlbackup ni autopostgresqlbackup u proizvodnom okruženju dok se ne upoznate sa ovim alatima).

U suprotnom, kreirajte dvije uzorke baze podataka i popunite ih podacima prije nego što nastavite. U ovom članku ću koristiti sljedeće baze podataka i 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);

Instaliranje automysqlbackup i autopgsqlbackup u CentOS 7 i Debian 8

3. U Debianu 8, oba alata su dostupna u spremištima, tako da je njihova instalacija jednostavna kao i pokretanje:

aptitude install automysqlbackup autopostgresqlbackup

Dok u CentOS 7 morate preuzeti instalacione skripte i pokrenuti ih. U sljedećim odjeljcima ćemo se fokusirati isključivo na instalaciju, konfiguriranje i testiranje ovih alata na CentOS 7 budući da ćemo za Debian 8 – gdje oni gotovo rade iz kutije, dajte potrebna pojašnjenja kasnije u ovom članku.

Instalacija i konfiguracija automysqlbackup u CentOS 7

4. Počnimo kreiranjem radnog direktorija unutar /opt za preuzimanje instalacione skripte i pokretanje:

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. Konfiguracijski fajl za automysqlbackup se nalazi unutar /etc/automysqlbackup pod imenom myserver.conf. Pogledajmo najrelevantnije konfiguracijske direktive:

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"

Nakon što konfigurirate automysqlbackup prema vašim potrebama, preporučujemo vam da provjerite README datoteku koja se nalazi u /etc/automysqlbackup/README.

Backup MySQL baze podataka

6. Kada budete spremni, nastavite i pokrenite program, prosljeđujući konfiguracijski fajl kao argument:

automysqlbackup /etc/automysqlbackup/myserver.conf

Brza inspekcija dnevnog direktorija će pokazati da je automysqlbackup uspješno pokrenut:

pwd
ls -lR daily

Naravno, možete dodati unos crontab za pokretanje automysqlbackup u doba dana koje najbolje odgovara vašim potrebama (1:30 svaki dan u primjeru ispod):

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

Vraćanje MySQL sigurnosne kopije

7. Sada namjerno ispustimo bazu podataka mariadb_db:

Kreirajmo ga ponovo i vratimo rezervnu kopiju. U prompt MariaDB upišite:

CREATE DATABASE mariadb_db;
exit

Zatim pronađite:

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

I vratite sigurnosnu kopiju:

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;

Instalacija i konfiguracija autopostgresqlbackup u CentOS 7

8. Da bi autopostgresql radio besprijekorno u CentOS 7, morat ćemo prvo instalirati neke zavisnosti:

yum install mutt sendmail

Zatim ponovimo postupak kao i ranije:

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

Učinimo skriptu izvršnom i pokrenimo/omogućimo uslugu:

chmod 755 autopostgresqlbackup.sh
systemctl start postgresql
systemctl enable postgresql

Konačno, uredit ćemo vrijednost postavke direktorija sigurnosne kopije na:

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

Nakon što ste prošli kroz konfiguracijsku datoteku automysqlbackup, konfiguracija ovog alata je vrlo jednostavna (taj dio zadatka ostaje na vama).

9. U CentOS 7, za razliku od Debian 8, autopostgresqlbackup je najbolje pokrenuti kao postgres korisnik sistema, tako da da biste to učinili, trebate se ili prebaciti na taj račun ili dodati cron posao u njegovu crontab datoteku:

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

Usput, direktorij sigurnosne kopije mora biti kreiran i njegove dozvole i vlasništvo grupe moraju biti postavljeni rekurzivno na 0770 i postgres (opet, ovo NEĆE biti potrebno u Debian):

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. Sada možete vratiti fajlove kada je to potrebno (ne zaboravite da to uradite kao korisnički postgres nakon ponovnog kreiranja prazne baze podataka):

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

Razmatranja u Debianu 8

Kao što smo ranije spomenuli, ne samo da je instalacija ovih alata u Debian jednostavnija, već i njihove odgovarajuće konfiguracije. Konfiguracijske fajlove ćete pronaći u:

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

Sažetak

U ovom članku smo objasnili kako instalirati i koristiti automysqlbackup i autopostgresqlbackup (učenje kako koristiti prvi pomoći će vam da savladate i drugi), dvije odlične sigurnosne kopije baze podataka alati koji mogu učiniti vaše zadatke kao DBA ili sistem administratora/inženjera mnogo lakšim.

Imajte na umu da ovu temu možete proširiti postavljanjem obavještenja putem e-pošte ili slanjem datoteka rezervnih kopija kao priloga putem e-pošte – nije striktno obavezno, ali ponekad može biti korisno.

Kao završnu napomenu, zapamtite da bi dozvole konfiguracijskih datoteka trebale biti postavljene na minimum (0600 u većini slučajeva). Radujemo se što ćemo čuti što mislite o ovom članku. Slobodno nam pošaljite bilješku koristeći formu ispod.