Categories: Security

InnoDB iš Vidaus: ibdata1 ir Log Failai

ibdata1 failas yra vienas pačių svarbiausių failų visoje InnoDB infrastruktūroje. Be šio failo InnoDB tiesiog negalėtų funkcionuoti – šiame įraše panagrinėsime kodėl.

Kas yra ibdata1 ir Kodėl Šis Failas Toks Svarbus?

ibdata1 failas yra visos InnoDB infrastruktūros lentelių erdvė – šiame faile yra gyvybiškai svarbi informacija InnoDB varikliui. Štai kaip atrodo InnoDB infrastruktūra (atkreipkite dėmesį į ibdata1 vietą dešinėje):

InnoDB Infrastruktūra

ibdata1 faile yra kelios informacijos klasės, kurios yra būtinos norint palaikyti InnoDB veikimą.

Kas yra Faile ibdata1?

Deja, MySQL pagal nutylėjimą neteikia informacijos apie tai, kas saugoma ibdata1 faile, tačiau mes žinome tam tikrus dalykus. Šiame faile yra:

  • Lentelių duomenų puslapiai;
  • Lentelių indeksų puslapiai;
  • Duomenų žodynas;
  • Multiversioning Concurrency Control (MVCC) duomenys;
  • Anuliuotos erdvės (undo space);
  • Atstatymo segmentai;
  • Dvigubo rašymo (double write) buferis;
  • Įrašų (insert) buferis.

Štai ką visa tai reiškia:

  • Puslapis yra fiksuoto dydžio duomenų saugykla;
  • InnoDB duomenų žodyną sudaro vidinės sistemos lentelės, skirtos sekti objektus (lenteles, indeksus ir lentelių stulpelius);
  • MVCC užtikrina, kad jei kas nors skaito iš duomenų bazės tuo metu, kai kažkas į ją rašo, vis tiek bus matomi nuoseklūs duomenys. Šis metodas dažniausiai naudojamas duomenų bazių valdymo sistemose tam, kad būtų užtikrinta prieiga prie duomenų bazės;
  • Anuliavimų žurnalas (“undo log”) yra anuliuotų log įrašų rinkinys – anuliuotuose log įrašuose yra informacijos apie tai, kaip anuliuoti paskutinį pakitimą į indekso įrašą;
  • Atšaukiami (“rollback”) segmentai yra duomenų bazės objektai, naudojami anuliuotai informacijai sekti;
  • Dvigubo rašymo buferio (“double write buffer”) tikslas yra užkirsti kelią duomenų sugadinimui iš dalinų įrašų į puslapius;
  • InnoDB įrašų buferis yra standartinė InnoDB funkcija – variklis naudoja šią funkciją tam, kad atnaujinimai būtų atlikti vienu metu, o ne atskirai.

Darbas su ibdata1 – Konfigūracija

Jei kada dirbote su MySQL, turbūt pastebėjote, kad ibdata1 failas auga tada, kai įrašote duomenis į lentelę, turinčią InnoDB variklį. Taip pat galėjote pastebėti, kad MySQL nepateikia paprastų būdų kaip sumažinti šio failo dydį – taip yra todėl, nes ibdata1 failo negalima sumažinti, nebent ištrinsite visas duomenų bazes, neištrinsite su InnoDB susijusių failų ir iš naujo nepaleisite MySQL.

Norėdami sumažinti ibdata1 dydį, atlikite šiuos veiksmus:

  1. Pasiimkite MySQL duomenų atsarginę kopiją;
  2. Pašalinkite visas duomenų bazes išskyrus mysql ir performance_schema duomenų bazes;
  3. Sustabdykite MySQL;
  4. Ištrinkite ibdata1 ir ib_logfile* failus (jie bus sukurti iš naujo, kai iš naujo paleisite MySQL);
  5. Įjunkite MySQL ir atkurkite duomenų bazę iš atsarginės duomenų kopijos.

Atlikus šiuos veiksmus ir iš naujo paleidus MySQL, ibdata1 ir ib_logfile* failai bus sukurti iš naujo.

Nuo šiol sukūrus naują duomenų bazę, duomenų bazės lentelės bus atskiruose ibd* failuose, o ne ibdata1 faile – ibdata1 vis tiek augs, tačiau šiame faile bus tik lentelių metaduomenys, o ne patys duomenys. Jei duomenų bazės nebebus, ibd failai bus ištrinti.

Kas tie Log Įrašai ir Kas Juose Yra?

Log įrašų failuose (ib_logfile0 ir ib_logfile1) yra iš naujo atliktų įrašų (redo) įrašai. Jei MySQL staiga išjungiama ir iš naujo paleidžiama, iš naujo paleidus MySQL bus nuskaitomi ib_logfile0 ir ib_logfile1 failai ir bus patikrinama, ar nėra duomenų pakeitimų, kurių nebuvo faile ibdata1. Jei pakeitimų yra, jie bus atkartoti. Kai visi pakeitimai bus atkartoti ir išsaugoti, MySQL bus pasirengusi naujiems darbams.

Kitaip tariant, MySQL naudoja log failus tam, kad užtikrintų duomenų ilgaamžiškumą – variklis sugeba užtikrinti, kad staiga išjungus MySQL ar dingus energijai duomenys nebūtų prarasti.

Gero InnoDB log failų dydžio pasirinkimas yra gero MySQL įrašymo našumo pagrindas – innodb_log_buffer_size parametras turėtų sudaryti 25% innodb_log_file_size vertės.

Poveikis Atkūrimo Laikui

Kaip minėta ankščiau, jei MySQL grubiai išjungiama, iš naujo paleidus MySQL bus nuskaityti abu ib_logfile0 ir ib_logfile1 failai. Tai ir yra pagrindinė priežastis, kodėl yra labai svarbu tinkamai nustatyti reikšmę innodb_log_file_size kintamajam – log failo dydis turėtų būti kuo didesnis, bet ne didesnis, nei būtina. Padidinę log failo dydį gausite geresnį našumą, tačiau tai turi ir trūkumų: tokiu atveju padidės atkūrimo laikas po grubaus išjungimo ar gedimo.

Norint pasiekti pusiausvyrą tarp ganėtinai gero sistemos veikimo ir greito gedimų atkūrimo laiko būtina tinkamai nustatyti innodb_log_file_size reikšmę.

Norėdami nustatyti ir innodb_buffer_pool_size ir innodb_log_file_size reikšmes taip, kad gautumėte gerą balansą, galite vadovautis šiuo metodu:

  1. Išsiaiškinkite, kiek RAM turi Jūsų sistema (tai galite išsiaiškinti panaudoję Linux suteikiamas komandas, pavyzdžiui free komandą);
  2. Skirkite 75% (arba mažiau, priklausomai nuo serverio apkrovos) visos RAM atminties parametrui innodb_buffer_pool_size;
  3. Skirkite 25% vertės, paskirtos innodb_buffer_pool_size parametrams ..._log_file_size.

Santrauka

ibdata1 ir ib_logfile* failai yra itin svarbūs tinkamam InnoDB funkcionavimui – nors kai kuriais atvejais šie failai gali sukelti problemų, dažniausiai šias problemas galima greitai ir patikimai išspręsti.

Nirium

Recent Posts

Important Google Play Store Update: Google to Verify Developers to Block Malware in Apps

Developers of Android apps will soon need to verify their identity as a result of…

2 days ago

Millions of McDonald’s Job Applications Exposed: The Hidden Risk Behind the McDonald’s Breakfast Menu

A fan of the McDonald’s breakfast menu? Bad news - over 60 million job applications…

3 days ago

T Mobile Customers to Receive Data Breach Settlement Checks

In 2021, hackers had allegedly accessed sensitive personal information pertaining to over 53 million customers…

3 days ago

Is Your Seagate External Hard Drive Real? A Hard Drive Fraud Ring Uncovered in Malaysia

Seagate has uncovered a Seagate external hard drive and internal hard drive fraud ring in…

3 days ago

Hackers Are Using AI for Phishing and Spear Phishing Campaigns

Hackers are using generative AI for phishing and spear phishing campaigns. Learn more here!

4 days ago

Signed Up for a VPN Free Trial? Your Privacy May be in Danger

A Chrome VPN extension may pose a danger to your privacy. A VPN free trial…

5 days ago