Kako sigurnosno kopirati/vratiti MySQL/MariaDB i PostgreSQL pomoću alata 'Automysqlbackup' i 'Autopostgresqlbackup'


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

Iz tog razloga uvijek morate biti sigurni da:

1. vaše se baze podataka povremeno sigurnosno kopiraju,
2. te sigurnosne kopije pohranjuju se na sigurno mjesto, i
3. redovito izvodite vježbe restauracije.

Ovu posljednju aktivnost ne smijete zanemariti jer ne želite naići na veliki problem, a da niste prakticirali što treba učiniti u takvoj situaciji.

U ovom vodiču predstavit ćemo vam dva zgodna pomoćna programa za sigurnosno kopiranje baza podataka MySQL/MariaDB i PostgreSQL: automysqlbackup i autopostgresqlbackup.

Budući da se potonji temelji na prvom, usredotočit ćemo se na naše objašnjenje na automysqlbackup i istaknuti razlike s autopgsqlbackupom, ako ih uopće ima.

Izričito se preporuča pohranjivanje sigurnosnih kopija u mrežni dio koji je montiran u direktoriju za sigurnosne kopije tako da u slučaju pada sustava i dalje budete pokriveni.

Pročitajte sljedeće korisne vodiče o MySQL-u:

Instaliranje baza podataka MySQL/MariaDB/PostgreSQL

1. Ovaj vodič pretpostavlja da morate imati pokrenutu instancu MySQL/MariaDB/PostgreSQL. Ako ne, instalirajte sljedeće pakete:

Distribucije temeljene na Fedori:

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 bazu podataka MySQL/MariaDB/PostgreSQL koju možete koristiti (savjetujemo vam da < strong style="color:red">NE koristite ni automysqlbackup ni autopostgresqlbackup u produkcijskom okruženju dok se ne upoznate s ovim alatima).

U suprotnom, stvorite dvije ogledne baze podataka i popunite ih podacima prije nastavka. U ovom članku koristit ću sljedeće baze podataka i tablice:

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 su alata dostupna u spremištima, tako da je njihova instalacija jednostavna poput pokretanja:

aptitude install automysqlbackup autopostgresqlbackup

Dok ćete u CentOS 7 morati preuzeti instalacijske skripte i pokrenuti ih. U odjeljcima u nastavku usredotočit ćemo se isključivo na instaliranje, konfiguriranje i testiranje ovih alata na CentOS 7 budući da za Debian 8 – gdje gotovo rade izvan kutije, mi ćemo napraviti potrebna pojašnjenja kasnije u ovom članku.

Instaliranje i konfiguriranje automysqlbackupa u CentOS 7

4. Počnimo stvaranjem radnog direktorija unutar /opt za preuzimanje instalacijske 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. Konfiguracijska datoteka za automysqlbackup nalazi se unutar /etc/automysqlbackup pod nazivom myserver.conf. Pogledajmo najrelevantnije upute za konfiguraciju:

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 ste konfigurirali automysqlbackup prema svojim potrebama, toplo vam savjetujemo da pogledate datoteku README koja se nalazi u /etc/automysqlbackup/README.

MySQL sigurnosna kopija baze podataka

6. Kada ste spremni, pokrenite program, prosljeđujući konfiguracijsku datoteku kao argument:

automysqlbackup /etc/automysqlbackup/myserver.conf

Brzi pregled dnevnog direktorija pokazat će da je automysqlbackup uspješno pokrenut:

pwd
ls -lR daily

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

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

Vraćanje MySQL sigurnosne kopije

7. Sada namjerno izbacimo mariadb_db bazu podataka:

Stvorimo ga ponovno i vratimo sigurnosnu kopiju. U upit 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;

Instaliranje i konfiguriranje autopostgresqlbackupa u CentOS 7

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

yum install mutt sendmail

Zatim ponovimo postupak kao prije:

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

Na kraju, uredit ćemo vrijednost postavke sigurnosnog direktorija na:

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

Nakon pregledavanja konfiguracijske datoteke automysqlbackupa, konfiguracija ovog alata je vrlo jednostavna (taj dio zadatka je prepušten vama).

9. U CentOS 7, za razliku od Debian 8, autopostgresqlbackup je najbolje pokrenuti kao postgres korisnik sustava, pa da biste to učinili trebali biste se prebaciti na taj račun ili dodati cron posao njegovoj crontab datoteci:

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

Usput, potrebno je kreirati rezervni direktorij, a njegova dopuštenja i vlasništvo grupe moraju biti postavljeni rekurzivno na 0770 i postgres (opet, ovo NEĆE biti potrebno u < jak>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 datoteke po potrebi (ne zaboravite to učiniti kao korisnički postgres nakon ponovnog stvaranja 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 Debianu jednostavnija, nego i njihove odgovarajuće konfiguracije. Konfiguracijske datoteke pronaći ćete u:

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

Sažetak

U ovom smo članku objasnili kako instalirati i koristiti automysqlbackup i autopostgresqlbackup (naučite kako koristiti prvi pomoći ćete svladati i drugi), dvije sjajne sigurnosne kopije baze podataka alate koji mogu učiniti vaše zadatke kao DBA ili administratora/inženjera mnogo lakšim.

Imajte na umu da ovu temu možete proširiti postavljanjem obavijesti e-poštom ili slanjem datoteka sigurnosne kopije kao privitaka putem e-pošte – nije striktno obavezno, ali ponekad može biti korisno.

Kao posljednja napomena, zapamtite da dopuštenja konfiguracijskih datoteka trebaju biti postavljena na minimum (0600 u većini slučajeva). Radujemo se čuti što mislite o ovom članku. Slobodno nam pošaljite poruku putem donjeg obrasca.