SlideShare a Scribd company logo
1 of 20
Download to read offline
MYSQL
CRASH
RECOVERY
Dinko Korunić @ InfoMAR
OMG! MySQL je super!!!!!11ž
Dinko Korunić @ InfoMAR: MySQL Crash Recovery 2
Reality check
 backup:
◦ potpunost backup procedure i sadržaja?
◦ redovno testiranje restore procedure?
◦ brzina restorea u slučaju katastrofičnog
incidenta?
 master-slave replikacija
◦ postoji li nadzor? - postoje desetine
Nagios/ZenOSS pluginova za lag check!
◦ usporedba master-slave tablica:
mk-table-checksum
Dinko Korunić @ InfoMAR: MySQL Crash Recovery 3
Uobičajene metode backupa (1)
 redovni mysqldump:
◦ dnevni/satni/itd, selektivni ili cjelokupni
◦ flush tables with read lock
◦ MyISAM: --read-locks
◦ InnoDB: --single-transaction
◦ spor proces - moguće inkrementalno
kroz binlog:
--single-transaction --flush-
logs --master-data=2 --all-
databases
Dinko Korunić @ InfoMAR: MySQL Crash Recovery 4
Uobičajene metode backupa (2)
 druge backup metode:
◦ Bacula: Client Run Before Job
◦ AutoMySQLBackup
 replikacija:
◦ multi-master, master-slave kombinacije (ili
nešto treće) + mysqldump slavea
 Percona XtraBackup / InnoBackupEx:
◦ opis: hot backup / binlog-based backup
◦ streaming, komprimirani backupovi
◦ paralelni backupovi, inkrementali
Dinko Korunić @ InfoMAR: MySQL Crash Recovery 5
Uobičajene metode backupa (3)
 Percona XtraBackup / InnoBackupEx:
◦ innobackupex --stream=tar ./ |
ssh user@desthost “cat - >
/data/backups/backup.tar”
◦ backup InnoDB kroz binlog, MyISAM
standardno
◦ restore: kompletno (from the scratch) ili
parcijalno kroz binlog (Point In Time)
◦ gasi slave thread prije i aktivira poslije
◦ preporučena zamjena za mysqldump!
Dinko Korunić @ InfoMAR: MySQL Crash Recovery 6
Moguća oštećenja
 MyISAM corruption:
◦ --myisam-recover=backup,force
◦ REPAIR TABLE … USE FRM;
 InnoDB corruption:
◦ u praksi prevencija SEGV...
◦ innodb_force_recovery=4
◦ moguće opcije: 1, 2, 3, 4, ... 5, 6
 binlog corruption
 FRM corruption
Dinko Korunić @ InfoMAR: MySQL Crash Recovery 7
Alati za oporavak
 myisamchk: offline
◦ myisamchk -e *.MYI
◦ myisamchk --safe-recover *.MYI
 mysqlcheck (mysqlrepair): online!
◦ CHECK TABLE, REPAIR TABLE,
ANALYZE TABLE, OPTIMIZE TABLE
◦ mysqlcheck -A -r
 alternative:
◦ ako je server stabilan: dump and reload
◦ trikovi: ALTER TABLE ENGINE=…;
Dinko Korunić @ InfoMAR: MySQL Crash Recovery 8
Alati za ekstrakciju podataka
 innoinfo
◦ zaostao i neupotrebljiv
 percona-innodb-recovery-tool:
◦ bzr branch lp:percona-innodb-
recovery-tool
◦ sjajan offline alat za InnoDB (korupcija,
neželjeni drop, itd.)
◦ priprema: osnove C, format redaka
(COMPACT ili REDUNDANT), ibdata1 ili
*.idb, definicija tablica, raspon fizičkih
stranica željenog primarnog ključaDinko Korunić @ InfoMAR: MySQL Crash Recovery 9
Priprema laboratorija
 mysql server u recovery načinu:
◦ “laboratorij”: kompilirati posljednju inačicu,
pripremiti da radi samo u tekućem/radnom
direktoriju
◦ oporavak tipično iz primarnih ključeva
◦ praktičan problem:
 ikakav select/update/merge uzrokuje SEGV
 undo log purge – uzrokuje finalno brisanje
◦ innodb_force_recovery=4
◦ mysqld_safe --skip-grant-tables
&
Dinko Korunić @ InfoMAR: MySQL Crash Recovery 10
Ekstrakcija stranica (1)
 format / tip fizičkih redaka
◦ COMPACT: default MySQL >= 5.0.3
◦ REDUNDANT: starije inačice
◦ identifikacija: SHOW TABLE STATUS
◦ opcionalno: constraints_parser
 page_parser - ekstrakcija svih
stranica iz grupnog ibdata1:
◦ page_parser -5 –f ibdata1
◦ spremi sve stranice (i ID) po individualnim
direktorijima za svaku tablicu
Dinko Korunić @ InfoMAR: MySQL Crash Recovery 11
Ekstrakcija stranica (2)
 koji nam raspon stranica treba?
◦ CREATE TABLE innodb_table_monitor (id
int) ENGINE=InnoDB;
◦ MySQL error.log ili konzola
◦ INDEX: name PRIMARY, id 0 286, fields
1/11, type 3
◦ bitan je PK: tražimo 0-286 direktorij
◦ u slučaju *.ibd datoteka, najčešće ne treba
raditi split:
 innodb_file_per_table=1
Dinko Korunić @ InfoMAR: MySQL Crash Recovery 12
Spajanje stranica
 spajanje u jednu datoteku:
◦ uspješno pročitane stranice potrebno
spojiti kao pripremu za provjeru
konzistencije i ekstrakciju ispravnih
redaka:
◦ find pages-1246363747/0-286/ -
type f -name '*.page' | sort –n
| xargs cat >
tablica_pages_concat
Dinko Korunić @ InfoMAR: MySQL Crash Recovery 13
Definicije / ograničenja (1)
 create_defs.pl - definicije tablica:
◦ korak nakon ekstrakcije stranica, za
identifikaciju ispravnih redaka
◦ potreban aktivan (laboratorij) MySQL
servis
◦ ./create_defs.pl --
host=localhost --user=root --
password=lozinka --db=baza –
table=tablica >
include/table_defs.h
Dinko Korunić @ InfoMAR: MySQL Crash Recovery 14
Definicije / ograničenja (2)
 tipični primjer SQL definicije tablice:
◦ CREATE TABLE `t1` ( `ID` int(11), `NAME`
varchar(120), `N_FIELDS` int(10),
PRIMARY KEY (`ID`), KEY `NAME`
(`NAME`)) ENGINE=InnoDB DEFAULT
CHARSET=latin1
 PK:
◦ ID, DB_TRX_ID, DB_ROLL_PTR, NAME,
N_FIELDS
 SK:
◦ NAME, ID (PK!) Dinko Korunić @ InfoMAR: MySQL Crash Recovery 15
Definicije / ograničenja (3)
{ /* int(11) unsigned */
name: "ID",
type: FT_UINT,
fixed_length: 4,
has_limits: TRUE,
limits: {
can_be_null: FALSE,
uint_min_val: 0,
uint_max_val:
4294967295ULL
},
can_be_null: FALSE
},
{ /* varchar(120) */
name: "NAME",
type: FT_CHAR,
min_length: 0,
max_length: 120,
has_limits: TRUE,
limits: {
can_be_null: TRUE,
char_min_len: 0,
char_max_len: 120,
char_ascii_only: TRUE
},
can_be_null: TRUE
},
Dinko Korunić @ InfoMAR: MySQL Crash
Recovery 16
Definicije / ograničenja (4)
 interni zapisi (nije potrebno mijenjati):
◦ D_TRX_ID – ID zadnje transakcije koja je
uzrokovala taj zapis
◦ DB_ROLL_PTR – pokazivač na undo
record gdje je prethodna verzija retka
◦ DB_ROW_ID – prvo polje u tablicama bez
primarnog ključa
Dinko Korunić @ InfoMAR: MySQL Crash Recovery 17
Dohvat ispravnih redaka
 što preciznije definirati ograničenja:
◦ type, fixed_length, can_be_null
◦ has_limits:
 uint_min_val, uint_max_val
 char_min_len, char_max_len, char_ascii_only
 koristi se za constraints_parser
◦ definicije se statički kompiliraju u alat
◦ kod promjene potrebno rekompilirati alat!
◦ ./constraints_parser -5 -f
tablica_pages_concat
◦ izlaz: ime tablice i retciDinko Korunić @ InfoMAR: MySQL Crash Recovery 18
Kratki repetitorij
 safe_mysqld, innnodb_recovery=4
 format: REDUNDANT ili COMPACT
 raspon ID-jeva stranica same tablice
 kompiliranje
 ekstrakcija: page_parser
 spajanje u jednu datoteku: find + cat
 priprema definicija: create_defs.pl
 rekompiliranje
 constraints_parser
Dinko Korunić @ InfoMAR: MySQL Crash Recovery 19
EOF
 hvala na pažnji
 kompleksno područje, malo vremena
 pitanja, diskusija, poslovni kontakt,
suradnja, uplate na žiro račun 
◦ Dinko Korunić dinko.korunic@infomar.hr
 vidimo se iduće godine!
 pozdravi i preporuke:
◦ naš partner za cjelovita Web rješenja -
Netgen d.o.o.
Dinko Korunić @ InfoMAR: MySQL Crash Recovery 20

More Related Content

Viewers also liked

Tecnoadicciones
TecnoadiccionesTecnoadicciones
TecnoadiccionesAlmu Rubio
 
Le Corbusier y sus seguidores.
Le Corbusier y sus seguidores.Le Corbusier y sus seguidores.
Le Corbusier y sus seguidores.Gabriel Buda
 
mapa conceptual sobre los conceptos básicos del comportamiento organizacional
mapa conceptual sobre los conceptos básicos del comportamiento organizacional mapa conceptual sobre los conceptos básicos del comportamiento organizacional
mapa conceptual sobre los conceptos básicos del comportamiento organizacional Esther Green
 

Viewers also liked (7)

PDFMailer2163
PDFMailer2163PDFMailer2163
PDFMailer2163
 
Cultura Organizacional
Cultura OrganizacionalCultura Organizacional
Cultura Organizacional
 
Tecnoadicciones
TecnoadiccionesTecnoadicciones
Tecnoadicciones
 
DORS2010-Dinko
DORS2010-DinkoDORS2010-Dinko
DORS2010-Dinko
 
ITshowoff-Dinko
ITshowoff-DinkoITshowoff-Dinko
ITshowoff-Dinko
 
Le Corbusier y sus seguidores.
Le Corbusier y sus seguidores.Le Corbusier y sus seguidores.
Le Corbusier y sus seguidores.
 
mapa conceptual sobre los conceptos básicos del comportamiento organizacional
mapa conceptual sobre los conceptos básicos del comportamiento organizacional mapa conceptual sobre los conceptos básicos del comportamiento organizacional
mapa conceptual sobre los conceptos básicos del comportamiento organizacional
 

More from Dinko Korunic

Sigurnost-na-Internetu-III
Sigurnost-na-Internetu-IIISigurnost-na-Internetu-III
Sigurnost-na-Internetu-IIIDinko Korunic
 
CARNet-SNMP-ZenOSS-Radionica
CARNet-SNMP-ZenOSS-RadionicaCARNet-SNMP-ZenOSS-Radionica
CARNet-SNMP-ZenOSS-RadionicaDinko Korunic
 
VSS2014-kriminalitet
VSS2014-kriminalitetVSS2014-kriminalitet
VSS2014-kriminalitetDinko Korunic
 
VSS predavanje: Oblici racunalnog kriminaliteta
VSS predavanje: Oblici racunalnog kriminalitetaVSS predavanje: Oblici racunalnog kriminaliteta
VSS predavanje: Oblici racunalnog kriminalitetaDinko Korunic
 
ITshowoff Zagreb: Skalabilna web rjesenja
ITshowoff Zagreb: Skalabilna web rjesenjaITshowoff Zagreb: Skalabilna web rjesenja
ITshowoff Zagreb: Skalabilna web rjesenjaDinko Korunic
 
FSEC2011: Reverzni inzenjering Android aplikacija
FSEC2011: Reverzni inzenjering Android aplikacijaFSEC2011: Reverzni inzenjering Android aplikacija
FSEC2011: Reverzni inzenjering Android aplikacijaDinko Korunic
 
DORS2011: MySQL Crash Recovery
DORS2011: MySQL Crash RecoveryDORS2011: MySQL Crash Recovery
DORS2011: MySQL Crash RecoveryDinko Korunic
 
DORS2010: Vijetnamski Linux cluster
DORS2010: Vijetnamski Linux clusterDORS2010: Vijetnamski Linux cluster
DORS2010: Vijetnamski Linux clusterDinko Korunic
 
CUC2010: Linux datotecni sustavi
CUC2010: Linux datotecni sustaviCUC2010: Linux datotecni sustavi
CUC2010: Linux datotecni sustaviDinko Korunic
 

More from Dinko Korunic (15)

Tru64-Mreza
Tru64-MrezaTru64-Mreza
Tru64-Mreza
 
Tru64-Performanse
Tru64-PerformanseTru64-Performanse
Tru64-Performanse
 
Tru64-Alati
Tru64-AlatiTru64-Alati
Tru64-Alati
 
Sigurnost-na-Internetu-III
Sigurnost-na-Internetu-IIISigurnost-na-Internetu-III
Sigurnost-na-Internetu-III
 
T-Mobile-DNS
T-Mobile-DNST-Mobile-DNS
T-Mobile-DNS
 
CARNet-SNMP-ZenOSS-Radionica
CARNet-SNMP-ZenOSS-RadionicaCARNet-SNMP-ZenOSS-Radionica
CARNet-SNMP-ZenOSS-Radionica
 
VSS2014-kriminalitet
VSS2014-kriminalitetVSS2014-kriminalitet
VSS2014-kriminalitet
 
MTA-testiranje
MTA-testiranjeMTA-testiranje
MTA-testiranje
 
DNS-prirucnik
DNS-prirucnikDNS-prirucnik
DNS-prirucnik
 
VSS predavanje: Oblici racunalnog kriminaliteta
VSS predavanje: Oblici racunalnog kriminalitetaVSS predavanje: Oblici racunalnog kriminaliteta
VSS predavanje: Oblici racunalnog kriminaliteta
 
ITshowoff Zagreb: Skalabilna web rjesenja
ITshowoff Zagreb: Skalabilna web rjesenjaITshowoff Zagreb: Skalabilna web rjesenja
ITshowoff Zagreb: Skalabilna web rjesenja
 
FSEC2011: Reverzni inzenjering Android aplikacija
FSEC2011: Reverzni inzenjering Android aplikacijaFSEC2011: Reverzni inzenjering Android aplikacija
FSEC2011: Reverzni inzenjering Android aplikacija
 
DORS2011: MySQL Crash Recovery
DORS2011: MySQL Crash RecoveryDORS2011: MySQL Crash Recovery
DORS2011: MySQL Crash Recovery
 
DORS2010: Vijetnamski Linux cluster
DORS2010: Vijetnamski Linux clusterDORS2010: Vijetnamski Linux cluster
DORS2010: Vijetnamski Linux cluster
 
CUC2010: Linux datotecni sustavi
CUC2010: Linux datotecni sustaviCUC2010: Linux datotecni sustavi
CUC2010: Linux datotecni sustavi
 

DORS2011-Dinko

  • 2. OMG! MySQL je super!!!!!11ž Dinko Korunić @ InfoMAR: MySQL Crash Recovery 2
  • 3. Reality check  backup: ◦ potpunost backup procedure i sadržaja? ◦ redovno testiranje restore procedure? ◦ brzina restorea u slučaju katastrofičnog incidenta?  master-slave replikacija ◦ postoji li nadzor? - postoje desetine Nagios/ZenOSS pluginova za lag check! ◦ usporedba master-slave tablica: mk-table-checksum Dinko Korunić @ InfoMAR: MySQL Crash Recovery 3
  • 4. Uobičajene metode backupa (1)  redovni mysqldump: ◦ dnevni/satni/itd, selektivni ili cjelokupni ◦ flush tables with read lock ◦ MyISAM: --read-locks ◦ InnoDB: --single-transaction ◦ spor proces - moguće inkrementalno kroz binlog: --single-transaction --flush- logs --master-data=2 --all- databases Dinko Korunić @ InfoMAR: MySQL Crash Recovery 4
  • 5. Uobičajene metode backupa (2)  druge backup metode: ◦ Bacula: Client Run Before Job ◦ AutoMySQLBackup  replikacija: ◦ multi-master, master-slave kombinacije (ili nešto treće) + mysqldump slavea  Percona XtraBackup / InnoBackupEx: ◦ opis: hot backup / binlog-based backup ◦ streaming, komprimirani backupovi ◦ paralelni backupovi, inkrementali Dinko Korunić @ InfoMAR: MySQL Crash Recovery 5
  • 6. Uobičajene metode backupa (3)  Percona XtraBackup / InnoBackupEx: ◦ innobackupex --stream=tar ./ | ssh user@desthost “cat - > /data/backups/backup.tar” ◦ backup InnoDB kroz binlog, MyISAM standardno ◦ restore: kompletno (from the scratch) ili parcijalno kroz binlog (Point In Time) ◦ gasi slave thread prije i aktivira poslije ◦ preporučena zamjena za mysqldump! Dinko Korunić @ InfoMAR: MySQL Crash Recovery 6
  • 7. Moguća oštećenja  MyISAM corruption: ◦ --myisam-recover=backup,force ◦ REPAIR TABLE … USE FRM;  InnoDB corruption: ◦ u praksi prevencija SEGV... ◦ innodb_force_recovery=4 ◦ moguće opcije: 1, 2, 3, 4, ... 5, 6  binlog corruption  FRM corruption Dinko Korunić @ InfoMAR: MySQL Crash Recovery 7
  • 8. Alati za oporavak  myisamchk: offline ◦ myisamchk -e *.MYI ◦ myisamchk --safe-recover *.MYI  mysqlcheck (mysqlrepair): online! ◦ CHECK TABLE, REPAIR TABLE, ANALYZE TABLE, OPTIMIZE TABLE ◦ mysqlcheck -A -r  alternative: ◦ ako je server stabilan: dump and reload ◦ trikovi: ALTER TABLE ENGINE=…; Dinko Korunić @ InfoMAR: MySQL Crash Recovery 8
  • 9. Alati za ekstrakciju podataka  innoinfo ◦ zaostao i neupotrebljiv  percona-innodb-recovery-tool: ◦ bzr branch lp:percona-innodb- recovery-tool ◦ sjajan offline alat za InnoDB (korupcija, neželjeni drop, itd.) ◦ priprema: osnove C, format redaka (COMPACT ili REDUNDANT), ibdata1 ili *.idb, definicija tablica, raspon fizičkih stranica željenog primarnog ključaDinko Korunić @ InfoMAR: MySQL Crash Recovery 9
  • 10. Priprema laboratorija  mysql server u recovery načinu: ◦ “laboratorij”: kompilirati posljednju inačicu, pripremiti da radi samo u tekućem/radnom direktoriju ◦ oporavak tipično iz primarnih ključeva ◦ praktičan problem:  ikakav select/update/merge uzrokuje SEGV  undo log purge – uzrokuje finalno brisanje ◦ innodb_force_recovery=4 ◦ mysqld_safe --skip-grant-tables & Dinko Korunić @ InfoMAR: MySQL Crash Recovery 10
  • 11. Ekstrakcija stranica (1)  format / tip fizičkih redaka ◦ COMPACT: default MySQL >= 5.0.3 ◦ REDUNDANT: starije inačice ◦ identifikacija: SHOW TABLE STATUS ◦ opcionalno: constraints_parser  page_parser - ekstrakcija svih stranica iz grupnog ibdata1: ◦ page_parser -5 –f ibdata1 ◦ spremi sve stranice (i ID) po individualnim direktorijima za svaku tablicu Dinko Korunić @ InfoMAR: MySQL Crash Recovery 11
  • 12. Ekstrakcija stranica (2)  koji nam raspon stranica treba? ◦ CREATE TABLE innodb_table_monitor (id int) ENGINE=InnoDB; ◦ MySQL error.log ili konzola ◦ INDEX: name PRIMARY, id 0 286, fields 1/11, type 3 ◦ bitan je PK: tražimo 0-286 direktorij ◦ u slučaju *.ibd datoteka, najčešće ne treba raditi split:  innodb_file_per_table=1 Dinko Korunić @ InfoMAR: MySQL Crash Recovery 12
  • 13. Spajanje stranica  spajanje u jednu datoteku: ◦ uspješno pročitane stranice potrebno spojiti kao pripremu za provjeru konzistencije i ekstrakciju ispravnih redaka: ◦ find pages-1246363747/0-286/ - type f -name '*.page' | sort –n | xargs cat > tablica_pages_concat Dinko Korunić @ InfoMAR: MySQL Crash Recovery 13
  • 14. Definicije / ograničenja (1)  create_defs.pl - definicije tablica: ◦ korak nakon ekstrakcije stranica, za identifikaciju ispravnih redaka ◦ potreban aktivan (laboratorij) MySQL servis ◦ ./create_defs.pl -- host=localhost --user=root -- password=lozinka --db=baza – table=tablica > include/table_defs.h Dinko Korunić @ InfoMAR: MySQL Crash Recovery 14
  • 15. Definicije / ograničenja (2)  tipični primjer SQL definicije tablice: ◦ CREATE TABLE `t1` ( `ID` int(11), `NAME` varchar(120), `N_FIELDS` int(10), PRIMARY KEY (`ID`), KEY `NAME` (`NAME`)) ENGINE=InnoDB DEFAULT CHARSET=latin1  PK: ◦ ID, DB_TRX_ID, DB_ROLL_PTR, NAME, N_FIELDS  SK: ◦ NAME, ID (PK!) Dinko Korunić @ InfoMAR: MySQL Crash Recovery 15
  • 16. Definicije / ograničenja (3) { /* int(11) unsigned */ name: "ID", type: FT_UINT, fixed_length: 4, has_limits: TRUE, limits: { can_be_null: FALSE, uint_min_val: 0, uint_max_val: 4294967295ULL }, can_be_null: FALSE }, { /* varchar(120) */ name: "NAME", type: FT_CHAR, min_length: 0, max_length: 120, has_limits: TRUE, limits: { can_be_null: TRUE, char_min_len: 0, char_max_len: 120, char_ascii_only: TRUE }, can_be_null: TRUE }, Dinko Korunić @ InfoMAR: MySQL Crash Recovery 16
  • 17. Definicije / ograničenja (4)  interni zapisi (nije potrebno mijenjati): ◦ D_TRX_ID – ID zadnje transakcije koja je uzrokovala taj zapis ◦ DB_ROLL_PTR – pokazivač na undo record gdje je prethodna verzija retka ◦ DB_ROW_ID – prvo polje u tablicama bez primarnog ključa Dinko Korunić @ InfoMAR: MySQL Crash Recovery 17
  • 18. Dohvat ispravnih redaka  što preciznije definirati ograničenja: ◦ type, fixed_length, can_be_null ◦ has_limits:  uint_min_val, uint_max_val  char_min_len, char_max_len, char_ascii_only  koristi se za constraints_parser ◦ definicije se statički kompiliraju u alat ◦ kod promjene potrebno rekompilirati alat! ◦ ./constraints_parser -5 -f tablica_pages_concat ◦ izlaz: ime tablice i retciDinko Korunić @ InfoMAR: MySQL Crash Recovery 18
  • 19. Kratki repetitorij  safe_mysqld, innnodb_recovery=4  format: REDUNDANT ili COMPACT  raspon ID-jeva stranica same tablice  kompiliranje  ekstrakcija: page_parser  spajanje u jednu datoteku: find + cat  priprema definicija: create_defs.pl  rekompiliranje  constraints_parser Dinko Korunić @ InfoMAR: MySQL Crash Recovery 19
  • 20. EOF  hvala na pažnji  kompleksno područje, malo vremena  pitanja, diskusija, poslovni kontakt, suradnja, uplate na žiro račun  ◦ Dinko Korunić dinko.korunic@infomar.hr  vidimo se iduće godine!  pozdravi i preporuke: ◦ naš partner za cjelovita Web rješenja - Netgen d.o.o. Dinko Korunić @ InfoMAR: MySQL Crash Recovery 20