MySQL tidak mencatat kesalahan pada file baru setelah diputar?

14

Masalah terpecahkan tetapi saya menulis untuk referensi di masa mendatang.

/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 berfungsi dengan baik saat menjalankan dari baris perintah:

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

tetapi tidak berfungsi saat dijalankan dari cron pada jam 4 pagi. File log diputar tetapi MySQL tidak mencatat kesalahan pada file yang baru dibuat:

-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
kuanta
sumber

Jawaban:

12

Dalam postrotate, saya mengarahkan stderr dan stdout ke file log untuk melihat apa yang terjadi:

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

Apa yang saya dapatkan adalah:

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

Sepertinya mysqladmintidak membaca /root/.my.cnfselama logrotate.

Jadi, coba ini:

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

Sumber:

kuanta
sumber
1

Saya punya masalah serupa.

Saya tidak me-restart MySQL setelah menambahkan /root/.my.cnf, jadi perintah flush postrotate tidak berjalan.

Setelah saya me-restart MySQL, ia membaca file root my.cnf dan bekerja seperti yang diharapkan.

codewaggle
sumber
0

Dalam kasus saya, blok di /etc/logrotate.d/mysqltampak sedikit berbeda:

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

Perhatikan komentar: "Jika ini gagal, periksa debian.conf!" dan perintah memiliki parameter --defaults-file=/etc/mysql/debian.cnf. File ini memiliki bagian yang sama [client], mendefinisikan pengguna rootdengan kata sandi kosong. Jadi jelas, kata sandi yang sama digunakan /root/.my.cnfharus ditempatkan dalam file itu juga. Dari segi keamanan, /etc/mysql/debian.cnfmirip dengan /root/.my.cnf: dimiliki oleh root:root, dan chmodded to 0600.

Izzy
sumber
0

Jadi, Dalam kasus saya, Ada masalah izin kepada debian-sys-maintpengguna, karena, galera-clustermemiliki integritas yang sama pada setiap node, meskipun, setiap node menginstal secara individual, oleh pengguna debian untuk masing-masing, yang, file konfigurasi adalah/etc/mysql/debian.cnf

Jadi dalam logrotatefile tersebut adalah:

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

Solusinya sangat sederhana, cukup, ubah kata sandi debian-sys-maintpengguna pada satu simpul, dan atur kata sandi pada file '/etc/mysql/debian.cnf' di setiap node

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

Semoga bermanfaat, sebagai milik saya.

shgnInc
sumber