Bug 2227714

Summary: [BUG] Logrotate configuration for mysql does not work as advertised
Product: Red Hat Enterprise Linux 9 Reporter: Juan Manuel Santos <jsantos>
Component: mysqlAssignee: Michal Schorm <mschorm>
Status: NEW --- QA Contact: RHEL CS Apps Subsystem QE <rhel-cs-apps-subsystem-qe>
Severity: unspecified Docs Contact:
Priority: unspecified    
Version: 9.3CC: ljavorsk
Target Milestone: rc   
Target Release: ---   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description Juan Manuel Santos 2023-07-31 07:22:29 UTC
Description of problem:
The /etc/logrotate.d/mysqld configuration file has the following content:

# For the mysqladmin commands below to work, root account
# password is required. Use mysql_config_editor(1) to store
# authentication credentials in the encrypted login path file
# ~/.mylogin.cnf
#
# Example usage:
#
#  mysql_config_editor set --login-path=client --user=root --host=localhost --password
#
# When these actions has been done, un-comment the following to
# enable rotation of mysqld's log error.

However, on RHEL 9 logrotate no longer runs under cron but rather under systemd. As such there is no $HOME variable for the logrotate process, which causes in turn for mysql_config_editor to have no $HOME variable. This has the effect of making /root/.mylogin.cnf to never be read so only this gets printed in the logs:

logrotate[179140]: error: 'Access denied for user 'root'@'localhost' (using password: NO)'
logrotate[179136]: error: error running non-shared postrotate script for /var/log/mysql/mysqld.log of '/var/log/mysql/mysqld.log '

The workaround for this is to specify the HOME variable before both mysqladmin commands thus:

       if test -x /usr/bin/mysqladmin && \
          HOME=/root /usr/bin/mysqladmin ping &>/dev/null
       then
          HOME=/root /usr/bin/mysqladmin flush-logs
       fi

Version-Release number of selected component (if applicable):
mysql-server-8.0.32-1.el9_2.x86_64

How reproducible:
Every time

Steps to Reproduce:
1. Uncomment the /var/log/mysql/mysqld.log entry from /etc/logrotate.d/mysqld.
2. Run the following command as advised in the logrotate configuration file:
  # mysql_config_editor set --login-path=client --user=root --host=localhost --password
3. Wait for logrotate to run


Actual results:
mysqld log does not rotate properly.

Expected results:
mysqld log should rotate properly.


Additional info:
This was not an issue in RHEL 7/8 as logrotate ran under cron and, while cron does have a very limited environment, the $HOME variable was being passed to logrotate.

Also note, the package is mysql-server but for some reason it is not present in the component list.