# Pełne przywracanie bazy z pliku SQL mysql -u root -p sklep < backup_sklep.sql # Jeśli baza nie istnieje — najpierw utwórz mysql -u root -p -e "CREATE DATABASE sklep CHARACTER SET utf8mb4;" mysql -u root -p sklep < backup_sklep.sql # Przywracanie z pliku skompresowanego gunzip < backup_sklep.sql.gz | mysql -u root -p sklep # lub: zcat backup_sklep.sql.gz | mysql -u root -p sklep # Przywracanie z podglądem postępu (pv) pv backup_sklep.sql | mysql -u root -p sklep # Przywracanie wewnątrz klienta mysql mysql -u root -p mysql> USE sklep; mysql> SOURCE /ścieżka/do/backup_sklep.sql;
mysql baza < backup.sql) czy wpierw usunąć starą bazę (DROP DATABASE sklep; CREATE DATABASE sklep;).
# Wyodrębnij definicję i dane jednej tabeli z pełnego dumpa # Wyodrębnij CREATE TABLE dla tabeli 'produkty' grep -A 100 "Table structure for table .produkty." backup.sql | \ grep -B 1 -A 100 "CREATE TABLE" | \ awk '/CREATE TABLE/,/ENGINE=/' > produkty_struktura.sql # Wyodrębnij dane (INSERT INTO) dla tabeli 'produkty' grep "^INSERT INTO .produkty." backup.sql > produkty_dane.sql # Przywróć tylko tę tabelę mysql -u root -p sklep < produkty_struktura.sql mysql -u root -p sklep < produkty_dane.sql # Alternatywnie: mysqldump z jedną tabelą od razu mysqldump -u root -p sklep produkty > produkty_backup.sql mysql -u root -p sklep < produkty_backup.sql
# Sprawdź czy binlog jest włączony mysql> SHOW VARIABLES LIKE 'log_bin'; mysql> SHOW BINARY LOGS; mysql> SHOW BINLOG EVENTS IN 'mysql-bin.000001' LIMIT 20; # Krok 1: Przywróć ostatni pełny backup mysql -u root -p sklep < backup_sklep_20240101.sql # Krok 2: Zastosuj zmiany z binlog od momentu backupu do awarii mysqlbinlog --start-datetime="2024-01-01 02:30:00" \ --stop-datetime="2024-01-15 14:22:00" \ mysql-bin.000001 mysql-bin.000002 | mysql -u root -p # Krok 3: Sprawdź wynik mysql -u root -p sklep -e "SELECT COUNT(*) FROM zamowienia;"
log_bin = /var/log/mysql/mysql-bin.log w pliku my.cnf.
| Scenariusz awarii | Metoda odtwarzania | Czas RTO |
|---|---|---|
| Przypadkowy DELETE/UPDATE bez WHERE | Przywrócenie z najnowszego backupu + binlog | Minuty–godziny |
| Uszkodzenie tabeli (crash) | REPAIR TABLE lub przywrócenie z backupu | Minuty |
| Awaria dysku twardego | Przywrócenie z backupu offsite na nowy serwer | Godziny |
| Błąd migracji (ALTER TABLE) | ROLLBACK lub przywrócenie z backupu z przed migracji | Minuty |
| DROP TABLE / DROP DATABASE | Przywrócenie z backupu + binlog (o ile DROP jest w binlogu) | Godziny |
Która metoda pozwala przywrócić bazę danych do dokładnie określonego momentu w przeszłości (nie tylko do momentu backupu)?
Który jest prawidłowy pierwszy krok przywracania bazy po awarii (przypadkowy DROP TABLE)?
Które polecenie przywracania jest BŁĘDNE?
mysql -u root -p baza < backup.sql (operator < = wejście!)gunzip < backup.sql.gz | mysql -u root -p bazamysqlbinlog mysql-bin.* | mysql ...