wiki:Backup

Version 31 (modified by 222039, 10 days ago) ( diff )

--

Backup

Logical Backup

  • mysqldump - Стандардна алатка за logical backups
    • Целосна резервна копија: mysqldump -u root -p airportdb > airportdb_backup.sql
    • Специфични табели: mysqldump -u root -p airportdb flight flight_log > partial_backup.sql
    • Компресија: mysqldump -u root -p airportdb | xz > airportdb_backup.sql.xz
    • JSON: mysqldump -u root -p airportdb | mysql2json > airportdb_backup.json (Можно и во XML & CSV)
    • Само структура (без податоци): mysqldump -u root -p --no-data airportdb > schema_only.sql

Physical Backup

  • Целосен physical backup: mysqlbackup --backup-dir=/backup/full_backup backup
  • XtraBackup (САМО ЗА LINUX!!!):
    • Чекор 1: xtrabackup --backup --target-dir=/backups/full_backup
    • Чекор 2: xtrabackup --prepare --target-dir=/backups/full_backup
    • Чекор 3: restoration
  • Manual Backup:
    • Чекор 1: Stop MySQL - net stop MySQL80 | sudo systemctl stop mysql
    • Чекор 2: Копирање на MySQL data directory - C:\ProgramData\MySQL\MySQL Server 8.0\Data | /var/lib/mysql/
    • Чекор 3: Start MySQL - net start MySQL80 | sudo systemctl start mysql

Restoration

Logical Restore

  • Враќање на целата база: mysql -u root -p airportdb < airportdb_backup.sql
  • За враќање на специфични табели од целосниот backup треба:
    • Метод 1: Extract со sed
    • Метод 2: Extract со grep
    • Метод 3: Со awk
    • mysql -u root -p airportdb < extracted_table.sql

Од целосен SQL backup не може директно да се враќаат само одредени табели – мора прво да се издвојат со sed/grep/awk и да се внесе само тој дел во MySQL.

Physical Restore

  • Physical Restore:
    • Stop MySQL: net stop MySQL80 | sudo systemctl stop mysql
    • Избриши ја старата data directory (или rename): C:\ProgramData\MySQL\MySQL Server 8.0\Data | /var/lib/mysql/
    • Копирање на backup-от назад во data directory
    • Start MySQL: net start MySQL80 | sudo systemctl start mysql
  • XtraBackup:
    • Подготовка на backup-от: xtrabackup --prepare --target-dir=/backups/full_backup
    • Stop MySQL: sudo systemctl stop mysql
    • Враќање на backup-от: sudo xtrabackup --copy-back --target-dir=/backups/full_backup
    • Поставување на дозволи: sudo chown -R mysql:mysql /var/lib/mysql
    • Start MySQL: sudo systemctl start mysql

Верификација по Restoration

По враќањето на backup-от, задолжително провери:

  • SELECT COUNT(*) FROM table_name; - Провери број на записи
  • SHOW TABLES; - Провери дали сите табели се вратени
  • SHOW TABLE STATUS; - Провери статус на табелите
  • Тестирај неколку SELECT и JOIN queries

Point-in-Time Recovery (PITR)

Point-In-Time Recovery овозможува враќање на базата податоци до прецизен момент. Методот користи последен целосен backup и ги replay MySQL binary логовите (INSERT, UPDATE, DELETE) до одреден timestamp или позиција. За да работи PITR, binlog мора да биде вклучен.

Процедурата е:

  • Враќање на целосниот backup,
  • Извршување на mysqlbinlog со --stop-datetime
  • Внесување на replay настани назад во MySQL.

Поставување на Binary Log:

  • SHOW VARIABLES LIKE 'log_bin'; - Провери дали е овозможено binary logging
    • Ако не е овозможено, тогаш во my.ini
      • log_bin = mysql-bin
      • binlog_format = ROW
      • server_id = 1
  • SHOW BINARY LOGS; Прегледај binary логови
  • SHOW BINLOG EVENTS IN 'binlog.000001';

PITR Процес

  • Врати од последниот целосен backup
  • Примени binary логови до специфична точка во време
    • mysqlbinlog --stop-datetime="2025-11-15 13:35:00" binlog.000001 | mysql -u root -p airportdb
  • Враќање до определена позиција во binlog-от
    • mysqlbinlog --start-position=100 --stop-position=500 binlog.000003 | mysql -u root -p airportdb

Сценарија кога би се употребил PITR:

  • Случајно бришење податоци
  • Погрешни UPDATE команди
  • Кога треба да се вратат податоци од конкретен timestamp
  • Враќање по ransomware напади или злонамерни операции

Automation

Доколку сакаме процесот на backup да биде целосно автоматизиран, можеме да користиме:

  • Windows: Task Scheduler за да креираме задачи кои ќе ја извршуваат соодветната скрипта
  • Linux: cron jobs - crontab -e за да закажеме автоматски backups

Скриптата ќе ги содржи командите за извршување на backup-от, а на самата задача може да специфицираме на колку време да се повторува, на пример дневно или неделно. На овој начин се обезбедува редовно, сигурно и автоматско зачувување на податоците.

Препораки:

  • Тестирај ги backup-ите редовно
  • Чувај backups на повеќе локации (3-2-1 правило)
  • Мониторирај успешност на автоматските backups
  • Документирај ја restoration процедурата
Note: See TracWiki for help on using the wiki.