我是 Linux 新手,已经设置了一个运行 Ubuntu 16.04 的 VPS,其中有 postfix、dovecot 和 rouncube,数据库为 mariadb。一切似乎都运行正常,但我经常收到以下电子邮件:
/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
我搜索了一下,发现一篇帖子建议我需要创建一个 /root/.my.cnf 文件,我已经创建了,并且重新启动了服务器等,但仍然收到错误。我的 /root/.my.cnf 的内容如下:
[mysqladmin]
password = *mypassword*
user = root
[mysql]
password = *mypassword*
是否有人知道我是否遗漏了某些东西或者需要进行其他配置才能使用 mysql 密码?
谢谢
答案1
这可能是使用 mariadb 而不是 mysql 时“stock”配置中的一个错误,还没有被消除,因为我隐约记得自己在从 mysql 转移到 mariadb 时遇到过类似的问题。
您将需要查看/etc/logrotate.d/mysql-server
在 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
Ubuntu 可能正在那里查找,因此请尝试查看一下/etc/mysql/debian.cnf
并查看设置了什么。
答案2
AvatarKava 为我们指明了正确的方向,他的答案对大多数人都适用。如果在文件中添加用户和密码后你仍然摸不着头脑/etc/mysql/debian.cnf
(即使它说不要碰这个文件哈哈!)那么:
确保你的密码带有引号
尤其是当您的密码中包含特殊字符时。
另一个技巧是--defaults-file=/etc/mysql/debian.cnf
从 中的 mysqladmin 命令中删除该选项 /etc/logrotate.d/mysql-server
。如果删除此选项,root 用户(运行 logrotate 的用户)仍将需要有效的用户和密码才能连接到 mysql,因此请确保.my.cnf
中有一个正确的文件/root
。无论哪种情况,对 或 mysql-server 的更改debian.cnf
都可能在下一次 MariaDB 升级期间被覆盖,但正如 AvatarKava 指出的那样,在升级覆盖这些文件之前,您可能会收到提示。最糟糕的情况是,升级后您将再次收到 logrotate 错误,并且需要再次进行相同的更改。
答案3
就我而言,重新创建 debian-sys-maint 用户是解决方案。
具体操作如下:
使用 phpmyadmin 中的 SQL 选项卡,或者在 Linux 控制台上,使用以下命令登录 mysql:
mysql -u root -p
输入你的 root 密码并继续
运行以下命令:
GRANT RELOAD, SHUTDOWN, PROCESS, SHOW DATABASES, SUPER, LOCK TABLES ON *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY 'your-password'
您可以在以下位置找到“your-passowrd”/etc/mysql/debian.cnf
# Automatically generated for Debian scripts. DO NOT TOUCH!
[client]
host = localhost
user = debian-sys-maint
password = your-password
socket = /var/run/mysqld/mysqld.sock
[mysql_upgrade]
host = localhost
user = debian-sys-maint
password = your-password
socket = /var/run/mysqld/mysqld.sock
如果您有以下消息:
错误 1819 (HY000):您的密码不符合当前政策要求
您需要更改密码,或者可以运行以下命令来暂时停用密码策略:
uninstall plugin validate_password;
GRANT RELOAD, SHUTDOWN, PROCESS, SHOW DATABASES, SUPER, LOCK TABLES ON *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY 'your-password'
INSTALL PLUGIN validate_password SONAME 'validate_password.so';