MySQL Server genereert verschillende logboeken die u kunnen helpen bij het bewaken van de activiteiten van de server. Als deze logboeken eenmaal zijn ingeschakeld, kunnen ze echter groter worden en te veel schijfruimte in beslag nemen. Daarom is het belangrijk om een geautomatiseerde manier te hebben om MySQL-logbestanden voor een bepaalde duur te archiveren en te bewaren, en om de oude te verwijderen. In deze blogpost beschrijven we enkele best practices voor het instellen en beheren van MySQL-foutlogboeken, algemene logboeken en trage querylogboeken voor uw MySQL-implementaties.
MySQL Server Logging instellen
Laten we eens kijken hoe u de volgende 3 soorten logboeken kunt instellen:
Foutenlogboek
Hiermee worden alle problemen geregistreerd die zijn opgetreden tijdens het starten, uitvoeren of stoppen van mysqld. Dit logboek kan worden ingeschakeld door de volgende optie in het bestand /etc/my.cnf te hebben:
- log_error=/var/log/mysql/mysqld.log
Algemeen querylogboek
Hiermee worden vastgelegde klantverbindingen en van klanten ontvangen verklaringen in een logboek vastgelegd. Dit logboek kan worden ingeschakeld door de volgende optie in het bestand /etc/my.cnf te hebben:
- general_log=AAN
- general_log_file=/var/log/mysql/general.log
Langzaam zoekopdrachtlogboek
Hiermee worden zoekopdrachten vastgelegd die meer dan long_query_time seconden nodig hadden om uit te voeren. Dit logboek kan worden ingeschakeld met de volgende optie in het bestand /etc/my.cnf:
- slow_query_log=AAN
- slow_query_log_file=/var/log/mysql/mysql-slowquery.log
Criteria instellen voor logboekrotatie
Laten we als voorbeeld enkele criteria geven voor het beheren van algemene MySQL-querylogboeken. We kunnen een geschikte set criteria voor logbeheer bedenken door de volgende vragen te stellen:
V:Wat is de maximale grootte van het logbestand?
A:Laten we zeggen dat het tot 300 MB kan groeien, waarna het moet worden geroteerd en gecomprimeerd.
V:Hoe vaak wilt u dat het logbestand wordt geroteerd?
A:We kunnen zeggen dat we willen dat logs dagelijks worden gerouleerd.
V:Hoeveel oude logbestanden wilt u behouden?
A:We willen de laatste 30 logbestanden behouden.
Op basis van de bovenstaande criteria is de totale schijfruimte die nodig is voor algemeen beheer van querylogboeken ongeveer 1,2 GB. Uitgaande van een compressieverhouding van 90%, hebben we 30 gecomprimeerde logbestanden van elk 30 MB en een live logbestand van ongeveer 300 MB.
MySQL-serverlogboeken beheren:roteren, comprimeren, behouden en verwijderenKlik om te tweeten
De logboeken beheren met Linux logrotate Utility
logrotate is een Linux-hulpprogramma dat helpt bij het efficiënt beheren van logbestanden en dat opties biedt voor automatische rotatie, compressie en verwijdering van logbestanden. De hierboven vastgestelde criteria kunnen worden geconfigureerd voor het hulpprogramma logrotate door een configuratiebestand te maken in de map /etc/logrotate.d.
Laten we dit configuratiebestand mysqlgeneral noemen en de inhoud van het bestand zal zijn:
/var/log/mysql/general.log{
compress
dateext
maxsize 300M
copytruncate
maxage 365
dateformat -%Y%m%d%s
daily
rotate 30
notifempty
}
Met de bovenstaande opties voor logrotate worden de algemene querylogboeken dagelijks geroteerd of wanneer de logbestand groter is dan 300 MB. De oude logboeken worden gecomprimeerd en 30 van dergelijke bestanden worden bewaard. Logrotatie wordt overgeslagen als het logbestand leeg is vanwege de instelling 'notifempty'.
De optie 'copytruncate' is om ervoor te zorgen dat het huidige logbestand nooit wordt verwijderd tijdens het roteren en dat alleen de inhoud ervan wordt afgekapt. Dit is belangrijk omdat sommige applicaties verwachten dat het logbestand altijd beschikbaar is en het niet mogelijk is om het logbestand te verwijderen zonder de applicatie eerst te stoppen.
Nu de logrotatieconfiguratie is ingesteld voor het algemene querylog, moet het logrotate-hulpprogramma worden uitgevoerd zodat de bovenstaande configuratie wordt uitgevoerd. Dit wordt meestal gedaan door middel van een cron-job. We kunnen instellen dat dit elk uur wordt uitgevoerd door het logrotate-script in de map /etc/cron.hourly te plaatsen:
#!/bin/sh
/usr/sbin/logrotate /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
/usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0
Dus met een paar eenvoudige stappen hebben we logrotatie ingesteld voor algemene MySQL-logboeken op basis van onze criteria. Dezelfde aanpak kan ook worden gevolgd voor MySQL-foutlogboeken en trage querylogboeken. Bekijk deze andere berichten voor meer informatie over het optimaliseren van uw MySQL-implementaties:
- InnoDB-bufferpoolgrootte berekenen voor uw MySQL-server
- MySQL-zelfstudie - SSL configureren en beheren op uw MySQL-server
- MySQL High Availability Framework uitgelegd – Deel I:Inleiding