MySQL protokolliert nach dem Drehen keinen Fehler in einer neuen Datei?

14

Problem gelöst, aber ich schreibe für die zukünftige Referenz.

/root/.my.cnf

[mysqladmin]
user            = root
password        = pa$$w0rd

/etc/logrotate.d/mysql

/var/log/mysql-slow.log /var/log/mysqld.log {
    daily
    rotate 7
    dateext
    compress
    missingok
    #notifempty
    sharedscripts
    create 644 mysql mysql
    postrotate
        /usr/bin/mysqladmin flush-logs
    endscript
}

logrotate funktioniert einwandfrei, wenn von der Befehlszeile ausgeführt wird:

# logrotate -v -f /etc/logrotate.d/mysql

Aber es funktioniert nicht, wenn es um 4 Uhr morgens von cron aus ausgeführt wird. Die Protokolldatei wurde gedreht, aber MySQL protokolliert den Fehler nicht in einer neu erstellten Datei:

-rw-r--r-- 1 mysql mysql      0 Aug  7 10:13 /var/log/mysqld.log
-rw-r--r-- 1 mysql mysql     20 Aug  4 04:04 /var/log/mysqld.log-20120804.gz
-rw-r--r-- 1 mysql mysql     20 Aug  5 04:04 /var/log/mysqld.log-20120805.gz
-rw-r--r-- 1 mysql mysql     20 Aug  6 16:28 /var/log/mysqld.log-20120806.gz
Quanten
quelle

Antworten:

12

In postrotateleite ich sowohl stderr als auch stdout in eine Protokolldatei um, um zu sehen, was passiert:

postrotate
    /usr/bin/mysqladmin flush-logs > /var/log/mysqladmin.flush-logs 2>&1
endscript

Was ich bekomme ist:

/usr/bin/mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user 'root'@'localhost' (using password: NO)'

Es hört sich so an, als würde mysqladmines /root/.my.cnfwährend der Logrotation nicht lesen .

Also probieren Sie Folgendes:

postrotate
    env HOME=/root/ /usr/bin/mysqladmin flush-logs > /var/log/mysqladmin.flush-logs 2>&1
endscript

Quelle:

Quanten
quelle
1

Ich hatte ein ähnliches Problem.

Ich habe MySQL nach dem Hinzufügen nicht neu /root/.my.cnfgestartet, daher wurde der Befehl zum Nachrotieren nicht ausgeführt.

Nachdem ich MySQL neu gestartet hatte, las es die root-Datei my.cnf und arbeitete wie erwartet.

Codewaggle
quelle
0

In meinem Fall sah der Block in /etc/logrotate.d/mysqletwas anders aus:

postrotate
        test -x /usr/bin/mysqladmin || exit 0

        if [ -f `my_print_defaults --mysqld | grep -oP "pid-file=\K[^$]+"` ]; then
            # If this fails, check debian.conf!
            mysqladmin --defaults-file=/etc/mysql/debian.cnf flush-logs
        fi
endscript

Beachten Sie den Kommentar: "Wenn dies fehlschlägt, überprüfen Sie die debian.conf!" und der Befehl mit dem Parameter --defaults-file=/etc/mysql/debian.cnf. Diese Datei hatte denselben [client]Abschnitt, in dem der Benutzer rootmit einem leeren Kennwort definiert wurde. Daher musste das gleiche Passwort, das in verwendet wurde /root/.my.cnf, auch in dieser Datei abgelegt werden. In Bezug auf die Sicherheit /etc/mysql/debian.cnfist es ähnlich wie /root/.my.cnf: im Besitz von root:rootund geändert auf 0600.

Izzy
quelle
0

In meinem Fall gibt es also ein Berechtigungsproblem für den debian-sys-maintBenutzer, da galera-clusterdieser auf jedem Knoten die gleiche Integrität hat, obwohl jeder Knoten einzeln installiert wird, und zwar vom Debian-Benutzer für jeden Knoten, für den sich die Konfigurationsdatei befindet/etc/mysql/debian.cnf

Also in der logrotateDatei ist:

postrotate
    test -x /usr/bin/mysqladmin || exit 0
    if [ -f `my_print_defaults --mysqld | grep -oP "pid-file=\K[^$]+"` ]; then
        # If this fails, check debian.conf!
        mysqladmin --defaults-file=/etc/mysql/debian.cnf --local flush-error-log \
          flush-engine-log flush-general-log flush-slow-log
    fi
endscript

Die Lösung ist so einfach, ändern Sie einfach das Kennwort des debian-sys-maintBenutzers auf einem Knoten und legen Sie das Kennwort in der Datei '/etc/mysql/debian.cnf' auf jedem Knoten fest

SET PASSWORD FOR 'debian-sys-maint'@'localhost' = password('YOUR PASSWORD');

Ich hoffe, es ist nützlich, wie meine.

shgnInc
quelle