logrotate - mysqladmin Access denied

logrotate - mysqladmin Access denied
« kdy: 15. 12. 2017, 13:21:09 »
Ahoj,
po instalaci noveho serveru (Debian Stretch) mi chodi kazdy den nasledujici report z crontabu od logrotate...

Kód: [Vybrat]
Předmět: Cron <root@server> test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )

/etc/cron.daily/logrotate:
mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user 'root'@'localhost' (using password: NO)'
error: error running shared postrotate script for '/var/log/mysql/mysql.log /var/log/mysql/mysql-slow.log /var/log/mysql/mariadb-slow.log /var/log/mysql/error.log '
run-parts: /etc/cron.daily/logrotate exited with return code 1

Co jsem pochopil, tak se mysqladmin nemuze prihlasit do DB, na to vsude radi to stejne - vytvorit '/root/.my.cnf' kam ulozim prihlasovaci udaje. To sem udelal, jako root si spustim mysqladmin bez zadani hesla, ale nic se nezmenilo.
Poradte pls co jeste je spatne...
PMD85 -> Didaktik Gama -> PC XT -> ... x86/x51/ARM
Basic -> Turbo Pascal -> C++ -> Turbo ASM -> C# -> PHP -> Bash :-)


Re:logrotate - mysqladmin Access denied
« Odpověď #1 kdy: 17. 12. 2017, 04:18:07 »
Ahoj,

/etc/logrotate.d/mysql-server používá konfiguraci z /etc/mysql/debian.cnf, nikoliv z /root/.my.cnf

Kód: [Vybrat]
mysqladmin --defaults-file=/etc/mysql/debian.cnf ...
Ten při nové instalaci ve stretchi vypadá takhle

Kód: [Vybrat]
# /etc/mysql/debian.cnf
# Automatically generated for Debian scripts. DO NOT TOUCH!
[client]
host     = localhost
user     = root
password =
socket   = /var/run/mysqld/mysqld.sock
[mysql_upgrade]
host     = localhost
user     = root
password =
socket   = /var/run/mysqld/mysqld.sock
basedir  = /usr

Debian při instalaci mariadb vytváří mysql uživatele root autentizovaného pomocí auth_socket pluginu (stejnojmenný unixový uživatel se může připojit k databázi přes socket a bez hesla).

Viz sekci "ROOT USER AUTHENTICATION VIA UNIX SOCKET" v /usr/share/doc/mariadb-server-10.1/README.Debian.gz.


Kód: [Vybrat]
$ echo "select host, user, password, plugin from mysql.user where user like 'root';" | sudo mysql --table
+-----------+------+----------+-------------+
| host      | user | password | plugin      |
+-----------+------+----------+-------------+
| localhost | root |          | unix_socket |
+-----------+------+----------+-------------+

Obecně, pokud nějaký lokální uživatel má mít možnost neinteraktivně přistupovat k lokální databázi, je vhodné vytvořit stejnojmenného mysql uživatele s auth_socket pluginem. Je to jednodušší a bezpečnější - nikde se neválí heslo.

Citace
/etc/cron.daily/logrotate:
mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user 'root'@'localhost' (using password: NO)'

Oprav mysql uživatele root, tak aby používal auth_socket plugin. Pokud to nejde, uprav /etc/mysql/debian.cnf. Debian dřív vytvářel mysql uživatele debian-sys-maint (s heslem), takže to je taky možnost.

Re:logrotate - mysqladmin Access denied
« Odpověď #2 kdy: 21. 12. 2017, 09:29:04 »
Díky, za perfektní vysvětlení  :D
To bylo přesně ono, už to šlape jak má.
PMD85 -> Didaktik Gama -> PC XT -> ... x86/x51/ARM
Basic -> Turbo Pascal -> C++ -> Turbo ASM -> C# -> PHP -> Bash :-)