debian mysql 运行 /var/log/mysql.log 的共享 postrotate 脚本时出错

debian mysql 运行 /var/log/mysql.log 的共享 postrotate 脚本时出错

/etc/cron.daily/logrotate:

错误:运行 /var/log/mysql.log /var/log/mysql/mysql.log 的共享 postrotate 脚本时出错

/var/log/mysql/mysql-slow.log

运行部分:/etc/cron.daily/logrotate 退出,返回代码 1

答案1

共享的 postrotate 脚本尝试访问 mysql 数据库但失败,可能是因为密码不匹配。

在 Debian 中,mysql 通过 mysql 用户 'debian-sys-maint'@'localhost' 进行控制。此用户的密码存储在/etc/mysql/debian.cnf

cat /etc/mysql/debian.cnf

注意此文件中使用的密码。如果您有 root 密码(您应该有),则需要使用以下命令进入 mysql。

mysql -u root -p

否则,您只需输入“mysql”。在mysql>提示符下,运行以下命令。

GRANT RELOAD, SHUTDOWN, PROCESS, SHOW DATABASES, SUPER, LOCK TABLES ON *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY 'XXXXXXXXXXXX';

替换在/etc/mysql/debian.cnf代替 X。最后...

quit

现在,您应该能够使用以下命令重新启动 mysql 服务器且不会出现任何错误:

/etc/init.d/mysql restart

但是,不需要重新启动。

答案2

在 Ubuntu 18 上我的修复方法是这样的:

mysql -u root -p <<_EOF_
ALTER USER 'debian-sys-maint'@'localhost' IDENTIFIED BY '`sudo grep --only-matching  --max-count=1 --perl-regexp 'password\s*=\s*\K.*' /etc/mysql/debian.cnf | sed --expression='s/'\''/\\'\''/g'`';
_EOF_

这将提取密码,并/etc/mysql/debian.cnf确保转义其中可能包含的任何单引号:

    sudo grep                           \
        --only-matching                 \
        --max-count=1                   \
        --perl-regexp                   \
        'password\s*=\s*\K.*'           \
        /etc/mysql/debian.cnf           \
|   sed                                 \
      --expression='s/'\''/\\'\''/g'`

并将其插入到以下 SQL 中:

ALTER USER 'debian-sys-maint'@'localhost' IDENTIFIED BY '<extracted-and-escaped-pw-inserted-here>';

...然后将其直接传送到客户端的标准输入mysql -u root -p

答案3

对于 Debian 9 (Stretch):debian-sys-maint用户已经消失,因此解决方案是摆脱以下debian.cnf任一方式:

  • /etc/logrotate.d/mysql-server(适用于 MariaDB 或 MySQL)
  • /etc/logrotate.d/percona-xtradb-cluster-5.7(适用于 Percona XtraDB 集群)

在此文件中你会发现:

            MYADMIN="/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf"

应改为:

            MYADMIN="/usr/bin/mysqladmin"

我不得不用 Percona XtraDB Cluster 来改变它,但目前它还没有为 Debian Stretch 发布,因此 logrotate 脚本目前是错误的。

相关内容