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

ITshowoff Zagreb: Skalabilna web rjesenja
ITshowoff Zagreb: Skalabilna web rjesenjaITshowoff Zagreb: Skalabilna web rjesenja
ITshowoff Zagreb: Skalabilna web rjesenja
 
Project 2 itd
Project 2 itdProject 2 itd
Project 2 itd
 
итоги экспресс оценки май-2015
итоги экспресс оценки май-2015итоги экспресс оценки май-2015
итоги экспресс оценки май-2015
 
THE RIGHT ONE Second Draft
THE RIGHT ONE Second DraftTHE RIGHT ONE Second Draft
THE RIGHT ONE Second Draft
 
Digital system to consider how a modern energy source improve the system’s fu...
Digital system to consider how a modern energy source improve the system’s fu...Digital system to consider how a modern energy source improve the system’s fu...
Digital system to consider how a modern energy source improve the system’s fu...
 
6150426_Presentatie_Bluekens1280px_RT
6150426_Presentatie_Bluekens1280px_RT6150426_Presentatie_Bluekens1280px_RT
6150426_Presentatie_Bluekens1280px_RT
 
2-USauti-WomensImagesInMedia-LesleyUnivPresenation-SampleSlides
2-USauti-WomensImagesInMedia-LesleyUnivPresenation-SampleSlides2-USauti-WomensImagesInMedia-LesleyUnivPresenation-SampleSlides
2-USauti-WomensImagesInMedia-LesleyUnivPresenation-SampleSlides
 

More from Dinko Korunic (18)

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
 
ITshowoff-Dinko
ITshowoff-DinkoITshowoff-Dinko
ITshowoff-Dinko
 
CARNet-SNMP-ZenOSS-Radionica
CARNet-SNMP-ZenOSS-RadionicaCARNet-SNMP-ZenOSS-Radionica
CARNet-SNMP-ZenOSS-Radionica
 
DORS2010-Dinko
DORS2010-DinkoDORS2010-Dinko
DORS2010-Dinko
 
CUC2010-Dinko
CUC2010-DinkoCUC2010-Dinko
CUC2010-Dinko
 
FSEC2011-Dinko
FSEC2011-DinkoFSEC2011-Dinko
FSEC2011-Dinko
 
DORS2011-Dinko
DORS2011-DinkoDORS2011-Dinko
DORS2011-Dinko
 
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
 
FSEC2011: Reverzni inzenjering Android aplikacija
FSEC2011: Reverzni inzenjering Android aplikacijaFSEC2011: Reverzni inzenjering Android aplikacija
FSEC2011: Reverzni inzenjering Android aplikacija
 
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: MySQL Crash Recovery

  • 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