sql >> Databasteknik >  >> RDS >> Mysql

MySQL transaktionsjournalföring

Du är definitivt på rätt väg här.

Närhelst InnoDB gör en transaktion som måste begås, görs den som en tvåfasig commit. Transaktionen skrivs först i dessa loggar. Sedan är de engagerade därifrån.

Detta hjälper en hel del i händelse av en MySQL-krasch eller serverkrasch.

När du startar om mysql, spelas alla oengagerade poster i ib_logfile0 och ib_logfile1 upp som en del av kraschåterställningen av InnoDB för att få InnoDB till ett harmoniskt tillstånd (Detta är konsekventa och hållbara delar av ACID-efterlevnad )

Om du tar bort ib_logfile0 och ib_logfile1 och startar mysql, förloras alla oengagerade transaktioner som dessa filer innehöll. Under kraschåterställningscykeln, om loggfilerna saknas, genereras de på nytt baserat på innodb_log_file_size inställning.

Se MySQL-dokumentationen för en detaljerad förklaring av InnoDB .

@karatedog MVCC-delen av InnoDB sker inom systemtabellutrymmet, mer känd som ibdata1. Oavsett data som verkar vara före starten av en transaktion registreras för att andra som kommer åt de nödvändiga raderna ska kunna se data innan några uppdateringar infördes. Detta möjliggör vad som kallas REPEATABAR-LÄS. Detta faller under I för ACID-efterlevnad, jag menar isolering. Jag skrev inlägg om detta i DBA StackExchange angående olika scenarier där transaktionsisolering är bra, dålig eller ful.

När det gäller MyISAM är kraschåterställning inte automatisk. Det kraschar ganska lätt . Det är därför SQL-kommandot REPAIR TABLE existerar. Det är också därför MySQL-verktyget myisamchk har -r alternativet för att utföra REPAIR TABLE för MyISAM-tabeller som inte är online.

MariaDB och Aria har varit försök att göra en kraschsäker lagringsmotor som ersättning för MyISAM.




  1. Säkra php api att använda i Android-applikationen

  2. Migrera data med Network_link

  3. Förhindra användaren från att redigera samma post

  4. Hur får man php-kod att ansluta till två olika databaser med två olika värdar?