sql >> Database >  >> RDS >> Mysql

MySQL-transactiejournaal bijhouden

Je bent hier zeker op de goede weg.

Telkens wanneer InnoDB een transactie doet die moet worden vastgelegd, wordt dit gedaan als een vastlegging in twee fasen. Transactie wordt eerst in deze logboeken geschreven. Daarna worden ze van daaruit toegewijd.

Dit helpt enorm in het geval van een MySQL-crash of servercrash.

Wanneer u mysql opnieuw start, worden alle niet-vastgelegde vermeldingen in ib_logfile0 en ib_logfile1 opnieuw afgespeeld als onderdeel van het crashherstel van InnoDB om InnoDB in een harmonieuze staat te brengen (dit zijn consistente en duurzame delen van ACID-conformiteit )

Als u ib_logfile0 en ib_logfile1 verwijdert en mysql start, gaan alle niet-vastgelegde transacties in die bestanden verloren. Als tijdens de crashherstelcyclus de logbestanden ontbreken, worden ze opnieuw gegenereerd op basis van de innodb_log_file_size instelling.

Raadpleeg de MySQL-documentatie voor een gedetailleerde uitleg van InnoDB .

@karatedog het MVCC-gedeelte van InnoDB vindt plaats in de systeemtabelruimte, beter bekend als ibdata1. Alle gegevens die lijken te zijn vóór het begin van een transactie, worden vastgelegd zodat anderen die toegang hebben tot de benodigde rijen, de gegevens kunnen bekijken voordat er updates worden opgelegd. Dit maakt een zogenaamde HERHAALBARE LEES mogelijk. Dit valt onder de I van ACID-compliance, wat Isolatie betekent. Ik heb hierover berichten geschreven in de DBA StackExchange met betrekking tot verschillende scenario's waarin transactie-isolatie goed, slecht of lelijk is.

Wat MyISAM betreft, crashherstel is niet automatisch. Het crasht vrij gemakkelijk . Daarom is het SQL-commando REPAIR TABLE bestaat. Dat is ook de reden waarom het MySQL-hulpprogramma myisamchk heeft de -r optie om REPAIR TABLE uit te voeren voor MyISAM-tabellen die niet online zijn.

MariaDB en Aria zijn pogingen geweest om een ​​crashveilige opslagengine te maken als vervanging voor MyISAM.




  1. Hoe MySQL/Doctrine2-query's debuggen?

  2. Moet de variabele @myvariable-fout declareren met een ADO-geparametriseerde query

  3. Geef sommige velden meer relevantie en sorteer op relevantie in mysql full text search

  4. Databasebeveiliging in Oracle