Sådan sikkerhedskopieres/gendannes MySQL/MariaDB og PostgreSQL ved hjælp af Automysqlbackup og Autopostgresqlbackup Tools


Hvis du er databaseadministrator (DBA) eller er ansvarlig for vedligeholdelse, sikkerhedskopiering og gendannelse af databaser, ved du, at du ikke har råd til at miste data. Årsagen er enkel: at miste data betyder ikke kun tab af vigtige oplysninger, men kan også skade din virksomhed økonomisk.

Af den grund skal du altid sørge for at:

1. dine databaser sikkerhedskopieres med jævne mellemrum,
2. disse sikkerhedskopier gemmes et sikkert sted og
3. du udfører restaureringsøvelser regelmæssigt.

Denne sidste aktivitet bør ikke overses, da du ikke vil løbe ind i et større problem uden at have praktiseret hvad der skal gøres i en sådan situation.

I denne vejledning introducerer vi dig til to gode hjælpeprogrammer til sikkerhedskopiering af henholdsvis MySQL/MariaDB og PostgreSQL-databaser: automysqlbackup og autopostgresqlbackup.

Da sidstnævnte er baseret på førstnævnte, vil vi fokusere vores forklaring på automysqlbackup og fremhæve forskelle med autopgsqlbackup, hvis nogen overhovedet.

Det anbefales kraftigt at gemme sikkerhedskopierne i en netværksshare, der er monteret i sikkerhedskopimappen, så du i tilfælde af et systemnedbrud stadig er dækket.

Læs følgende nyttige vejledninger til MySQL:

Installation af MySQL/MariaDB/PostgreSQL-databaser

1. Denne guide antager, at du skal have MySQL/MariaDB/PostgreSQL-instans kørende. Hvis ikke, skal du installere følgende pakker:

# 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. Du har en testende MySQL/MariaDB/PostgreSQL-database, som du kan bruge (du rådes til IKKE at bruge hverken automysqlbackup eller autopostgresqlbackup i et produktionsmiljø, før du er bekendt med disse værktøjer).

Ellers skal du oprette to eksempeldatabaser og udfylde dem med data, inden du fortsætter. I denne artikel vil jeg bruge 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);

Installation af automysqlbackup og autopgsqlbackup i CentOS 7 og Debian 8

3. I Debian 8 er begge værktøjer tilgængelige i arkiverne, så installation af dem er så simpelt som at køre:

# aptitude install automysqlbackup autopostgresqlbackup

Mens der i CentOS 7 skal du downloade installationsskripterne og køre dem. I afsnittene nedenfor vil vi udelukkende fokusere på installation, konfiguration og test af disse værktøjer på CentOS 7, da vi for Debian 8 - hvor de næsten fungerer ud af kassen - foretager de nødvendige afklaringer senere i denne artikel.

4. Lad os begynde med at oprette en fungerende mappe inde i /opt for at downloade installationsskriptet og kø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. Konfigurationsfilen til automysqlbackup er placeret inde i/etc/automysqlbackup under navnet myserver.conf. Lad os se på de mest relevante konfigurationsdirektiver:

# 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 konfigureret automysqlbackup efter dine behov, tilrådes det kraftigt at tjekke README-filen, der findes i/etc/automysqlbackup/README.

6. Når du er klar, skal du køre programmet og sende konfigurationsfilen som argument:

# automysqlbackup /etc/automysqlbackup/myserver.conf

En hurtig inspektion af den daglige mappe viser, at automysqlbackup har kørt med succes:

# pwd
# ls -lR daily

Selvfølgelig kan du tilføje en crontab-post for at køre automysqlbackup på et tidspunkt på dagen, der bedst passer til dine behov (1:30 hver dag i nedenstående eksempel):

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

7. Lad os nu drop mariadb_db-databasen med vilje:

Lad os oprette det igen og gendanne sikkerhedskopien. Skriv i MariaDB-prompten:

CREATE DATABASE mariadb_db;
exit

Find derefter:

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

Og gendan sikkerhedskopien:

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

Installation og konfiguration af autopostgresqlbackup i CentOS 7

8. For at autopostgresql skal fungere problemfrit i CentOS 7, skal vi først installere nogle afhængigheder:

# yum install mutt sendmail

Lad os derefter gentage processen 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

Lad os gøre scriptet eksekverbart og starte/aktivere tjenesten:

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

Endelig redigerer vi værdien af indstillingen til sikkerhedskopibiblioteket til:

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

Efter at have gennemgået konfigurationsfilen til automysqlbackup er det meget let at konfigurere dette værktøj (den del af opgaven overlades til dig).

9. I modsætning til Debian 8 i CentOS 7 køres autopostgresqlbackup bedst som postgres-systembrugeren, så for at gøre det skal du enten skifte til den konto eller tilføje et cron-job til crontab-filen:

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

Backupmappen skal forresten oprettes, og dens tilladelser og gruppeejerskab skal indstilles rekursivt til 0770 og postgres (igen, dette er IKKE nødvendigt 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. Nu kan du gendanne filerne, når det er nødvendigt (husk at gøre dette som brugerpostgres efter gendannelse af den tomme database):

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

Overvejelser i Debian 8

Som vi nævnte tidligere, er ikke kun installationen af disse værktøjer i Debian mere ligetil, men også deres respektive konfigurationer. Du finder konfigurationsfilerne i:

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

Resumé

I denne artikel har vi forklaret, hvordan man installerer og bruger automysqlbackup og autopostgresqlbackup (at lære at bruge den første hjælper dig også med at mestre den anden), to fantastiske sikkerhedskopieringsværktøjer til database, der kan gøre dine opgaver som en DBA eller systemadministrator/ingeniør meget nemmere.

Bemærk, at du kan udvide dette emne ved at konfigurere e-mail-underretninger eller sende backup-filer som vedhæftede filer via e-mail - ikke strengt krævet, men kan være nyttigt nogle gange.

Som en sidste note skal du huske, at tilladelserne til konfigurationsfiler skal indstilles til minimum (0600 i de fleste tilfælde). Vi ser frem til at høre, hvad du synes om denne artikel. Send os gerne en note ved hjælp af nedenstående formular.