MySQL döndükten sonra yeni dosyaya hata kaydetmiyor?


14

Sorun çözüldü, ancak ileride başvurmak üzere yazıyorum.

/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 komut satırından çalışırken iyi çalışıyor:

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

ancak saat 4'te cron'dan çalıştırıldığında çalışmaz Logs dosyası döndürüldü, ancak MySQL hatayı yeni oluşturulan dosyaya kaydetmiyor:

-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

Yanıtlar:


12

İçinde postrotatene olduğunu görmek için hem stderr hem de stdout'u bir günlük dosyasına yönlendiriyorum:

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

Ne olsun:

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

Logrotate sırasında mysqladminokunmuyor gibi görünüyor /root/.my.cnf.

Bu yüzden şunu deneyin:

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

Kaynak:


1

Benzer bir sorun yaşadım.

/root/.my.cnfEkledikten sonra MySQL'i yeniden başlatmadım , bu yüzden postrotate flush komutu çalıştırılmadı.

MySQL yeniden başlatıldıktan sonra kök my.cnf dosyasını okudu ve beklendiği gibi çalıştı.


0

Benim durumumda, blok /etc/logrotate.d/mysqlbiraz farklı görünüyordu:

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

"Bu başarısız olursa, debian.conf'u kontrol edin!" ve parametreye sahip komut --defaults-file=/etc/mysql/debian.cnf. Bu dosya [client], kullanıcıyı rootboş bir parola ile tanımlayan aynı bölüme sahipti . Açıkçası, kullanılan şifrenin /root/.my.cnfo dosyaya da yerleştirilmesi gerekiyordu. Güvenlik açısından, /etc/mysql/debian.cnfaşağıdakilere benzer /root/.my.cnf: sahip olunan root:rootve chmodded 0600.


0

Yani, benim durumumda, her bir düğümde aynı bütünlüğe sahip debian-sys-maintolduğu için kullanıcıya bir izin sorunu galera-clustervar, ancak her düğüm ayrı ayrı, her biri için debian kullanıcısı tarafından her biri için debian kullanıcısı tarafından yükleniyor./etc/mysql/debian.cnf

Yani logrotatedosyada:

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

Çözüm çok basit, sadece, debian-sys-maintbir düğümdeki kullanıcı parolasını değiştirin ve her düğümdeki '/etc/mysql/debian.cnf' dosyasında parolayı ayarlayın

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

Umarım, benim gibi faydalı olur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.