Homebrew Mariadb Mysql 安装 root 访问被拒绝

Posted

技术标签:

【中文标题】Homebrew Mariadb Mysql 安装 root 访问被拒绝【英文标题】:Homebrew Mariadb Mysql installation root access denied 【发布时间】:2020-01-08 05:53:08 【问题描述】:

所以我基本上是在我的 mac 上使用自制软件安装 mariadb 和 mysql。 这些是我做的步骤:

酿造医生->工作 brew 更新 -> 工作 brew install mariadb -> 工作

mysql_install_db -> 失败

警告:无法查找主机“Toms-MacBook-Pro.local” 使用 /usr/local/Cellar/mariadb/10.4.6_1/bin/resolveip。这大概 意味着你的 libc 库不是 100% 兼容的 二进制 MariaDB 版本。 MariaDB 守护进程 mysqld 应该可以工作 通常除了主机名解析不起作用。 这意味着您应该在以下情况下使用 IP 地址而不是主机名 指定 MariaDB 权限! mysql.user 表已经存在!

之后运行mysql_upgrade 给了我以下错误:

版本检查失败。调用“mysql”时出现以下错误 命令行客户端错误 1698 (28000): 拒绝用户访问 'root'@'localhost' 致命错误:升级失败

我不能这样进入mysql:

mysql -uroot
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

但是像这样:

sudo mysql -u root

用户表返回:

MariaDB [(none)]> USE mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MariaDB [mysql]> SELECT User, Host, plugin FROM mysql.user;
+---------------+-------------------------+-----------------------+
| User          | Host                    | plugin                |
+---------------+-------------------------+-----------------------+
| root          | localhost               | mysql_native_password |
| toms          | localhost               | mysql_native_password |
|               | localhost               |                       |
|               | toms-macbook-pro.local |                       |
+---------------+-------------------------+-----------------------+
4 rows in set (0.004 sec)

【问题讨论】:

你不需要手动运行mysql_install_db。尝试brew remove mariadb 并重新安装。 @OrtomalaLokni 关键是我之前有这个错误并重新安装它,但它没有解决它,mariadb 自动运行mysql_install_db 对吗? (或类似的东西) mysql_install_db 由 Homebrew 的 Mariadb 安装脚本在 /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/mariadb.rb 运行,但它需要一些特定参数。 【参考方案1】:

问题是什么?

使用 brew 安装 MariaDB,brew install mariadb@10.2

尝试重置root密码。

方法一:mysqld_safe命令

运行命令:brew services stop mariadb@10.2 运行命令:mysqld_safe --skip-grant-tables --skip-networking 在新的终端选项卡上, MariaDB mysql_secure_installation MariaDB 的运行命令 >= 10.4 mariadb-secure-installation 这将要求输入 root 密码 在不输入任何密码的情况下按回车(此步骤可能永远不会消失!) 如果在上一步中授予了空的 root 密码 在接下来的步骤中输入并重新输入新密码 这可能会显示一些错误Password update failed!

方法二:/usr/local/mysql/bin/mysqladmin -u root -p password

这将要求输入密码 不输入任何密码直接回车 这会显示一些错误!

但是前面两种方法都不起作用!

遵循工作方法:

启动mariadb@10.2服务brew services start mariadb@10.2

运行mysql.servert start

这将显示错误日志文件位置的错误

典型的mariadb错误文件位置:/usr/local/var/mysql/<filename>.local.err

运行tail -f /usr/local/var/mysql/<filename>.local.err

然后重新运行mysql.servert start

会有一个与Invalid flags lib相关的错误

运行brew services stop mariadb@10.2

备份、备份、备份您的 DBS!这将删除所有 DB!) 运行 sudo rm -rf /usr/local/var/mysql

运行

mysql_install_db --verbose --user=`whoami`
--basedir="$(brew --prefix mariadb@10.2)"
--datadir="/usr/local/var/mysql" --tempdir="/tmp"

这将从 brew 获取 mariaDB Cellar 安装路径 这将安装初始数据库。

而不是运行mysql_secure_installationmariadb-secure-installation 运行sudo mysql -u root

这将下降到 mysql shell

输入命令:use mysql;

输入命令:ALTER USER 'root@localhost' IDENTIFIED BY '<password>';(替换)

输入命令:ALTER USER 'root@127.0.0.1' IDENTIFIED BY '<password>';(替换)

输入命令:FLUSH PRIVILEGES;

输入命令:exit

现在您可以运行mysql -u root -p 并使用在前面步骤中输入的<password>

就是这样!

【讨论】:

【参考方案2】:

我正在使用这个 mysql_secure_installation,它现在对我有用:

$ mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.

Enter current password for root (enter for none): << enter root here >>

我输入 root 作为当前密码

OK, successfully used password, moving on...

Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.

然后做剩下的

【讨论】:

【参考方案3】:

您可以尝试更新root密码并在之后访问它

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

退出Mysql并尝试登录

mysql -uroot -p # then use root as a password

【讨论】:

【参考方案4】:

MariaDB 10.4 默认为本地根启用Unix socket 身份验证插件。这意味着在新安装的系统上,您无需密码即可连接到正在运行的服务器,只要您是本地 root(例如在 sudo 下运行)并使用套接字而不是 TCP。

此外,MariaDB 10.4 允许对帐户进行多种身份验证方法。它将本地根配置为也能够使用密码身份验证,但它最初会使密码无效(不像以前那样设置空密码)。如果要使用密码验证并以mysql -uroot -p 连接,则需要首先使用Unix 套接字以root 身份连接并运行SET PASSWORD=...

高级用户配置现在以 JSON 格式存储在 mysql.global_priv 表中。 mysql.user 已被保留以实现向后兼容性,但它已不再是表格,而是变成了视图。由于允许多种身份验证方法,它并不总是准确地显示用户配置。具体来说,它没有显示用户可用的所有身份验证方法,您需要为此查询mysql.global_priv。在全新安装中,您会看到类似

+-----------+--------+--------------------------------------------------------------------------------------------------------------------------------------------+
| Host      | User   | Priv                                                                                                                                       |
+-----------+--------+--------------------------------------------------------------------------------------------------------------------------------------------+
| localhost | root   | "access":18446744073709551615,"plugin":"mysql_native_password","authentication_string":"invalid","auth_or":[,"plugin":"unix_socket"] |
...

您可以找到有关 10.4 身份验证更改的更多信息here。

【讨论】:

这很好,但如何解决?这只是信息。 解决方案究竟是什么?如果作者想通过 UNIX 套接字以root 的身份连接(换句话说,没有密码),他已经想出了如何做到这一点并写了,sudo mysql;我假设剩下的问题是为什么,以上就是解释。如果作者想通过密码认证连接,而不用sudo,解决方法是先设置密码,如上述答案第2段所示。 好的,我对您的答案投了反对票,对另一个答案投了赞成票。谢谢。 这个答案有争议,但我必须赞成。我来这里是因为我在本地机器上安装了 MariaDB 并且无法连接。这个答案解释了为什么在本地机器上使用 root 用户做某事时只使用sudo

以上是关于Homebrew Mariadb Mysql 安装 root 访问被拒绝的主要内容,如果未能解决你的问题,请参考以下文章

MAC安装启动初始化完整卸载Mariadb(MySQL)

Mac系统homebrew安装MySQL等环境

Mac 安装MySQL(Homebrew)

homebrew mysql 安装目录在哪

使用homebrew安装mysql

mac 上用homebrew安装完mysql后,怎样使用密码连接数据库