MySQL không ghi lỗi vào tập tin mới sau khi xoay?


14

Vấn đề đã được giải quyết nhưng tôi đang viết ra để tham khảo trong tương lai.

/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 đang hoạt động tốt khi chạy từ dòng lệnh:

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

nhưng nó không hoạt động khi chạy từ cron lúc 4 giờ. Tệp nhật ký đã được xoay nhưng MySQL không ghi lỗi vào tệp mới được tạo:

-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

Câu trả lời:


12

Trong phần này postrotate, tôi chuyển hướng cả stderr và stdout sang tệp nhật ký để xem điều gì xảy ra:

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

Những gì tôi nhận được là:

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

Có vẻ như mysqladminkhông đọc /root/.my.cnftrong quá trình logrotate.

Vì vậy, hãy thử điều này:

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

Nguồn:


1

Tôi đã có một vấn đề tương tự.

Tôi đã không khởi động lại MySQL sau khi thêm /root/.my.cnf, vì vậy lệnh tuôn ra postrotate không chạy.

Khi tôi khởi động lại MySQL, nó đọc tập tin gốc my.cnf và hoạt động như mong đợi.


0

Trong trường hợp của tôi, khối trong /etc/logrotate.d/mysqltrông hơi khác một chút:

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

Lưu ý nhận xét: "Nếu điều này không thành công, hãy kiểm tra debian.conf!" và lệnh có tham số --defaults-file=/etc/mysql/debian.cnf. Tập tin này có cùng một [client]phần, xác định người dùng rootvới mật khẩu trống. Vì vậy, rõ ràng, cùng một mật khẩu được sử dụng /root/.my.cnfphải được đặt trong tập tin đó. Bảo mật-khôn ngoan, /etc/mysql/debian.cnftương tự như /root/.my.cnf: được sở hữu bởi root:root, và được bổ sung 0600.


0

Vì vậy, trong trường hợp của tôi, có một vấn đề về quyền đối với debian-sys-maintngười dùng, do, galera-clustercó tính toàn vẹn giống nhau trên mỗi nút, mặc dù, mỗi nút cài đặt riêng lẻ, bởi người dùng debian cho mỗi người, trong đó, tệp cấu hình là/etc/mysql/debian.cnf

Vì vậy, trong logrotatetập tin là:

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

Giải pháp rất đơn giản, chỉ cần thay đổi mật khẩu của debian-sys-maintngười dùng trên một nút và đặt mật khẩu trên tệp '/etc/mysql/debian.cnf' trên mỗi nút

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

Tôi hy vọng, nó hữu ích, như của tôi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.