Kaip sukurti atsarginę kopiją/atkurti „MySQL“/„MariaDB“ ir „PostgreSQL“ naudojant „Automysqlbackup“ ir „Autopostgresqlbackup“ įrankius


Jei esate duomenų bazės administratorius (DBA) arba esate atsakingas už duomenų bazių priežiūrą, atsargines kopijas ir atkūrimą, žinote, kad negalite sau leisti prarasti duomenų. Priežastis paprasta: prarasti duomenis reiškia ne tik svarbios informacijos praradimą, bet ir finansiškai pakenkti jūsų verslui.

Dėl šios priežasties visada turite įsitikinti, kad:

1. jūsų duomenų bazių atsarginės kopijos daromos periodiškai,
2. šios atsarginės kopijos saugomos saugioje vietoje ir
3. reguliariai atliekate atkūrimo pratimus.

Nereikėtų pamiršti šios paskutinės veiklos, nes jūs nenorite susidurti su svarbia problema, neišbandę to, ką reikia padaryti tokioje situacijoje.

Šioje pamokoje mes supažindinsime jus su dviem gražiomis paslaugomis, skirtomis atitinkamai sukurti MySQL/MariaDB ir PostgreSQL duomenų bazes: automysqlbackup ir autopostgresqlbackup.

Kadangi pastarasis yra paremtas pirmuoju, paaiškinimą sutelksime į automysqlbackup ir išryškinsime skirtumus su autopgsqlbackup, jei tokių yra.

Primygtinai rekomenduojama atsargines kopijas laikyti tinklo kopijuose, sumontuotuose atsarginių kopijų kataloge, kad visos sistemos gedimo atveju jums vis tiek būtų taikoma.

Perskaitykite šiuos naudingus „MySQL“ vadovus:

„MySQL/MariaDB/PostgreSQL“ duomenų bazių diegimas

1. Šiame vadove daroma prielaida, kad turite veikti MySQL/MariaDB/PostgreSQL egzempliorius. Jei ne, įdiekite šiuos paketus:

# 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. Jūs turite bandomąją „MySQL/MariaDB/PostgreSQL“ duomenų bazę, kurią galite naudoti (patariama NEMOKAMAI naudoti „automysqlbackup“ arba „autopostgresqlbackup“ gamybos aplinkoje, kol nesusipažinsite su šiais įrankiais).

Priešingu atveju prieš tęsdami sukurkite dvi duomenų bazių pavyzdžius ir užpildykite jas duomenimis. Šiame straipsnyje naudosiu šias duomenų bazes ir lenteles:

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

„Automysqlbackup“ ir „autopgsqlbackup“ diegimas „CentOS 7“ ir „Debian 8“

3. Debian 8 versijoje saugyklose yra abu įrankiai, todėl juos įdiegti taip pat paprasta, kaip paleisti:

# aptitude install automysqlbackup autopostgresqlbackup

„CentOS 7“ turėsite atsisiųsti diegimo scenarijus ir juos paleisti. Žemiau esančiuose skyriuose daugiausia dėmesio skirsime šių įrankių įdiegimui, konfigūravimui ir testavimui „CentOS 7“, nes „Debian 8“ - kai jie beveik neveikia, mes atliksime reikiamus paaiškinimus vėliau šiame straipsnyje.

4. Pradėkime sukurdami darbinį katalogą /opt , norėdami atsisiųsti diegimo scenarijų ir jį paleisti:

# 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. Automysqlbackup konfigūracijos failas yra/etc/automysqlbackup viduje, pavadinimu myserver.conf. Pažvelkime į svarbiausias konfigūravimo direktyvas:

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

Konfigūravę „automysqlbackup“ pagal savo poreikius, primygtinai rekomenduojame patikrinti „README“ failą, esantį/etc/automysqlbackup/README.

6. Kai būsite pasirengę, paleiskite programą ir perduokite konfigūracijos failą kaip argumentą:

# automysqlbackup /etc/automysqlbackup/myserver.conf

Greitas kasdienio katalogo patikrinimas parodys, kad automysqlbackup sėkmingai veikė:

# pwd
# ls -lR daily

Žinoma, galite pridėti „crontab“ įrašą, kad „Automysqlbackup“ būtų paleistas geriausiai jūsų poreikius atitinkančiu dienos metu (žemiau pateiktame pavyzdyje kiekvieną dieną 1:30 val.):

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

7. Dabar specialiai atsisakykime mariadb_db duomenų bazės:

Sukurkime jį dar kartą ir atkurkime atsarginę kopiją. „MariaDB“ eilutėje įveskite:

CREATE DATABASE mariadb_db;
exit

Tada raskite:

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

Ir atkurkite atsarginę kopiją:

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

Autopostgresqlbackup diegimas ir konfigūravimas „CentOS 7“

8. Kad autopostgresql veiktų nepriekaištingai „CentOS 7“, pirmiausia turėsime įdiegti keletą priklausomybių:

# yum install mutt sendmail

Tada leidžia pakartoti procesą kaip anksčiau:

# 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

Leidžia padaryti scenarijų vykdomąjį ir paleisti/įjungti paslaugą:

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

Galiausiai redaguosime atsarginės kopijos katalogo nustatymo vertę:

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

Peržiūrėjus „automysqlbackup“ konfigūracijos failą, šį įrankį sukonfigūruoti labai lengva (ta užduoties dalis paliekama jums).

9. „CentOS 7“, o ne „Debian 8“, „autopostgresqlbackup“ geriausia paleisti kaip „postgres“ sistemos vartotoją, todėl norėdami tai padaryti, turėtumėte arba pereiti prie tos paskyros, arba prie „crontab“ failo pridėti „cron“ užduotį:

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

Beje, reikia sukurti atsarginės kopijos katalogą, o jo leidimai ir grupės nuosavybė turi būti rekursyviai nustatyti į 0770 ir postgres (vėlgi, to nereikės „Debian“):

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

Rezultatas:

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

10. Dabar galite atkurti failus, kai to reikia (nepamirškite tai padaryti kaip vartotojo postgres atkūrę tuščią duomenų bazę):

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

„Debian 8“ svarstymai

Kaip jau minėjome anksčiau, paprastesnis ne tik šių įrankių diegimas „Debian“, bet ir jų atitinkamos konfigūracijos. Konfigūracijos failus rasite:

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

Santrauka

Šiame straipsnyje mes paaiškinome, kaip įdiegti ir naudoti „automysqlbackup“ ir „autopostgresqlbackup“ (išmokę naudotis pirmuoju, galėsite įvaldyti ir antrąjį), du puikius duomenų bazės atsarginės kopijos įrankius, kurie gali padaryti jūsų užduotis kaip DBA ar sistemos administratoriaus/inžinieriaus daug lengviau.

Atkreipkite dėmesį, kad galite išplėsti šią temą nustatydami el. Pašto pranešimus arba siųsdami atsargines failus kaip priedus el. Paštu - tai nėra griežtai reikalinga, tačiau kartais tai gali būti naudinga.

Galiausiai nepamirškite, kad konfigūracijos failų leidimai turėtų būti nustatyti minimalūs (daugeliu atvejų - 0600). Nekantriai laukiame, ką manote apie šį straipsnį. Nedvejodami meskite mums pastabą naudodami žemiau esančią formą.