Проблема с доступом ERROR 1045 (28000): Access denied на примере CentOS 7 и MariaDB
/* Проблема показала себя при попытке импортировать dump */
[root@localhost ~]# mysql -u root -ppass kpidrive < /home/igor/projects/kpidrive/backend/dump.sql;
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
/* Пароль точно правильный - в чем же дело? Понятия не имею, но помог сброс пароля */
/* Для начала - проверим список пользователей mysql */
/* Входим в mysql под пользователем root, вводим пароль */
mysql -u root -p
/* Это при условии, что mysql запущен, ниже команды запуска и остановки */
/etc/init.d/mysql start
/etc/init.d/mysql stop
/* Список пользователей */
MariaDB [(none)]> SELECT user, host, password, plugin, authentication_string FROM mysql.user;
/* Сбрасывать нужно пользователя root, поэтому выведем только его */
MariaDB [(none)]> SELECT user, host, password, plugin, authentication_string FROM mysql.user WHERE user='root';
/* Нас будет интересовать одна строка. Будем менять хеш поля password */
root | localhost | *22A99BA288DB55E8E230679259740873101CD636
/* Останавливаем процесс mysql командой выше, или нижеприведенной */
systemctl stop mariadb
/* Чтобы сбросить пароль у root нужно запустить mysql в специальном режиме */
mysqld_safe --skip-grant-tables --skip-networking &
/* Теперь можно запустить процесс без пароля */
mysql -u root
/* Появиться приглашение */
Welcome to the MariaDB monitor...
/* Пробуем установить новый пароль как указано в документации */
MariaDB [(none)]> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPass');
/* Но нам сообщают, что в режиме игнорирования прав - этот запрос не выполнится */
ERROR 1290 (HY000): The MariaDB server is running with the --skip-grant-tables option so it cannot execute this statement
/* Сбросим привилегии */
MariaDB [(none)]> FLUSH PRIVILEGES;
/* Попытаемся сменить пароль */
MariaDB [(none)]> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPass');
/* Но опять получаем ошибку. Анонимные пользователи - не могут модифицировать пользовательские настройки */
ERROR 1131 (42000): You are using MariaDB as an anonymous user and anonymous users are not allowed to modify user settings
/* Казалось бы - тупик. Но нет. Мы можем сменить пароль через обычный update у всех пользователей root */
MariaDB [(none)]> update mysql.user set password=password('MyNewPass') where user='root';
/* Снова сбросим привилегии */
MariaDB [(none)]> FLUSH PRIVILEGES;
/* Опять посмотрим пользователей root */
MariaDB [(none)]> select user, host, password, plugin, authentication_string from mysql.user where user='root';
/* Теперь видно, что у всех root сменился хеш пароля. В том числе и у localhost */
root | localhost | *A294441C38B03BE12E32771ADDF7976B0DDB8164
/* Теперь попытаемся снова сменить пароль так как говорит нам документация */
MariaDB [(none)]> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPass');
/* Но вновь получим ошибку */
ERROR 1131 (42000): You are using MariaDB as an anonymous user and anonymous users are not allowed to modify user settings
/* Почему? Потому что мы по прежнему находимся в текущей сессии. Нужно выйти из нее */
MariaDB [(none)]> quit
/* И зайти под root с новым паролем */
mysql -u root -pMyNewPass
/* Теперь документированная смена пароля сработает */
MariaDB [(none)]> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPass');
Query OK, 0 rows affected (0.00 sec)
/* Не забываем про сброс прав */
MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
/* Остановим процессы */
ps aufx | grep mysql | grep -v grep
root 2747 0.0 0.0 113264 1680 pts/0 S 17:48 0:00 \_ /bin/sh /bin/mysqld_safe --skip-grant-tables --skip-networking
mysql 3105 0.3 5.0 515644 95948 pts/0 Sl 17:48 0:00 | \_ /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --skip-grant-tables --skip-networking --log-error=/var/log/mysqld.log --open-files-limit=8192 --pid-file=centos7.localdomain.pid --socket=/var/lib/mysql/mysql.sock
kill -9 2747 3105
/* Перезапустим mysql уже известной командой или */
systemctl start mariadb
/* Все готово. Но можно еще забить пароль в секцию client в одинарных кавычках (/root/.my.cnf) */
cat /root/.my.cnf
[client]
user=root
password='MyNewPass'
/* well done */
mysqladmin ver
mysqladmin Ver 9.1 Distrib 10.1.19-MariaDB, for Linux on x86_64
Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.
Server version 10.1.19-MariaDB
Protocol version 10
Connection Localhost via UNIX socket
UNIX socket /var/lib/mysql/mysql.sock
Uptime: 32 sec
Threads: 1 Questions: 1 Slow queries: 0 Opens: 18 Flush tables: 1 Open tables: 11 Queries per second avg: 0.031
https://community.centminmod.com/threads/how-to-reset-mysql-root-user-password-for-centos-7-mariadb-10-1-19.9811/