MySQL Server genererer adskillige logfiler, der kan hjælpe dig med at overvåge serverens aktiviteter. Men når først disse logfiler er aktiveret, kan de vokse i størrelse og begynde at optage for meget diskplads. Det er derfor, det er vigtigt at have en automatiseret måde at arkivere og bevare MySQL-logfiler i en vis varighed, samt at slette de gamle. I dette blogindlæg beskriver vi nogle bedste fremgangsmåder til opsætning og administration af MySQL-fejllogfiler, generelle logfiler og langsomme forespørgselslogfiler til dine MySQL-implementeringer.
Opsætning af MySQL-serverlogning
Lad os se på, hvordan du opsætter følgende 3 typer logfiler:
Fejllog
Logger alle de problemer, der opstår under start, kørsel eller stop af mysqld. Denne log kan aktiveres ved at have følgende mulighed i filen /etc/my.cnf:
- log_error=/var/log/mysql/mysqld.log
Generel forespørgselslog
Logger etablerede klientforbindelser og erklæringer modtaget fra klienter. Denne log kan aktiveres ved at have følgende mulighed i filen /etc/my.cnf:
- general_log=ON
- general_log_file=/var/log/mysql/general.log
Langsom forespørgselslog
Logger forespørgsler, der tog mere end long_query_time sekunder at udføre. Denne log kan aktiveres med følgende valgmulighed i filen /etc/my.cnf:
- slow_query_log=ON
- slow_query_log_file=/var/log/mysql/mysql-slowquery.log
Opsætning af kriterier for logrotation
Lad os som et eksempel have nogle kriterier for styring af generelle MySQL-forespørgselslogfiler. Vi kan komme med et passende sæt kriterier for logstyring ved at stille følgende spørgsmål:
Sp:Hvad er den maksimale størrelse, som logfilen kan vokse?
Sv:Lad os sige, at den kan vokse op til 300 MB, hvorefter den skal roteres og komprimeres.
Sp:Hvad er frekvensen, du ønsker, at logfilen skal roteres?
Sv:Vi kan sige, at vi ønsker, at logfiler skal roteres på daglig basis.
Sp:Hvor mange gamle logfiler vil du beholde?
Sv:Vi vil gerne beholde de sidste 30 logfiler.
Baseret på ovenstående kriterier er den samlede diskplads, der kræves til generel forespørgselslogstyring, omkring 1,2 GB. Hvis vi antager et komprimeringsforhold på 90 % – vil vi have 30 komprimerede logfiler på hver 30 MB og en live logfil på omkring 300 MB.
Håndtering af MySQL-serverlogfiler:Roter, komprimer, bevar og SletKlik for at tweete
Styring af logfilerne ved hjælp af Linux logrotate Utility
logrotate er et Linux-værktøj, der hjælper med effektiv administration af logfiler og giver muligheder for automatisk rotation, komprimering og fjernelse af logfiler. De ovenfor fastsatte kriterier kan konfigureres til logrotate-værktøjet ved at oprette en konfigurationsfil i mappen /etc/logrotate.d.
Lad os kalde denne konfigurationsfil mysqlgeneral, og indholdet af filen vil være:
/var/log/mysql/general.log{
compress
dateext
maxsize 300M
copytruncate
maxage 365
dateformat -%Y%m%d%s
daily
rotate 30
notifempty
}
Med ovenstående muligheder for logrotate roteres de generelle forespørgselslogfiler enten på daglig basis, eller når logfilens størrelse overstiger 300 MB. De gamle logfiler komprimeres, og 30 sådanne filer vil blive bevaret. Logrotation vil blive sprunget over, hvis logfilen er tom på grund af indstillingen 'notifempty'.
Muligheden 'copytruncate' er at sikre, at den aktuelle logfil aldrig slettes under rotation, og kun dens indhold afkortes. Dette er vigtigt, da nogle applikationer forventer, at logfilen altid er tilgængelig, og det ikke er muligt at slette loggen uden først at stoppe applikationen.
Nu hvor logrotationskonfigurationen er indstillet til den generelle forespørgselslog, skal logrotate-værktøjet køres, så ovenstående konfiguration udføres. Dette gøres typisk gennem et cron-job. Vi kan indstille dette til at køre hver time ved at placere logrotate-scriptet i mappen /etc/cron.hourly:
#!/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
Så med nogle få enkle trin har vi sat logrotation op for MySQL generelle logfiler baseret på vores kriterier. Den samme tilgang kan også følges for MySQL-fejllogfiler og langsomme forespørgselslogfiler. Tjek disse andre indlæg for at lære mere om optimering af dine MySQL-implementeringer:
- Beregning af InnoDB-bufferpoolstørrelse for din MySQL-server
- MySQL Tutorial – Konfiguration og administration af SSL på din MySQL-server
- MySQL High Availability Framework Forklaret – Del I:Introduktion