Slik sikkerhetskopierer/gjenoppretter du MySQL/MariaDB og PostgreSQL ved å bruke verktøyene 'Automysqlbackup' og 'Autopostgresqlbackup'


Hvis du er databaseadministrator (DBA) eller er ansvarlig for å vedlikeholde, sikkerhetskopiere og gjenopprette databaser, vet du at du ikke har råd til å miste data. Årsaken er enkel: å miste data betyr ikke bare tap av viktig informasjon, men kan også skade virksomheten din økonomisk.

Av den grunn må du alltid sørge for at:

1. databasene dine sikkerhetskopieres med jevne mellomrom,
2. disse sikkerhetskopiene lagres på et trygt sted, og
3. du utfører restaureringsøvelser regelmessig.

Denne siste aktiviteten bør ikke overses, siden du ikke vil støte på et stort problem uten å ha øvd på hva som må gjøres i en slik situasjon.

I denne opplæringen vil vi introdusere deg for to fine verktøy for å sikkerhetskopiere MySQL/MariaDB og PostgreSQL-databaser, henholdsvis: automysqlbackup og autopostgresqlbackup.

Siden sistnevnte er basert på førstnevnte, vil vi fokusere vår forklaring på automysqlbackup og fremheve forskjeller med autopgsqlbackup, hvis noen i det hele tatt.

Det anbefales på det sterkeste å lagre sikkerhetskopiene i en nettverksressurs som er montert i sikkerhetskopikatalogen, slik at du fortsatt er dekket i tilfelle et systemkrasj.

Les følgende nyttige guider om MySQL:

Installere MySQL/MariaDB/PostgreSQL-databaser

1. Denne veiledningen forutsetter at du må ha MySQL/MariaDB/PostgreSQL-forekomsten kjørende. Hvis ikke, installer følgende pakker:

Fedora-baserte distribusjoner:

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

Debian og derivater:

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

2. Du har en testdatabase MySQL/MariaDB/PostgreSQL som du kan bruke (du anbefales å 2. strong style="color:red">IKKE bruk verken automysqlbackup eller autopostgresqlbackup i et produksjonsmiljø før du har blitt kjent med disse verktøyene).

Ellers oppretter du to eksempeldatabaser og fyller dem med data før du fortsetter. I denne artikkelen vil jeg bruke følgende databaser og tabeller:

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);

Installere automysqlbackup og autopgsqlbackup i CentOS 7 og Debian 8

3. I Debian 8 er begge verktøyene tilgjengelige i depotene, så det er like enkelt å installere dem som å kjøre:

aptitude install automysqlbackup autopostgresqlbackup

Mens du i CentOS 7 må laste ned installasjonsskriptene og kjøre dem. I avsnittene nedenfor vil vi fokusere utelukkende på å installere, konfigurere og teste disse verktøyene på CentOS 7 siden for Debian 8 – hvor de nesten fungerer rett ut av boksen, vil vi gjøre de nødvendige avklaringene senere i denne artikkelen.

Installere og konfigurere automysqlbackup i CentOS 7

4. La oss begynne med å lage en arbeidskatalog i /opt for å laste ned installasjonsskriptet og kjøre det:

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. Konfigurasjonsfilen for automysqlbackup ligger inne i /etc/automysqlbackup under navnet myserver.conf. La oss ta en titt på de fleste relevante konfigurasjonsdirektiver:

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"

Når du har konfigurert automysqlbackup i henhold til dine behov, anbefaler du på det sterkeste å sjekke ut README-filen som finnes i /etc/automysqlbackup/README.

MySQL Database Backup

6. Når du er klar, fortsett og kjør programmet ved å sende inn konfigurasjonsfilen som argument:

automysqlbackup /etc/automysqlbackup/myserver.conf

En rask inspeksjon av den daglige-katalogen vil vise at automysqlbackup har kjørt vellykket:

pwd
ls -lR daily

Selvfølgelig kan du legge til en crontab-oppføring for å kjøre automysqlbackup på et tidspunkt på dagen som passer best for dine behov (1:30 hver dag i eksemplet nedenfor):

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

Gjenopprette en MySQL-sikkerhetskopi

7. La oss nå slippe mariadb_db-databasen med vilje:

La oss lage den igjen og gjenopprette sikkerhetskopien. I MariaDB-ledeteksten skriver du inn:

CREATE DATABASE mariadb_db;
exit

Finn deretter:

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

Og gjenopprett sikkerhetskopien:

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;

Installere og konfigurere autopostgresqlbackup i CentOS 7

8. For at autopostgresql skal fungere feilfritt i CentOS 7, må vi først installere noen avhengigheter:

yum install mutt sendmail

La oss deretter gjenta prosessen som før:

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

La oss gjøre skriptet kjørbart og starte/aktivere tjenesten:

chmod 755 autopostgresqlbackup.sh
systemctl start postgresql
systemctl enable postgresql

Til slutt vil vi redigere verdien av sikkerhetskopikataloginnstillingen til:

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

Etter å ha gått gjennom konfigurasjonsfilen til automysqlbackup, er det veldig enkelt å konfigurere dette verktøyet (den delen av oppgaven er overlatt til deg).

9. I CentOS 7, i motsetning til Debian 8, kjøres autopostgresqlbackup best som postgres systembruker, så for å gjøre det bør du enten bytte til den kontoen eller legge til en cron-jobb i crontab-filen:

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

Sikkerhetskopieringskatalogen må forresten opprettes og dens tillatelser og gruppeeierskap må settes rekursivt til 0770 og postgres (igjen, dette vil IKKE være nødvendig i Debian):

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

Resultatet:

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

10. Nå kan du gjenopprette filene ved behov (husk å gjøre dette som brukerpostgres etter å ha gjenskapt den tomme databasen):

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

Betraktninger i Debian 8

Som vi nevnte tidligere, er ikke bare installasjonen av disse verktøyene i Debian enklere, men også deres respektive konfigurasjoner. Du finner konfigurasjonsfilene i:

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

Sammendrag

I denne artikkelen har vi forklart hvordan du installerer og bruker automysqlbackup og autopostgresqlbackup (å lære hvordan du bruker den første vil hjelpe deg med å mestre den andre også), to flotte databaser som sikkerhetskopieres verktøy som kan gjøre oppgavene dine som DBA eller systemadministrator/ingeniør mye enklere.

Vær oppmerksom på at du kan utvide dette emnet ved å konfigurere e-postvarsler eller sende sikkerhetskopifiler som vedlegg via e-post – ikke strengt nødvendig, men kan være nyttig noen ganger.

Som en siste merknad, husk at tillatelsene til konfigurasjonsfiler bør settes til minimum (0600 i de fleste tilfeller). Vi ser frem til å høre hva du synes om denne artikkelen. Send oss gjerne en melding ved å bruke skjemaet nedenfor.