【问题标题】:MySQL Error: : 'Access denied for user 'root'@'localhost'MySQL 错误::\'拒绝用户 \'root\'@\'localhost\' 的访问
【发布时间】:2023-02-16 23:27:36
【问题描述】:

考虑:

./mysqladmin -u root -p** '_redacted_'  

输出(包括输入密码):

输入密码:

mysqladmin:连接到“localhost”处的服务器失败错误:
'拒绝用户'root'@'localhost'的访问(使用密码:YES)'

我怎样才能解决这个问题?

【问题讨论】:

  • @clearlight不是同一个问题,这篇文章是mysqladmin在mysql中赢得超级特权的问题,另一篇文章是来自套接字的简单连接的问题。
  • 如果存在 ~/.my.cnf 文件,请尝试删除。
  • 我知道这是旧的,但想对未来的访客说。不要在命令本身中输入您的 mysql 密码,尤其是 root 密码,否则它将存储在您的 shell 历史记录中。只需保留 -p 选项本身,mysql 将提示输入密码。
  • 对于 MySQL 8,使用 sudo mysql_secure_installation 并设置一个强密码。参考检查本教程的第5步phoenixnap.com/kb/how-to-install-mysql-on-ubuntu-18-04

标签: mysql sql database database-connection


【解决方案1】:

我找到的所有解决方案都比必要的复杂得多,而且没有一个对我有用。这是解决我的问题的解决方案。没有任何需要重新启动mysqld或者以特殊权限启动它。

sudo mysql

-- for MySQL
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';

-- for MariaDB
ALTER USER 'root'@'localhost' IDENTIFIED VIA mysql_native_password USING PASSWORD('root');

通过一个查询,我们正在改变授权插件到mysql_native_password并将根密码设置为根 (随意在查询中更改它).

现在您应该可以使用 root 登录了。更多信息可以在MySQL documentation或MariaDB documentation找到。

(退出 MySQL 控制台控制键+丁或通过输入出口.)

【讨论】:

  • 我无法做到这一点...“您的 SQL 语法有误;请查看与您的 MariaDB 服务器版本对应的手册,了解在...附近使用的正确语法”。
  • 这个答案有效,我不小心添加了没有用的答案投票,请原谅!
  • 单行版本:sudo mysql -e “更改用户‘root’@‘localhost’通过‘root’识别 mysql_native_password”
  • 在 Ubuntu 18.04 上运行良好
  • 这把我拒之门外,甚至 sudo mysql 也不再有效。不得不完全删除mysql并重新安装。
【解决方案2】:
  1. 打开并编辑/etc/my.cnf 或/etc/mysql/my.cnf,具体取决于您的发行版。
  2. 在[mysqld]下添加skip-grant-tables
  3. 重启MySQL
  4. 您现在应该可以使用以下命令登录 MySQLmysql -u root -p
  5. 运行mysql> flush privileges;
  6. 设置新密码ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword';
  7. 回到 /etc/my.cnf 和删除/评论跳过授权表
  8. 重启MySQL
  9. 现在您可以使用新密码登录mysql -u root -p

【讨论】:

  • 你好,我有同样的问题。我做了上面的事情,它解决了问题,但是每次我重新启动 CentOS 时,我都需要再次执行所有步骤(我收到消息:用户 'root'@'localhost' 的访问被拒绝(使用密码:NO)-当运行命令 mysql (或任何 sql 命令)时,我在每次重新启动时都像上面那样一遍又一遍地做。
  • 太糟糕了,这不适用于 MariaDB:You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'USER 'root'@'localhost' IDENTIFIED BY 'NewPassword'' at line 1
  • 我发现这个工作 @PhilippLudwig set PASSWORD FOR 'root'@'localhost' = PASSWORD('root'); 我在第 5 步之后做了这个。这是我的命令提示符输出的样子:MariaDB [(none)]> MariaDB [(none)]> set PASSWORD FOR 'root'@'localhost' = PASSWORD('root'); Query OK, 0 rows affected (0.00 sec)
  • 对于第 3 步重启 MariaDB:我发现以下作品:sudo systemctl restart mariadb
  • 有些人可能会在 /etc/mysql/my.cnf 中找到该文件
【解决方案3】:

以前的答案都没有帮助我解决这个问题,所以here's the solution I found。

相关部分:

在运行 MySQL 5.7(及更高版本)的 Ubuntu 系统中,MySQL 根用户默认设置为使用 auth_socket 插件进行身份验证,而不是使用密码。在许多情况下,这可以提供更高的安全性和可用性,但是当您需要允许外部程序(例如 phpMyAdmin)访问用户时,它也会使事情复杂化。

为了使用密码以 root 身份连接到 MySQL,您需要将其身份验证方法从 auth_socket 切换为 mysql_native_password。为此,请从您的终端打开 MySQL 提示符:

sudo mysql

接下来,使用以下命令检查每个 MySQL 用户帐户使用的身份验证方法:

SELECT user,authentication_string,plugin,host FROM mysql.user;

输出

+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             |                                           | auth_socket           | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)

在此示例中,您可以看到 root 用户实际上使用 auth_socket 插件进行身份验证。要将 root 帐户配置为使用密码进行身份验证,请运行以下 ALTER USER 命令。请务必将密码更改为您选择的强密码,并注意此命令将更改您在第 2 步中设置的 root 密码:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

然后,运行 FLUSH PRIVILEGES 告诉服务器重新加载授权表并使您的新更改生效:

FLUSH PRIVILEGES;

再次检查每个用户使用的身份验证方法,以确认 root 不再使用 auth_socket 插件进行身份验证:

SELECT user,authentication_string,plugin,host FROM mysql.user;

输出

+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             | *3636DACC8616D997782ADD0839F92C1571D6D78F | mysql_native_password | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)

您可以在此示例输出中看到 root MySQL 用户现在使用密码进行身份验证。一旦你在你自己的服务器上确认了这一点,你就可以退出 MySQL shell:

exit

【讨论】:

  • Worx 也适用于ubuntu 20.04 上的mysql Ver 8.0.20-0ubuntu0.20.04.1 for Linux on x86_64 ((Ubuntu))。干杯
  • 任何在 Docker 中面临 MySQL 问题的人。这就是你们的解决方案。谢谢!
  • 在 Debian 10 中,插件不是 auth_socket 而是unix_socket。
  • 你能解决格式问题吗(也是在第一次修订中)?
  • 我收到此错误,为什么? You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'BY 'MYPERSONALPASSWORD'' at line 1我刚刚粘贴了这一行:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'MYPERSONALPASSWORD';
【解决方案4】:

我尝试了很多步骤来纠正这个问题。这个问题的可能解决方案有很多来源,很难从废话中过滤掉意义。我终于找到了一个很好的解决方案here:

第一步:识别数据库版本

mysql --version

对于 MySQL,您会看到类似这样的输出:

mysql  Ver 14.14 Distrib 5.7.16, for Linux (x86_64) using  EditLine wrapper

或者像这样为 MariaDB 输出:

mysql  Ver 15.1 Distrib 5.5.52-MariaDB, for Linux (x86_64) using readline 5.1

记下您正在运行的数据库和版本,因为您稍后将使用它们。接下来,您需要停止数据库以便您可以手动访问它。

第 2 步:停止数据库服务器

要更改 root 密码,您必须事先关闭数据库服务器。

您可以通过以下方式对 MySQL 执行此操作:

sudo systemctl stop mysql

对于 MariaDB 有:

sudo systemctl stop mariadb

第三步:不进行权限检查重启数据库服务器

如果您运行 MySQL 和 MariaDB 而没有加载有关用户权限的信息,它将允许您以 root 权限访问数据库命令行而无需提供密码。这将允许您在不知情的情况下访问数据库。

为此,您需要停止数据库加载存储用户权限信息的授权表。因为这有点安全风险,您还应该跳过网络以防止其他客户端连接。

在不加载授权表或启用网络的情况下启动数据库:

sudo mysqld_safe --skip-grant-tables --skip-networking &

此命令末尾的 & 符号将使此进程在后台运行,以便您可以继续使用您的终端。

现在您可以以 root 用户身份连接到数据库,不需要密码。

mysql -u root

您将立即看到一个数据库 shell 提示符。

MySQL提示符

Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

mysql>

MariaDB 提示符

Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

MariaDB [(none)]>

现在您拥有 root 访问权限,您可以更改 root 密码。

第 4 步:更改 root 密码

mysql> FLUSH PRIVILEGES;

现在我们可以真正更改root密码了。

为了MySQL 5.7.6 及更新版本也MariaDB 10.1.20 及更新版本,使用以下命令:

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

为了MySQL 5.7.5 及更早版本也MariaDB 10.1.20 及更早版本, 使用:

mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_password');

确保用您选择的新密码替换new_password。

笔记:如果 ALTER USER 命令不起作用,通常表示存在更大的问题。但是,您可以尝试UPDATE ... SET 来重置 root 密码。

[重要] 这是解决我的特定问题的特定行:

mysql> UPDATE mysql.user SET authentication_string = PASSWORD('new_password') WHERE User = 'root' AND Host = 'localhost';

请记住在此之后重新加载授权表。

无论哪种情况,您都应该看到命令已成功执行的确认信息。

Query OK, 0 rows affected (0.00 sec)

密码已更改,因此您现在可以停止数据库服务器的手动实例并像以前一样重新启动它。

第五步:正常重启数据库服务器

本教程进一步介绍了重新启动数据库的步骤,但我使用的唯一部分是:

对于 MySQL,使用:

sudo systemctl start mysql

对于 MariaDB,使用:

sudo systemctl start mariadb

现在您可以通过运行以下命令确认新密码已正确应用:

mysql -u root -p

该命令现在应提示输入新分配的密码。输入它,您应该可以按预期访问数据库提示符。

结论

您现在拥有对恢复的 MySQL 或 MariaDB 服务器的管理访问权限。确保您选择的新 root 密码安全可靠,并将其保存在安全的地方。

【讨论】:

  • MariaDB 10.2.0 中引入了 ALTER USER 语句。
  • 哇 ! mysql> UPDATE mysql.user SET authentication_string = PASSWORD('new_password') WHERE User = 'root' AND Host = 'localhost'; 这条线对我来说真是救命稻草!
  • 我使用 MariaDB 10.3.25 并且这有效:mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_password');
  • 我喜欢这种方法,因为它允许我在不永久修改权限的情况下临时创建数据库备份,尽管最好不要在后台运行mysqld_safe,因为之后我似乎遇到了问题试图杀死它然后得到mysql 服务再次正常运行(尽管完全重启 Linux 似乎可以解决问题)。
  • -bash: mysqld_safe: command not found AlmaLinux release 8.5
【解决方案5】:

在尝试了所有其他答案之后,这最终对我有用:

sudo mysql -- It does not ask me for any password

-- Then in MariaDB/MySQL console:
update mysql.user set plugin = 'mysql_native_password' where User='root';
FLUSH PRIVILEGES;
exit;

我在博文中找到了答案Solved: Error “Access denied for user ‘root’@’localhost’” of MySQL — codementor.tech(中等的)。

【讨论】:

  • 这个插件行真的很有帮助。我尝试了很多组合,但这是唯一适用于 Linux (x86_64) 版本 14.14 Distrib 5.7.27 的组合
  • 这也帮助我使用 mysql 5.7。所以不仅适用于mariadb
  • 我刚刚在 MySQL 8 Ubuntu 20.04 上使用了它并且它有效。使用skip-grant-table(my.conf 或mysql 命令)的其他答案无效。我可以使用服务帐户 (askubuntu.com/a/120769/169836) 进入,但 UPDATE mysql.user SET Password=PASSWORD('') WHERE User='root'; 不起作用。只有在使用插件部分时才起作用。谢谢~
  • 这对我使用 mysql 8 和 Ubuntu 20.04 很有帮助。
  • 该插件应该做什么?你能链接到官方文档吗?请通过 editing (changing) your answer 回复,而不是在 cmets 中回复(没有“编辑:”、“更新:”或类似的 - 答案应该看起来就像是今天写的一样)。
【解决方案6】:

对于 Ubuntu/Debian 用户

(它可能适用于其他发行版,尤其是基于 Debian 的发行版。)

运行以下命令连接为root(没有任何密码)

sudo /usr/bin/mysql --defaults-file=/etc/mysql/debian.cnf

如果你不想在每次连接时都添加--defaults-file作为root,你可以将/etc/mysql/debian.cnf复制到你的主目录中:

sudo cp /etc/mysql/debian.cnf ~/.my.cnf

进而:

sudo mysql

【讨论】:

  • 这就是全部。显然,默认情况下,“root”在 Ubuntu 上不是“root”。
【解决方案7】:

根据我的经验,如果你在没有 sudo 的情况下运行,它将无法工作。所以确保你的命令是;

sudo mysql -uroot -p

【讨论】:

  • 这应该是公认的答案。问题不是关于忘记密码,而是关于错误消息,因为如果不使用 sudo 权限运行,您将无法以 root 身份登录。
  • 最上面的答案都是不好的。为了节省时间,请使用此答案 - stackoverflow.com/a/58155034/4759176
  • 这应该是最佳答案。接受我的赞成票。谢谢
【解决方案8】:

对于新的 Linux 用户来说,这可能是一项艰巨的任务。让我用 MySQL 8 更新它(目前可用的最新版本是 8.0.12,截至 2018-09-12)

  1. 打开位于“/etc/mysql/mysql.conf.d/”的“mysqld.cnf”配置文件。
  2. 添加跳过授权表到 [mysql] 文本的下一行并保存。
  3. 以“sudo service mysql restart”重新启动 MySQL 服务。现在您的 MySQL 无需任何身份验证。
  4. 连接到 MySQL 客户端(也称为 mysql-shell)mysql -u root -p.截至目前,无需输入密码。
  5. 运行 SQL 命令刷新权限;
  6. 现在重置密码为更改用户 'root'@'localhost' 由 'MyNewPassword' 标识;
  7. 现在让我们回到正常状态;从“mysqld.cnf”中删除该行“skip-grant-tables”并重新启动服务。

    就是这样。

【讨论】:

  • mysql -u root -p还是要密码ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
  • @Salem 尝试使用 sudo,应该可以
  • 当我运行这些步骤时,我在第 6 步收到此错误:“错误 1290 (HY000):MySQL 服务器正在使用 --skip-grant-tables 选项运行,因此它无法执行此语句”
【解决方案9】:

就我而言,在 Debian 10 下,错误

ERROR 1698 (28000): Access denied for user 'root'@'localhost'

解决了(好办法)

sudo mysql -u root -p mysql

坏方法:

mysql -u root -p mysql

【讨论】:

  • 这解决了这个问题。只需使用 sudo(无密码)授予权限,这样执行:sudo mysql -u root -p
【解决方案10】:

我这样做是为了在 OS X 中的 MySQL 初始设置中设置我的 root 密码。打开一个终端。

sudo sh -c 'echo /usr/local/mysql/bin > /etc/paths.d/mysql'

关闭终端并打开一个新终端。

以下在 Linux 中工作,用于设置 root 密码。

sudo /usr/local/mysql/support-files/mysql.server stop
sudo mysqld_safe --skip-grant-tables

(sudo mysqld_safe --skip-grant-tables:这对我第一次没有用。但是在第二次尝试时,它成功了。)

然后登录MySQL:

mysql -u root

FLUSH PRIVILEGES;

现在更改密码:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpassword';

重启MySQL:

sudo /usr/local/mysql/support-files/mysql.server stop
sudo /usr/local/mysql/support-files/mysql.server start

【讨论】:

    【解决方案11】:

    我的站在这里:

    • 优本21.04

    • PHP5.6.40-57

    • 数据库5.7.37

    让我们配置它

    nano /etc/mysql/mysql.conf.d/mysqld.cnf
    

    在底部,写这个

    skip-grant-tables
    

    重新加载它

    service mysql restart
    

    【讨论】:

      【解决方案12】:

      在你的MySQL Workbench,你可以转到左侧边栏,在管理下选择“用户和权限”,在用户帐户下单击根,在右侧部分单击选项卡“帐户限制”以增加最大查询、更新等,然后单击选项卡“管理角色”并选中复选框以授予帐户访问权限。

      【讨论】:

        【解决方案13】:

        呃 - 对我没有任何用处!我有一台运行 MariaDB 5.5.64 的 CentOS 7.4 机器。

        在从 YUM 安装 MariaDB 之后,我必须这样做;

        systemctl restart mariadb
        mysql_secure_installation
        

        mysql_secure_installation 将带您完成多个步骤,包括“设置 root 密码?[Y/n]”。只需说“y”并给它一个密码。根据您的意愿回答其他问题。

        然后你可以使用你的密码进入

        mysql -u root -p
        

        它会存活下来

        systemctl restart mariadb
        

        钥匙

        然后,我检查了/bin/mysql_secure_installation 源代码以了解它是如何神奇地更改 root 密码的,而这里的其他答案都不能。导入位是:

        do_query "UPDATE mysql.user SET Password=PASSWORD('$esc_pass') WHERE User='root';"
        

        ...它说的是SET Password=...,而不是SET authentication_string = PASSWORD...。因此,此版本 (5.5.64) 的正确程序是:

        使用mysql -u root -p登录,使用您已经设置的密码。

        或者,停止数据库并启动它:

        mysql_safe --skip-grant-tables --skip-networking &
        

        来自数据库>迅速的:

        use mysql;
        select host,user,password from user where user = 'root';
        (observe your existing passwords for root).
        UPDATE mysql.user set Password = PASSWORD('your_new_cleartext_password') where user = 'root' AND host = 'localhost';
        select host,user,password from user where user = 'root';
        flush privileges;
        quit;
        

        杀死正在运行的 mysqld_safe。重新启动 MariaDB。以根用户身份登录:mysql -u -p。使用您的新密码。

        如果需要,您可以一次设置所有根密码。我认为这是明智的:

        mysql -u root -p
        
        (login)
        use mysql;
        select host,user,password from user where user = 'root';
        UPDATE mysql.user set Password = PASSWORD('your_new_cleartext_password') where user = 'root';
        select host,user,password from user where user = 'root';
        flush privileges;
        quit;
        

        这将对所有根密码执行更新:即“localhost”、“127.0.0.1”和“::1”

        以后我去RHEL8什么的,我会尽量记得查/bin/mysql_secure_installation看看这些人是怎么做到的,谁为这个操作系统配置了 MariaDB。

        【讨论】:

          【解决方案14】:

          使用sudo 更改您的密码:

          sudo mysql
          
          ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'insert_password';
          

          来源:Phoenixnap - Access denied for user root localhost

          【讨论】:

            【解决方案15】:

            针对 macOS 的修复

            1. 从https://downloads.mysql.com/archives/community/ 安装 MySQL(8.x 是最新的,但要确保版本与 macOS 版本兼容)

            2. 在安装过程中为root(让<root-password>为密码)提供密码(不要忘记记住密码!)

            3. 选择使用旧密码加密选项(这是我用过但没有尝试过的使用强密码加密选项)

            4. 搜索并打开MySQL.prefPane(使用搜索工具)

              1. 选择配置标签
              2. 点击选择选项配置文件
                1. 选择/private/etc/my.cnf
                2. 从终端打开一个名为 /etc/my.cnf (vi /etc/my.cnf) 的新文件或现有文件,添加以下内容:

                   [mysqld]
                   skip-grant-tables
                  
                3. 重启mysqld如下:

                  1. ps aux | grep mysql
                  2. kill -9 <pid1> <pid2> ...(获取所有 MySQL 相关进程的 pids)
                  3. mysqld 自动重启

                  4. 通过从终端运行以下命令来验证是否设置了该选项:

                     ps aux | grep mysql
                    
                     > mysql/bin/mysqld ... --defaults-file=/private/etc/my.cnf ... (output)
                    
                  5. 运行以下命令进行连接(让 mysql-<version>-macos<version>-x86_64 成为安装 MySQL 的文件夹。要获取实际文件夹,请运行 ls /usr/local/ 并复制文件夹名称):

                     /usr/local/mysql-<version>-macos<version>-x86_64/bin/mysql -uroot -p<root-password>
                    

            【讨论】:

            • 最上面的答案都是不好的。为了节省时间,请使用此答案 - stackoverflow.com/a/58155034/4759176
            • 我只是复制粘贴了适用于 Mac OS 的解决方案。我希望它有用。我没有在 Windows 或 Linux 上尝试此修复,我认为其他解决方案应该适用于其他操作系统。
            【解决方案16】:

            如果你和我一样,之前答案中的所有信息都失败了,请继续卸载机器上所有版本的 MySQL,使用命令sudo find / -name "mysql" 和rm -rf 搜索所有剩余的 MySQL 文件,每个文件或目录都附有“mysql”名称(您应该跳过与编程语言库相关的文件)。

            现在安装新版本的 MySQL 并享受。注意:您将丢失所有数据,因此请先权衡您的选择。

            【讨论】:

              【解决方案17】:

              有时在安装时会设置默认密码 - mentioned in the documentation。这可以通过以下命令确认。

              sudo grep 'temporary password' /var/log/mysqld.log
              

              【讨论】:

                【解决方案18】:

                如果您没有足够的权限,就会发生这种情况。

                输入su,输入root密码,再试一次。

                【讨论】:

                  【解决方案19】:

                  在使用以下答案尝试了很多之后:

                  ALTER USER 'root'@'localhost' IDENTIFIED VIA mysql_native_password USING PASSWORD('root');
                  

                  和类似的答案一样,我的终端仍然向我抛出以下错误:

                  您的 SQL 语法有误;查看与您的 MariaDB 服务器版本相对应的手册,了解在附近使用的正确语法。

                  所以在网上研究之后,这条线解决了我的问题,让我更改了 root 用户密码:

                  sudo mysqladmin --user=root password "[your password]"
                  

                  【讨论】:

                    【解决方案20】:

                    窗户:

                    cd Amppsmysqlin :

                    mysql.exe -u root -pmysql
                    

                    mysql 启动后(你可以看到这样的 shell mysql> ) 使用此查询:

                     ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
                    

                    再次尝试使用 root root 访问

                    【讨论】:

                      【解决方案21】:

                      如果你像我一样通过谷歌访问这个页面并且之前的解决方案都没有奏效,那么最终的错误是我 100% 的愚蠢。我没有连接到服务器。一旦连接,一切都会一帆风顺。

                      如果它有助于了解我的设置,我正在使用 Sequel Pro 并尝试使用 NPM 包通过 Node 连接到它,数据库.我不认为我需要实际连接(除了运行 Sequel Pro),因为我已经在我的应用程序中这样做了。

                      【讨论】:

                        【解决方案22】:

                        我在设置 mysql-8 zip 版本时遇到了同样的错误。最后,切换到无缝工作的installer 版本。安装时有提示设置root密码。一旦设置,它肯定会工作。

                        【讨论】:

                          【解决方案23】:

                          根据MariaDB official documentation,在MariaDB 10.4.3及之后的版本中,默认安装了unix_socket认证插件。

                          为了禁用它,并恢复到以前的mysql_native_password身份验证方法,请在my.cnf文件的[mysqld]部分添加以下行:

                          [mysqld]
                          unix_socket=OFF
                          

                          然后运行:

                          mysql_install_db --auth-root-authentication-method=normal
                          

                          然后开始mysqld

                          此命令将正常工作:

                          mysqladmin -u root password CHANGEME
                          

                          有关其他信息,请参阅Configuring mysql_install_db to Revert to the Previous Authentication Method.

                          【讨论】:

                          • unix_socket 应该做什么,为什么需要进行此更改?你能add稍微回答一下吗?请通过 editing (changing) your answer 回复,而不是在 cmets 中回复(没有“编辑:”、“更新:”或类似的 - 答案应该看起来就像是今天写的一样)。
                          【解决方案24】:

                          我试图在 Mac 上利用 Docker 桌面来运行 5.7.35,这docker-compose.yml配置允许它工作:

                          特别是它增加了这条线......

                          命令:--default-authentication-plugin=mysql_native_password

                          ...成功了

                          version: '3.3'
                          services:
                            mysql_db:
                              image: mysql:5.7
                              command: --default-authentication-plugin=mysql_native_password
                              restart: always
                              environment:
                                MYSQL_ROOT_PASSWORD: 'your_password'
                              ports:
                                - '3306:3306'
                              expose:
                                - '3306'
                              volumes:
                                - ~/your/volume/path:/var/lib/mysql
                          

                          【讨论】:

                          • 为什么那样有用吗?解释是什么?请通过 editing (changing) your answer 回复,而不是在 cmets 中回复(没有“编辑:”、“更新:”或类似的 - 答案应该看起来就像是今天写的一样)。
                          【解决方案25】:

                          要检查的一件事是来自主机的过滤器。默认情况下它可能是“localhost”。您是否尝试从远程客户端连接?将其更改为“%”。

                          【讨论】:

                            【解决方案26】:

                            在 Arch Linux 上

                            包裹:mysql 8.0.29-1

                            对我有用的是:

                            1. 编辑 my.cnf 文件,通常可以在 /etc/mysql/my.cnf 找到并将此 skip-grant-tables 附加在文件的底部/末尾。

                            2. 调用sudo systemctl restart mysqld重启mysql服务

                            3. 通过调用sudo systemctl status mysqld确保mysql服务已经正常启动

                            4. 通过调用mysql -u root -p使用'root'登录到mysql

                            5. 通过调用flush privileges;刷新权限

                            6. 通过CREATE USER 'root'@'localhost' IDENTIFIED BY 'rootpassword';创建新用户

                            7. (如果你打算在 PHP 中使用这个数据库),你应该改用这个CREATE USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'rootpassword';

                            8. 通过依次调用以下命令检查您的更改是否已反映在数据库中:

                              • use mysql;
                              • SELECT User, password_last_changed FROM user;
                            9. 退出mysql控制台,编辑my.cnf文件注释/删除skip-grant-tables(位置参考步骤1)

                            10. 重启mysql服务(参考步骤2和步骤3)

                              就这样。

                            【讨论】:

                              【解决方案27】:

                              '-p' 参数不需要参数名称和值之间的空格。

                              代替

                              ./mysqladmin -u root -p 'redacted'
                              

                              使用

                              ./mysqladmin -u root -p'redacted'
                              

                              要不就

                              ./mysqladmin -u root -p
                              

                              这将提示您输入密码。

                              【讨论】:

                                【解决方案28】:

                                解决方案:放弃!

                                听我说。我花了整整两天时间试图让 MySQL 工作无济于事,总是遇到权限错误,这个问题的答案都没有解决。它达到了我认为如果我继续我会发疯的地步。

                                出于让它工作的耐心,我发送了安装 SQLite 的命令,只使用了 450 KB,它从一开始就完美运行。

                                如果您没有圣人般的耐心,请使用 SQLite 并为自己节省大量时间、精力、痛苦和存储空间……!

                                【讨论】:

                                  猜你喜欢
                                  • 1970-01-01
                                  • 2019-05-15
                                  • 2012-08-11
                                  • 1970-01-01
                                  • 2013-08-22
                                  • 1970-01-01
                                  • 1970-01-01
                                  • 2017-01-09
                                  相关资源
                                  最近更新 更多