所以...我正在设置一个新服务器并继续遇到这个问题.
当我尝试使用root用户登录MySQL数据库时,出现"ERROR 1698(28000):拒绝访问用户'root'@'localhost'"错误.
如果我通过终端(SSH),PHPMyAdmin或MySQL客户端(例如Navicat)进行连接并不重要.他们都失败了.
我查看了mysql.user表并获得以下内容:
+------------------+-------------------+
| user | host |
+------------------+-------------------+
| root | % |
| root | 127.0.0.1 |
| amavisd | localhost |
| debian-sys-maint | localhost |
| iredadmin | localhost |
| iredapd | localhost |
| mysql.sys | localhost |
| phpmyadmin | localhost |
| root | localhost |
| roundcube | localhost |
| vmail | localhost |
| vmailadmin | localhost |
| amavisd | test4.folkmann.it |
| iredadmin | test4.folkmann.it |
| iredapd | test4.folkmann.it |
| roundcube | test4.folkmann.it |
| vmail | test4.folkmann.it |
| vmailadmin | test4.folkmann.it |
+------------------+-------------------+
Run Code Online (Sandbox Code Playgroud)
如您所见,root应该具有访问权限.
服务器非常简单,因为我已经尝试解决这个问题了一段时间..
它运行Ubuntu 16.04.1 LTS与Apache,MySQL和PHP,因此它可以托管网站,和iRedMail 0.9.5-1,以便它可以托管邮件.
在安装iRedMail之前,登录MySQL数据库工作正常.我也试过,只是安装iRedMail,但是然后root,也行不通......
如果有人能告诉我如何修复我的MySQL登录问题或如何安装iRedMail,在现有的MySQL安装之上.是的,我尝试了安装提示,我在配置文件中找不到这些变量.
任何帮助深表感谢 :)
zet*_*acu 905
像Ubuntu这样的系统,mysql默认使用UNIX auth_socket插件.
基本上意味着:db_users使用它,将由系统用户凭证 "auth" .您可以root
通过执行以下操作来查看您的用户是否设置如下:
$ sudo mysql -u root # I had to use "sudo" since is new installation
mysql> USE mysql;
mysql> SELECT User, Host, plugin FROM mysql.user;
+------------------+-----------------------+
| User | plugin |
+------------------+-----------------------+
| root | auth_socket |
| mysql.sys | mysql_native_password |
| debian-sys-maint | mysql_native_password |
+------------------+-----------------------+
Run Code Online (Sandbox Code Playgroud)
正如您在查询中看到的那样,root
用户正在使用该auth_socket
插件
有两种方法可以解决这个问题:
mysql_native_password
插件db_user
和你一起创建一个新的system_user
(推荐)选项1:
$ sudo mysql -u root # I had to use "sudo" since is new installation
mysql> USE mysql;
mysql> UPDATE user SET plugin='mysql_native_password' WHERE User='root';
mysql> FLUSH PRIVILEGES;
mysql> exit;
$ service mysql restart
Run Code Online (Sandbox Code Playgroud)
选项2 :(用您拥有的用户名替换YOUR_SYSTEM_USER)
$ sudo mysql -u root # I had to use "sudo" since is new installation
mysql> USE mysql;
mysql> CREATE USER 'YOUR_SYSTEM_USER'@'localhost' IDENTIFIED BY '';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'YOUR_SYSTEM_USER'@'localhost';
mysql> UPDATE user SET plugin='auth_socket' WHERE User='YOUR_SYSTEM_USER';
mysql> FLUSH PRIVILEGES;
mysql> exit;
$ service mysql restart
Run Code Online (Sandbox Code Playgroud)
请记住,如果使用选项#2,则必须连接到mysql作为系统用户名(mysql -u YOUR_SYSTEM_USER
)
注意:在某些系统上(例如,Debian stretch),'auth_socket'插件被称为'unix_socket',因此相应的SQL命令应该是:UPDATE user SET plugin='unix_socket' WHERE User='YOUR_SYSTEM_USER';
更新:
从@安迪的评论似乎是MySQL的8.xx更新/更换auth_socket
为caching_sha2_password
我没有一个系统的设置与MySQL 8.xx来测试这一点,但是上面的步骤应该可以帮助你理解这个问题.这是回复:
MySQL 8.0.4的一个变化是新的默认身份验证插件是'caching_sha2_password'.新的'YOUR_SYSTEM_USER'将具有此auth插件,您现在可以使用"mysql -u YOUR_SYSTEM_USER -p"从bash shell登录,并在提示符下为该用户提供密码.无需"UPDATE用户SET插件"步骤.对于8.0.4默认的auth插件更新,请参阅https://mysqlserverteam.com/mysql-8-0-4-new-default-authentication-plugin-caching_sha2_password/
Nan*_*esh 119
点击这里:
新版本的MYSQL就是这样做的.
在新的my-sql中,如果密码在安装时保留为空,则它基于auth_socket
插件.
正确的方法是使用sudo
权限登录my-sql .
$ sudo mysql -u root -p
Run Code Online (Sandbox Code Playgroud)
然后使用以下命令更新密码:
$ ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new-password';
Run Code Online (Sandbox Code Playgroud)
一旦完成stop and start
了mysql服务器.
$ sudo service mysql stop
$ sudo service mysql start
Run Code Online (Sandbox Code Playgroud)
有关完整的详细信息,请参阅此链接.
对任何疑问发表评论.
小智 14
不需要须藤
数据库使用 2 个全权限帐户进行初始化:第一个是无法访问的“root”,第二个是您的用户名(使用命令检查whoami
)。
要启用 root 帐户的访问,您需要使用您的用户名登录
mysql -u $(whoami)
Run Code Online (Sandbox Code Playgroud)
并手动更改root密码
use mysql;
set password for 'root'@'localhost' = password('YOUR_ROOT_PASSWORD_HERE');
flush privileges;
quit
Run Code Online (Sandbox Code Playgroud)
以“root”身份登录
mysql -u root -p
Run Code Online (Sandbox Code Playgroud)
小智 9
经过数小时的努力,这里没有解决方案,这对我有用,然后我找到了一个 youtube 视频,它说密码列现在称为 authentication_string 。所以我可以按如下方式更改我的密码:首先从终端进入 mysql
sudo mysql
Run Code Online (Sandbox Code Playgroud)
然后在 mysql> 之后输入任何内容
mysql> use mysql
mysql> update user set authentication_string=PASSWORD("mypass") where user='root';
mysql> flush privileges;
mysql> quit;
Run Code Online (Sandbox Code Playgroud)
此时您已退出 mysql 回到您正常的终端位置。您需要重新启动 mysql 才能生效。对于该类型,请执行以下操作:
sudo service mysql restart
Run Code Online (Sandbox Code Playgroud)
请参阅此视频链接以更好地理解
我在我的Windows 10桌面上通过Putty与Debian 8 VM进行交互时遇到了这个问题.
我在这里尝试了各种建议,但没有什么工作,我在Debian主机上运行MariaDB.最后我发现我无法以安全模式启动数据库服务器,但我不需要以下命令实际上对我有用,即允许新创建的MySql用户登录MySql/MariaDB服务器:
sudo service mysql restart
sudo mysql # logs in automatically into MariaDB
use mysql;
update user set plugin='' where user='your_user_name';
flush privileges;
exit;
sudo service mysql restart # restarts the mysql service
Run Code Online (Sandbox Code Playgroud)
如果以上内容对您不起作用,请按照上面zetacu帖子(zetacu)中列出的步骤操作,然后按照我的步骤进行操作.
现在您应该能够使用远程终端客户端并使用以下命令安全地登录到mysql:
mysql -u your_user_name -p
Run Code Online (Sandbox Code Playgroud)
*在提示时输入密码
我建议删除Mysql连接 -
更新 - 这是适用于Mysql 5.5版,如果您的版本不同,请相应更改第一行
sudo apt-get purge mysql-server mysql-client mysql-common mysql-server-core-5.5 mysql-client-core-5.5
sudo rm -rf /etc/mysql /var/lib/mysql
sudo apt-get autoremove
sudo apt-get autoclean
Run Code Online (Sandbox Code Playgroud)
并再次安装但是这次自己设置了一个root密码.这将节省很多精力.
sudo apt-get update
sudo apt-get install mysql-server
Run Code Online (Sandbox Code Playgroud)
小智 7
为了第一
sudo mysql -u root -p
SHOW VARIABLES LIKE 'validate_password%';
Run Code Online (Sandbox Code Playgroud)
我们会看到这样的东西:
sudo mysql -u root -p
SHOW VARIABLES LIKE 'validate_password%';
Run Code Online (Sandbox Code Playgroud)
我们需要更改这些行:
- 验证密码.长度
- 验证密码.number_count
- 验证密码策略
- validate_password.special_char_count
SET GLOBAL validate_password.policy=LOW;
SET GLOBAL validate_password.length=4;
SET GLOBAL validate_password.number_count=0;
SET GLOBAL validate_password.special_char_count=0;
SHOW VARIABLES LIKE 'validate_password%';
Run Code Online (Sandbox Code Playgroud)
我们会看到:
+--------------------------------------+--------+
| Variable_name | Value |
+--------------------------------------+--------+
| validate_password.check_user_name | ON |
| validate_password.dictionary_file | |
| validate_password.length | 8 |
| validate_password.mixed_case_count | 1 |
| validate_password.number_count | 1 |
| validate_password.policy | MEDIUM |
| validate_password.special_char_count | 1 |
+--------------------------------------+--------+
Run Code Online (Sandbox Code Playgroud)
现在退出 MySQL 客户端:
exit;
sudo mysql -u root -p
Run Code Online (Sandbox Code Playgroud)
现在您可以编写密码,仅四个或更多字母。
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new-password';
exit;
sudo mysql -u root -p
Run Code Online (Sandbox Code Playgroud)
您的新密码位于用户“root”的数据库中;
小智 6
我也是第一次遇到同样的问题。
现在它已修复:
首先,复制/etc/mysql/mysql.conf.d/mysqld.cnf
文件并粘贴到/etc/mysql/my.cnf
.
您可以通过以下命令来完成:
sudo cp /etc/mysql/mysql.conf.d/mysqld.cnf /etc/mysql/my.cnf
Run Code Online (Sandbox Code Playgroud)
现在让我们重置密码:
在终端中使用以下命令:
sudo service mysql stop
sudo service mysql start
sudo mysql -u root
Run Code Online (Sandbox Code Playgroud)
现在您已进入 MySQL 控制台。
然后让我们编写一些查询来重置 root 密码:
USE mysql
update mysql.user set authentication_string=password('newpass') where user='root' and Host ='localhost';
update user set plugin="mysql_native_password";
flush privileges;
quit
Run Code Online (Sandbox Code Playgroud)
现在我们可以清洁了/etc/mysql/my.cng
。
在编辑器中打开上述文件并删除文件内的整行。
之后让我们重新启动MySQL:
sudo mysql service restart
Run Code Online (Sandbox Code Playgroud)
现在让我们使用新创建的密码来使用 MySQL:
sudo mysql -u root -p
Run Code Online (Sandbox Code Playgroud)
最后输入您新创建的密码。
经过几个小时的研究,我在这里找到了解决方案。
停止MySQL
sudo service mysql stop
Run Code Online (Sandbox Code Playgroud)
制作MySQL服务目录。
sudo mkdir /var/run/mysqld
Run Code Online (Sandbox Code Playgroud)
授予 MySQL 用户写入服务目录的权限。
sudo chown mysql: /var/run/mysqld
Run Code Online (Sandbox Code Playgroud)
手动启动 MySQL,无需权限检查或联网。
sudo mysqld_safe --skip-grant-tables --skip-networking &
Run Code Online (Sandbox Code Playgroud)
无需密码即可登录。
mysql -uroot mysql
Run Code Online (Sandbox Code Playgroud)
更新密码
UPDATE mysql.user SET authentication_string=PASSWORD('YOURNEWPASSWORD'), plugin='mysql_native_password' WHERE User='root' AND Host='%';
EXIT;
Run Code Online (Sandbox Code Playgroud)
关闭 MySQL。
sudo mysqladmin -S /var/run/mysqld/mysqld.sock shutdown
Run Code Online (Sandbox Code Playgroud)
正常启动MySQL服务。
sudo service mysql start
Run Code Online (Sandbox Code Playgroud)
步骤1。 sudo mysql -u root -p
第2步。 USE mysql;
第三步 ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'admin';
这里的“ admin”是您的新密码,您可以更改它。
第四步。 exit
谢谢。大功告成
就我而言,
mysql -u root -p
Enter password:
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
Run Code Online (Sandbox Code Playgroud)
我确信我的密码是正确的。否则,错误代码将为ERROR 1045 (28000): Access denied for user
所以我使用sudo重新登录,
sudo mysql -u root -p
Run Code Online (Sandbox Code Playgroud)
这次它对我有用。请参阅文档。
然后修改root密码,
mysql> alter user 'root'@'%' identified with mysql_native_password by 'me123';
Query OK, 0 rows affected (0.14 sec)
mysql>
Run Code Online (Sandbox Code Playgroud)
然后使用 重新启动服务器sudo /etc/init.d/mysql restart
。
有一个关于如何为最新的 MySQL 设置新密码的良好且定期更新的指南。
https://www.digitalocean.com/community/tutorials/how-to-install-mysql-on-ubuntu-20-04
最好从上面的链接阅读整个主题,但简而言之,这可能会有所帮助,
运行安全脚本:
sudo mysql_secure_installation
Run Code Online (Sandbox Code Playgroud)
“mysql_secure_installation”的详细信息
之后,您可以按照以下步骤更改密码
sudo mysql
Run Code Online (Sandbox Code Playgroud)
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'password';
如果您遇到问题,您可能需要重新安装 MySql。
归档时间: |
|
查看次数: |
429110 次 |
最近记录: |