Назад | Перейти на главную страницу

Ошибка debian mysql при запуске общего сценария postrotate для /var/log/mysql.log

/etc/cron.daily/logrotate:

ошибка: ошибка запуска общего сценария постротации для /var/log/mysql.log /var/log/mysql/mysql.log

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

run-parts: /etc/cron.daily/logrotate завершен с кодом возврата 1

В 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 вместо Хз. И наконец...

quit

Теперь вы должны иметь возможность перезапустить сервер mysql без ошибок с помощью команды:

/etc/init.d/mysql restart

Однако перезагрузка не требуется.

В 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 клиент.

Для 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 Cluster)

В этом файле вы найдете:

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

который следует изменить на:

            MYADMIN="/usr/bin/mysqladmin"

Мне пришлось изменить его с помощью Percona XtraDB Cluster, который на данный момент не выпущен для Debian Stretch, поэтому сценарий logrotate в настоящее время неверен.