Mật khẩu của root trong debian.cnf

Tôi nhận được email thông báo

/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

Hiện tượng lỗi là màn hình Bitvise SSH Client thỉnh thoảng bị in đày các thông báo lỗi tương tự như trên và sau đó có thể treo luôn hoặc không.

Nội dung file /etc/logrotate.d/mysql-server như sau

# - I put everything in one block and added sharedscripts, so that mysql gets
# flush-logs'd only once.
# Else the binary logs would automatically increase by n times every day.
# - The error log is obsolete, messages go to syslog now.
/var/log/mysql/mysql.log /var/log/mysql/mysql-slow.log /var/log/mysql/mariadb-slow.log/var/log/mysql/error.log {
 daily
 rotate 7
 missingok
 create 640 mysql adm
 compress
 sharedscripts
 postrotate
 test -x /usr/bin/mysqladmin || exit 0
 if [ -f `my_print_defaults --mysqld | grep -m 1 -oP "pid-file=\K.+$"` ]; then
 # If this fails, check debian.conf!
 mysqladmin --defaults-file=/etc/mysql/debian.cnf --local flush-error-log \
 flush-engine-log flush-general-log flush-slow-log
 fi
 endscript
}

Trong đó đáng chú ý là file /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

Trong đó cả hai user mà mysqladmin dùng đều là root và không có mật khẩu (nguyên nhân lỗi)

Thêm vào mật khẩu của root và thử chạy lệnh

mysqladmin --defaults-file=/etc/mysql/debian.cnf --local flush-error-log

Không có thông báo lỗi! Tuy nhiên mật khẩu của root đặt hớ hênh thế này thì không ổn.

Chúng ta thay đổi như sau:

cp /etc/mysql/debian.cnf /etc/mysql/debian.bak
sed -i " s/root *$/debian-sys-maint/g" /etc/mysql/debian.cnf 
sed -i "s/password =.*$/password = newpass/g" /etc/mysql/debian.cnf

Trong đó debian-sys-maint/newpass chúng ta sẽ tạo ra trên mysql (debian-sys-maint là user dùng trong debian.cnf ở các phiên bản trước đó. Nghi root xuất hiện ở đây là lỗi!)

root@pi:~# mysql -uroot -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 180
Server version: 10.1.23-MariaDB-9+deb9u1 Raspbian 9.0
Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> GRANT RELOAD, SHUTDOWN, PROCESS, SHOW DATABASES, SUPER, LOCK TABLES ON *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY 'newpass';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> flush privileges;
MariaDB [(none)]>

Chạy lại câu lệnh để test

mysqladmin --defaults-file=/etc/mysql/debian.cnf --local flush-error-log

Không có thông báo lỗi. Xong rồi!

Comments Off on Mật khẩu của root trong debian.cnf

Filed under Software

Comments are closed.