Homebrew Mariadb Mysql安装root访问被拒绝

qjp7pelc  于 2023-05-29  发布在  Mysql
关注(0)|答案(5)|浏览(191)

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

  • 酿造医生->工作
  • brew update -> worked
  • brew install mariadb -> worked
  • mysql_install_db ->失败

警告:无法使用/usr/local/Cellar/mariadb/10.4.6_1/bin/resolveip查找主机“Toms-MacBook-Pro.local”。这可能意味着您的libc库与此二进制MariaDB版本不是100%兼容。MariaDB守护进程mysqld应该正常工作,但主机名解析不起作用。这意味着在指定MariaDB权限时,您应该使用IP地址而不是主机名!mysql.user表已经存在!
运行mysql_upgrade之后,我得到了以下错误:
版本检查失败。调用'mysql'命令行客户端时出现以下错误ERROR 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)
q3aa0525

q3aa05251#

您可以尝试更新root密码,然后再访问它

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

退出Mysql并尝试登录

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

fzsnzjdm2#

MariaDB 10.4默认为本地根启用Unix socket身份验证插件。这意味着在新安装的系统上,只要您是本地根用户(例如:在sudo下运行),并使用套接字而不是TCP。
此外,MariaDB 10.4允许多种帐户身份验证方法。它将本地根配置为也能够使用密码身份验证,但它最初会使密码无效(不像以前那样设置空密码)。如果你想使用密码验证并以mysql -uroot -p身份连接,你需要首先以root身份使用Unix套接字连接并运行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的更多信息。

9udxz4iz

9udxz4iz3#

问题是什么?

  • 使用brew,brew install mariadb@10.2安装MariaDB。
  • 尝试重置root密码。
  • 方法1:mysqld_safe命令
  • 运行命令:brew services stop mariadb@10.2
  • 运行命令:mysqld_safe --skip-grant-tables --skip-networking
  • 在新的终端标签上,

运行MariaDB <= 10.4的命令:mysql_secure_installation
run command for 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!这将删除所有数据库!

运行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>

就这样!

rqdpfwrv

rqdpfwrv4#

我正在使用这个**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.

然后做剩下的事

rdlzhqv9

rdlzhqv95#

tl;dr

1.建议使用sudo。(例如sudo mysql
1.仅在必要时设置root帐户的密码。

简介

MariaDB 10.4.3开始,默认身份验证方法更改为unix_socket
一旦(unix_socket插件)具有(UNIX)用户名,它将验证连接用户为具有相同用户名的MariaDB帐户。- Authentication Plugin - Unix Socket
使用unix_socket意味着如果您是系统root用户,则可以以root@locahost身份登录,而无需密码。MariaDB 10.4认证
换句话说,如果你是系统的“root”用户,那么你可以在没有任何密码的情况下访问MariaDB的“root”用户。这可以在linux和macOS中使用sudo命令来实现。

Unix

mysql命令被拒绝,因为没有名称为“username”的MariaDB用户。

username@hostname:~$ mysql --version
# mysql  Ver 15.1 Distrib 10.6.12-MariaDB, for debian-linux-gnu (x86_64) using  EditLine wrapper

username@hostname:~$ mysql
# ERROR 1045 (28000): Access denied for user 'username'@'localhost' (using password: NO)

sudo mysql命令能够工作,因为有一个名为“root”的DB用户。

username@hostname:~$ sudo mysql
# Welcome to the MariaDB monitor.  Commands end with ; or \g.
# Your MariaDB connection id is 32
# Server version: 10.6.12-MariaDB-0ubuntu0.22.04.1 Ubuntu 22.04

MariaDB [(none)]> SELECT CURRENT_USER;
# +----------------+
# | CURRENT_USER   |
# +----------------+
# | root@localhost |
# +----------------+
# 1 row in set (0.001 sec)

“root”和“mysql”用户的身份验证字符串设置为invalid,这不是有效的密码哈希。这就是为什么这些帐户似乎有一个密码设置的原因。

MariaDB [(none)]> SELECT user, plugin, authentication_string FROM mysql.user;
# +-------------+-----------------------+-----------------------+
# | User        | plugin                | authentication_string |
# +-------------+-----------------------+-----------------------+
# | mariadb.sys | mysql_native_password |                       |
# | root        | mysql_native_password | invalid               |
# | mysql       | mysql_native_password | invalid               |
# +-------------+-----------------------+-----------------------+
# 3 rows in set (0.002 sec)

默认情况下会创建两个全能帐户- root和拥有数据目录的OS用户,通常是mysql。它们被创建为:

CREATE USER root@localhost IDENTIFIED VIA unix_socket OR mysql_native_password USING 'invalid'
CREATE USER mysql@localhost IDENTIFIED VIA unix_socket OR mysql_native_password USING 'invalid'
  • 来自MariaDB 10.4的身份验证

macOS和Brew

由于某种原因,与Brew一起安装的MariaDB的最新版本具有不同的设置。

username@hostname ~ % mysql
# Welcome to the MariaDB monitor.  Commands end with ; or \g.
# Your MariaDB connection id is 20
# Server version: 10.11.3-MariaDB Homebrew

MariaDB [(none)]> SELECT CURRENT_USER;
# +--------------------+
# | CURRENT_USER       |
# +--------------------+
# | username@localhost |
# +--------------------+
# 1 row in set (0.001 sec)

MariaDB [(none)]> SELECT user, plugin, authentication_string FROM mysql.user;
# +-------------+-----------------------+-----------------------+
# | User        | plugin                | authentication_string |
# +-------------+-----------------------+-----------------------+
# | mariadb.sys | mysql_native_password |                       |
# | root        | mysql_native_password | invalid               |
# | username    | mysql_native_password | invalid               |
# | PUBLIC      |                       |                       |
# +-------------+-----------------------+-----------------------+
# 4 rows in set (0.003 sec)

mysql命令和身份验证在没有sudo的情况下也能正常工作,因为默认情况下会创建另一个MariaDB用户--它的用户名与macOS用户名匹配。

mysql_secure_installation

臭名昭著的mysql_secure_installation脚本在MariaDB 10.4+中可能不需要。
请注意,此脚本存在的许多原因不再适用。特别是,从MariaDB 10.4开始,默认情况下应用Unix套接字身份验证,通常不需要创建root密码。请参阅MariaDB 10.4中的身份验证。- mysql_secure_installation

相关问题