sql >> Databasteknik >  >> RDS >> Mysql

MySQL-handledning – Hantera MySQL-serverloggar:Rotera, komprimera, behålla och ta bort

MySQL Server genererar flera loggar som kan hjälpa dig att övervaka serverns aktiviteter. Men när dessa loggar väl är aktiverade kan de växa i storlek och börja ta upp för mycket diskutrymme. Det är därför det är viktigt att ha ett automatiserat sätt att arkivera och bevara MySQL-loggfiler under en viss tid, samt att ta bort de gamla. I det här blogginlägget beskriver vi några bästa metoder för att ställa in och hantera MySQL-felloggar, allmänna loggar och långsamma frågeloggar för dina MySQL-distributioner.

Konfigurera MySQL-serverloggning

Låt oss titta på hur du ställer in följande tre typer av loggar:

Fellogg

Loggar alla problem som uppstår under start, körning eller stopp av mysqld. Den här loggen kan aktiveras genom att ha följande alternativ i filen /etc/my.cnf:

  • log_error=/var/log/mysql/mysqld.log

Allmän frågelogg

Loggar etablerade klientkopplingar och uttalanden som tas emot från klienter. Den här loggen kan aktiveras genom att ha följande alternativ i filen /etc/my.cnf:

  • general_log=ON
  • general_log_file=/var/log/mysql/general.log

Långsam frågelogg

Loggar frågor som tog mer än long_query_time sekunder att köra. Den här loggen kan aktiveras med följande alternativ i filen /etc/my.cnf:

  • slow_query_log=ON
  • slow_query_log_file=/var/log/mysql/mysql-slowquery.log

Ställa in kriterier för loggrotation

Låt oss som ett exempel ha några kriterier för att hantera allmänna MySQL-frågeloggar. Vi kan komma fram till en lämplig uppsättning kriterier för logghantering genom att ställa följande frågor:

F:Vilken är den maximala storleken som loggfilen kan växa?

S:Låt oss säga att den kan växa upp till 300 MB, varefter den måste roteras och komprimeras.

F:Vilken frekvens vill du att loggfilen ska roteras?

S:Vi kan säga att vi vill att loggar ska roteras dagligen.

F:Hur många gamla loggfiler vill du behålla?

S:Vi vill behålla de senaste 30 loggfilerna.

Baserat på ovanstående kriterier är det totala diskutrymmet som krävs för allmän frågelogghantering cirka 1,2 GB. Om vi ​​antar ett komprimeringsförhållande på 90 % – kommer vi att ha 30 komprimerade loggfiler av storleken 30 MB vardera och en liveloggfil på cirka 300 MB.

Hantera MySQL-serverloggar:Rotera, komprimera, behålla och ta bortKlicka för att tweeta

Hantera loggarna med hjälp av Linux logrotate Utility

logrotate är ett Linux-verktyg som hjälper till med effektiv administration av loggfiler och ger alternativ för automatisk rotation, komprimering och borttagning av loggfiler. Kriterierna ovan kan konfigureras för logrotate-verktyget genom att skapa en konfigurationsfil i mappen /etc/logrotate.d.

Låt oss kalla den här konfigurationsfilen mysqlgeneral och innehållet i filen kommer att vara:

/var/log/mysql/general.log{
        compress
        dateext
        maxsize 300M
        copytruncate
        maxage 365
        dateformat -%Y%m%d%s
        daily
        rotate 30
        notifempty
}

Med alternativen ovan för logrotate roteras de allmänna frågeloggarna antingen dagligen eller när loggfilens storlek överstiger 300 MB. De gamla loggarna komprimeras och 30 sådana filer kommer att bevaras. Loggrotation kommer att hoppas över om loggfilen är tom på grund av inställningen "notifempty".

Alternativet 'copytruncate' är att säkerställa att den aktuella loggfilen aldrig raderas under rotation och att endast dess innehåll trunkeras. Detta är viktigt eftersom vissa program förväntar sig att loggfilen alltid är tillgänglig och det är inte möjligt att ta bort loggen utan att stoppa programmet först.

Nu när konfigurationen för loggrotation är inställd för den allmänna frågeloggen, måste logrotate-verktyget köras så att ovanstående konfiguration exekveras. Detta görs vanligtvis genom ett cron-jobb. Vi kan ställa in detta så att det körs varje timme genom att placera logrotate-skriptet i katalogen /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 några enkla steg, har vi ställt in loggrotation för MySQL allmänna loggar baserat på våra kriterier. Samma tillvägagångssätt kan också användas för MySQL-felloggar och långsamma frågeloggar. Kolla in dessa andra inlägg för att lära dig mer om att optimera dina MySQL-distributioner:

  • Beräkna storleken på InnoDB-buffertpoolen för din MySQL-server
  • MySQL Tutorial – Konfigurera och hantera SSL på din MySQL-server
  • MySQL High Availability Framework Explained – Del I:Introduktion


  1. Hämta en lista över privata procedurer/funktioner från en paketkropp

  2. Hur man går med i flera kolumner

  3. Felsökning av SQL Server Always On Availability Groups

  4. Vad är skillnaden mellan pg_table_size, pg_relation_size och pg_total_relation_size? (PostgreSQL)