Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 错误1698(28000):拒绝用户访问';根'@';本地主机';_Mysql_Iredmail - Fatal编程技术网

Mysql 错误1698(28000):拒绝用户访问';根'@';本地主机';

Mysql 错误1698(28000):拒绝用户访问';根'@';本地主机';,mysql,iredmail,Mysql,Iredmail,我正在安装一个新服务器,并一直遇到这个问题 当我尝试使用root用户登录MySQL数据库时,我得到错误: 错误1698(28000):拒绝用户“root”@“localhost”的访问 无论我是通过终端(SSH)、PHPMyAdmin还是MySQL客户端(例如Navicat)进行连接。他们都失败了 我查看了mysql.user表,得到以下结果: +------------------+-------------------+ | user | host

我正在安装一个新服务器,并一直遇到这个问题

当我尝试使用root用户登录MySQL数据库时,我得到错误:

错误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 |
+------------------+-------------------+
$ 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 |
+------------------+-----------------------+
sudo service mysql restart
如您所见,root应该具有访问权限

服务器非常简单,因为我已经尝试解决了一段时间了

它使用Apache、MySQL和PHP运行Ubuntu16.04.1LTS,这样它就可以托管网站,而iRedMail 0.9.5-1则可以托管邮件

在安装iRedMail之前,登录MySQL数据库可以正常工作。我也试过了,只是安装了iRedMail,但是root,也不起作用


如果有人能告诉我如何修复MySQL登录问题,或者如何在现有MySQL安装的基础上安装iRedMail。是的,我尝试了,但在配置文件中找不到这些变量。

您想使用root用户访问MySQL,但没有提供root用户的正确密码

如果您需要为root用户设置一个新密码,MySQL的网站上有很多关于如何设置密码的文档:


我将不在这里显示流程,因为上面链接上的MySql文档清晰明了

我建议删除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
并再次安装,但这次自己设置根密码。 这将节省很多精力

sudo apt-get update
sudo apt-get install mysql-server

一些系统,如Ubuntu、mysql,默认情况下使用

基本上意味着:使用它的db_用户将通过系统用户证书进行“身份验证”。您可以通过执行以下操作查看您的
root
用户是否设置为这样:

+------------------+-------------------+
| 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 |
+------------------+-------------------+
$ 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 |
+------------------+-----------------------+
sudo service mysql restart
如您在查询中所见,
root
用户正在使用
auth\u socket
插件

有两种方法可以解决此问题:

  • 您可以将root用户设置为使用
    mysql\u native\u密码
    插件
  • 您可以使用系统用户创建新的
    db\u用户
    (推荐)
  • 选项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;
    
    $ sudo service mysql restart
    
    选项2:(用您的用户名替换您的系统用户)

    请记住,如果您使用选项2,您必须连接到mysql作为您的系统用户名(
    mysql-u您的系统用户

    注意:在某些系统(例如Debian stretch)上调用了“auth_socket”插件,因此相应的SQL命令应该是:
    UPDATE user SET plugin='unix_socket'WHERE user='YOUR_SYSTEM_user'

    更新: 从@andy的评论来看,mysql 8.x.x似乎更新/替换了
    caching\u sha2\u password
    auth\u socket
    ,我没有使用mysql 8.x.x进行测试的系统设置,但是上面的步骤应该可以帮助您理解这个问题。答复如下:


    MySQL 8.0.4的一个变化是新的默认身份验证插件是“缓存\u sha2\u密码”。新的“YOUR_SYSTEM_USER”将具有此身份验证插件,您现在可以使用“mysql-u YOUR_SYSTEM_USER-p”从bash shell登录,并在提示符处为该用户提供密码。不需要“更新用户设置插件”步骤。有关8.0.4默认身份验证插件更新,请参见,

    我在通过Windows 10桌面上的Putty与Debian 8虚拟机进行交互时遇到了此问题

    我在这里尝试了各种各样的建议,但是没有什么效果,我正在Debian主机上运行MariaDB。最后,我发现我无法在安全模式下启动db服务器,但我不需要,并且以下命令实际上对我有效,即允许新创建的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
    
    如果上述方法对您不太有效,请按照zetacu在上述帖子()中概述的步骤进行操作,然后按照我的步骤进行操作

    现在,您应该能够使用远程终端客户端并使用以下命令安全地登录mysql:

    mysql -u your_user_name -p
    

    *出现提示时键入密码第一步:转到/etc/phpmyadmin/config.inc.php,然后取消对AllowNoPassword所在行的注释。 第二步:登录到mysql默认帐户

    mysql -u root -p
    use mysql;
    update user set plugin="" where user='root';
    flush privilege;
    

    就这些

    新版本的MYSQL就是这样做的。

    sudo mkdir /var/run/mysqld
    
    sudo chown mysql: /var/run/mysqld
    
    sudo mysqld_safe --skip-grant-tables --skip-networking &
    
     mysql -uroot mysql
    
    sudo mysqladmin -S /var/run/mysqld/mysqld.sock shutdown
    
    sudo service mysql start
    
    在新的my sql中,如果安装时密码为空,则它基于
    auth_socket
    插件

    正确的方法是使用
    sudo
    权限登录到我的sql

    $ sudo mysql -u root -p
    
    然后使用以下命令更新密码:

    $ ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new-password';
    
    完成此操作后,请停止并启动mysql服务器

    $  sudo service mysql stop
    $  sudo service mysql start
    

    有关完整的详细信息,请参阅。

    步骤1
    sudomysql-u root-p

    第二步<代码>使用mysql

    第三步<代码>更改用户“root”@“localhost”,由“admin”使用mysql_native_密码标识

    这里的“admin”是您的新密码,您可以更改它

    第四步<代码>退出

    谢谢。你完了。

    为我工作:

    mysql --user=root mysql
    CREATE USER 'some_user'@'%' IDENTIFIED BY 'some_pass';
    GRANT ALL PRIVILEGES ON *.* TO 'some_user'@'%' WITH GRANT OPTION;
    FLUSH PRIVILEGES;
    

    这也发生在我身上。问题在于linux发行版附带的mysql repo。因此,当你简单地做:
    $sudo apt安装mysql服务器
    它从默认的repo安装mysql,这就产生了这个问题。因此,为了克服这个问题,您需要卸载已安装的mysql
    $sudo apt remove mysql*--清除--自动删除

    然后从mysql官方网站下载mysql repo 按照他们的文档说明如何添加和安装repo。 这没有问题。 正如@zetacu所回答的,您可以验证mysql root现在确实使用mysql\u native\u密码插件

    mysql:5.7

  • 跳过授权表
    添加到文件末尾
    sudo mysql service restart 
    
    sudo mysql -u root -p
    
    sudo service mysql stop
    
    sudo mkdir /var/run/mysqld
    
    sudo chown mysql: /var/run/mysqld
    
    sudo mysqld_safe --skip-grant-tables --skip-networking &
    
     mysql -uroot mysql
    
    UPDATE mysql.user SET authentication_string=PASSWORD('YOURNEWPASSWORD'), plugin='mysql_native_password' WHERE User='root' AND Host='%';
    EXIT;
    
    sudo mysqladmin -S /var/run/mysqld/mysqld.sock shutdown
    
    sudo service mysql start
    
    dev@Dev-007:~$ mysql -u root -p
    Enter password: 
    ERROR 1698 (28000): Access denied for user 'root'@'localhost'
    
    dev@Dev-007:~$ sudo mysql -u root -p
    
    mysql> alter user 'root'@'%' identified with mysql_native_password by 'me123';
    Query OK, 0 rows affected (0.14 sec)
    
    mysql> 
    
    mysql -u $(whoami)
    
    use mysql;
    set password for 'root'@'localhost' = password('YOUR_ROOT_PASSWORD_HERE');
    flush privileges;
    quit
    
    mysql -u root -p
    
    sudo mysql
    
    mysql> use mysql
    mysql> update user set authentication_string=PASSWORD("mypass") where user='root';
    mysql> flush privileges;
    mysql> quit;
    
    sudo service mysql restart
    
    sudo mysql_secure_installation
    
    sudo mysql
    
    1. CREATE USER 'jack'@'localhost' IDENTIFIED WITH mysql_native_password BY '<<any password>>';
    
    2. GRANT ALL PRIVILEGES ON *.* TO 'jack'@'localhost';
    
    3. SELECT user,plugin,host FROM mysql.user WHERE user = 'root';
    +------+-------------+-----------+
    | user | plugin      | host      |
    
    +------+-------------+-----------+
    
    | root | auth_socket | localhost |
    
    +------+-------------+-----------+
    
    4. ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '<<any password>>';
    
    5. FLUSH PRIVILEGES;
    
    sudo mysql -u root -p
    
    SHOW VARIABLES LIKE 'validate_password%';
    
    +--------------------------------------+--------+
    | 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      |
    +--------------------------------------+--------+
    
    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%';
    
    +--------------------------------------+-------+
    | Variable_name                        | Value |
    +--------------------------------------+-------+
    | validate_password.check_user_name    | ON    |
    | validate_password.dictionary_file    |       |
    | validate_password.length             | 4     |
    | validate_password.mixed_case_count   | 1     |
    | validate_password.number_count       | 0     |
    | validate_password.policy             | LOW   |
    | validate_password.special_char_count | 0     |
    +--------------------------------------+-------+
    
    exit;
    sudo mysql -u root -p
    
    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new-password';
    
    exit;
    
    sudo mysql -u root -p
    
    SET GLOBAL validate_password.length = 4;
    SET GLOBAL validate_password.mixed_case_count = 0;
    SET GLOBAL validate_password.number_count = 0;
    SET GLOBAL validate_password.policy = LOW;
    SET GLOBAL validate_password.special_char_count = 0;
    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'test';